android 接腾讯人脸识别Api,GSYVideoPlayer禁用快进功能,android 手机缓存文件目录

244 阅读4分钟

​​持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情

目录

增加网络请求权限

Permission denied (maybe missing INTERNET permission) 错误解决

android.os.NetworkOnMainThreadException

添加依赖

添加jar

 生成公共类方法,静态​


增加网络请求权限

错误:

Permission denied (maybe missing INTERNET permission) 错误解决

<uses-permission android:name="android.permission.INTERNET" />

android.os.NetworkOnMainThreadException

if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}

添加依赖

报错:java.lang.Error:javax.xml.datatype.DatatypeConfigurationException:Provider org.apache.xerces.jaxp.datatype.DatatypeFactoryImpl

implementation 'xerces:xercesImpl:2.11.0'

添加包:

在git 里面找相应的工具包

​编辑

添加jar

依赖 jar 地址:

GitHub - TencentCloud/tencentcloud-sdk-java: Tencent Cloud API 3.0 SDK for Java

 生成公共类方法,静态

    public static Float picCompareTencent(String ImageA,String ImageB,String UrlA,String UrlB) {
        if (android.os.Build.VERSION.SDK_INT > 9) {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
        }
        try{
            // 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
            // 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
            Credential cred = new Credential("AKIDSk0Mo6Y8vXydNvJYmrmR4uLZcUO8KM1X", "Xza0FJO9jHk061kHH8pOn49HKk062rpd");
            // 实例化一个http选项,可选的,没有特殊需求可以跳过
            HttpProfile httpProfile = new HttpProfile();
            httpProfile.setEndpoint("iai.tencentcloudapi.com");
            // 实例化一个client选项,可选的,没有特殊需求可以跳过
            ClientProfile clientProfile = new ClientProfile();
            clientProfile.setHttpProfile(httpProfile);
            // 实例化要请求产品的client对象,clientProfile是可选的
            IaiClient client = new IaiClient(cred, "ap-beijing", clientProfile);
            // 实例化一个请求对象,每个接口都会对应一个request对象
            CompareFaceRequest req = new CompareFaceRequest();
            req.setImageA(ImageA);
            req.setImageB(ImageB);
            req.setUrlA(UrlA);
            req.setUrlB(UrlB);
            // 返回的resp是一个CompareFaceResponse的实例,与请求对象对应
            CompareFaceResponse resp = client.CompareFace(req);
            // 输出json格式的字符串回包
            System.out.println(CompareFaceResponse.toJsonString(resp));
            return   resp.getScore();
        } catch (TencentCloudSDKException e) {
            return   null ;
        }
    }

Android文件系统管理— /storage/emulated/0/Android/data/{packgename}

/mnt/sdcard/Android/data/com.zhongxin.learninglibrary/cache/header_image

​编辑

 ​编辑

/data/data/com.zhongxin.learninglibrary

GSYVideoPlayer是什么

GSYVideoPlayer的功能有哪些,例如HTTPS,支持弹幕,外挂字幕,支持滤镜、水印、gif截图,片头广告,还有支持基本的拖动,声音、亮度调节,支持边播边缓存,支持视频自带rotation的旋转(90,270之类)等等等等,看着有点乱,还是让TJ君用表格的形式展现给大家吧:

功能类型具体功能描述
缓存边播边缓存,使用了AndroidVideoCache;ExoPlayer使用SimpleCache。
协议h263\4\5、Https、concat、rtsp、hls、rtmp、crypto、mpeg等等。(ijk模式格式支持)
滤镜简单滤镜(马赛克、黑白、色彩过滤、高斯、模糊、模糊等等20多种)、动画、(水印、画面多重播放等)。
帧图视频第一帧、视频帧截图功能,视频生成gif功能。
播放列表播放、列表连续播放、重力旋转与手动旋转、视频本身rotation旋转属性、快播和慢播、网络视频加载速度。
画面调整显示比例:默认、16:9、4:3、填充;播放时旋转画面角度(0,90,180,270);镜像旋转。
内核IJKPlayer、EXOPlayer、MediaPlayer切换、自定义内核
布局全屏与非全屏两套布局切换、没有任何操作控件的纯播放支持、弹幕功能、继承自定义任何布局。
播放单例播放、多个同时播放、视频列表滑动自动播放、列表切换详情页面无缝播放。
窗口小窗口、多窗体下(包括桌面)的小窗口播放。
广告片头广告、跳过广告支持、中间插入广告功能。
字幕exo2模式下支持自定增加外挂字幕。
dashexo2 模式支持dash
更多暂停前后台切换不黑屏;调整不同清晰度的支持;无缝切换支持;锁定/解锁全屏点击功能;进度条小窗口预览(测试)。
自定义可自定义渲染层、自定义管理层、自定义播放层(控制层)、自定义缓存层。

 GSYVideoPlayer使用

implementation 'com.shuyu:GSYVideoPlayer:7.1.8'

<activity
    android:name=".MpActivity"
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
    android:screenOrientation="portrait" />

<com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
android:id="@+id/detail_player"
android:layout_width="match_parent"
android:layout_height="250dp"
/>
//加载视频

videoUrl = dataBean.getVideoUrl();
viewHolder.detail_player.setUpLazy(videoUrl, true, null, null, "哈哈哈");
//全屏动画
viewHolder.detail_player.setShowFullAnimation(true);
//设置返回键
viewHolder.detail_player.getBackButton().setVisibility(View.GONE);
//设置全屏按键功能
viewHolder.detail_player.getFullscreenButton().setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        viewHolder.detail_player.startWindowFullscreen(context, false, true);
    }
});
//是否根据视频尺寸,自动选择竖屏全屏或者横屏全屏
viewHolder.detail_player.setAutoFullWithSize(true);
//防止错位设置
viewHolder.detail_player.setPlayTag(TAG);
viewHolder.detail_player.setPlayPosition(position);
//小屏时不触摸滑动
viewHolder.detail_player.setIsTouchWiget(false);
//点击跳转到视频作品
viewHolder.hot_line.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(context, VideosWordsActivity.class);
        context.startActivity(intent);
    }
});

GSYVideoPlayer禁用快进功能

继承StandardGSYVideoPlayer

package com.base.learning_zhongxin.video.videoplayer;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageView;

import com.base.learning_zhongxin.R;
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;

public class FullGSYVideoPlayer extends StandardGSYVideoPlayer {

    public FullGSYVideoPlayer(Context context, Boolean fullFlag) {
        super(context, fullFlag);
    }

    public FullGSYVideoPlayer(Context context) {
        super(context);
    }

    public FullGSYVideoPlayer(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public onGetState getState;


    @Override
    public int getLayoutId() {
        return R.layout.video_header_layout;
    }

    @Override
    protected void updateStartImage() {
        if (mStartButton instanceof ImageView) {
            ImageView imageView = (ImageView) mStartButton;
            if (mCurrentState == CURRENT_STATE_PLAYING) {
                imageView.setImageResource(R.drawable.video_click_pause_selector);
            } else if (mCurrentState == CURRENT_STATE_ERROR) {
                imageView.setImageResource(R.drawable.video_click_play_selector);
            } else {
                imageView.setImageResource(R.drawable.video_click_play_selector);
            }
        }
    }


    @Override
    protected void init(Context context) {
        super.init(context);
        //第一个true是否需要隐藏actionbar,第二个true是否需要隐藏statusbar
//        startWindowFullscreen(context, true, true);
    }



    @Override
    protected void setStateAndUi(int state) {
        super.setStateAndUi(state);
        if (getState != null){
            getState.getStateAndUi(state);
        }
    }

    public interface onGetState{
        void getStateAndUi(int state);
    }
}

重写布局

​编辑

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/black">

    <RelativeLayout
        android:id="@+id/surface_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center">

    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/thumb"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:background="#000000"
        android:scaleType="fitCenter" />

    <LinearLayout
        android:id="@+id/layout_bottom"
        android:layout_width="match_parent"
        android:layout_height="@dimen/size_big_40"
        android:layout_alignParentBottom="true"
        android:background="#99000000"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:visibility="invisible">

        <TextView
            android:id="@+id/current"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/size_nomal_16"
            android:text="00:00"
            android:textSize="@dimen/text_size_small_12"

            android:textColor="#ffffff" />
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="1.0"></TextView>

        <SeekBar
            android:visibility="gone"
            android:id="@+id/progress"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="1.0"
            android:background="@null"
            android:max="100"
            android:maxHeight="@dimen/size_small_4"
            android:minHeight="@dimen/size_small_4"
            android:paddingBottom="@dimen/size_small_8"
            android:paddingTop="@dimen/size_small_8"
            android:progressDrawable="@drawable/video_seebar_progress_layer"
            android:thumb="@drawable/video_seekbar_thumb_layer" />

        <TextView
            android:id="@+id/total"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="@dimen/size_nomal_16"
            android:textSize="@dimen/text_size_small_12"
            android:text="00:00"
            android:textColor="#ffffff" />

        <ImageView
            android:id="@+id/fullscreen"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:paddingRight="@dimen/size_nomal_16"
            android:scaleType="center"
            android:src="@drawable/full_screen_icon" />
    </LinearLayout>

    <ProgressBar
        android:id="@+id/bottom_progressbar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="1.5dp"
        android:layout_alignParentBottom="true"
        android:max="100"
        android:progressDrawable="@drawable/video_progress" />

    <ImageView
        android:id="@+id/back_tiny"
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:layout_marginLeft="6dp"
        android:layout_marginTop="6dp"
        android:visibility="gone" />




    <ProgressBar
        android:id="@+id/loading"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="28dp"
        android:layout_height="28dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:visibility="invisible" />

    <ImageView
        android:id="@+id/start"
        android:layout_width="@dimen/size_big_40"
        android:layout_height="@dimen/size_big_40"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_gravity="center_vertical"
        android:src="@drawable/video_click_play_selector" />

    <ImageView
        android:id="@+id/small_close"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:paddingLeft="10dp"
        android:paddingTop="10dp"
        android:scaleType="centerInside"
        android:src="@drawable/video_small_close"
        android:visibility="gone" />

    <LinearLayout
        android:id="@+id/layout_top"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:layout_alignParentTop="true"
        android:layout_toEndOf="@+id/back_tiny"
        android:layout_toRightOf="@+id/back_tiny"
        android:background="@drawable/video_title_bg"
        android:gravity="center_vertical">

        <ImageView
            android:id="@+id/back"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:paddingLeft="10dp"
            android:scaleType="centerInside"
            android:src="@drawable/video_back" />

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:paddingLeft="10dp"
            android:textColor="@android:color/white"
            android:textSize="18sp" />
    </LinearLayout>

</RelativeLayout>