美文网首页
手机音影工具类及功能性代码

手机音影工具类及功能性代码

作者: GeekGray | 来源:发表于2018-10-03 19:24 被阅读10次

阅读原文

屏幕各个Activity页面横竖屏切换执行onCreate方法

在功能清单文件的每个activity配置

<activity
            android:name="com.atguigu.mobileplayer.video.VideoPlayerActivity"
            android:configChanges="keyboardHidden|screenSize|orientation"
            android:screenOrientation="landscape" />

解决安卓6.0以上版本不能读取外部存储权限的问题

/**
 * 解决安卓6.0以上版本不能读取外部存储权限的问题
 * @param activity
 * @return
 */
public static boolean isGrantExternalRW(Activity activity) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && activity.checkSelfPermission(
            Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {

        activity.requestPermissions(new String[]{
                Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE
        }, 1);

        return false;
    }

    return true;
}

得到网络速度

private long lastTotalRxBytes = 0;
private long lastTimeStamp = 0;

/**
 * 得到网络速度
 * 每隔两秒调用一次
 *
 * @param context
 * @return
 */
public String getNetSpeed(Context context)
{
    String netSpeed = "0 kb/s";
    long nowTotalRxBytes = TrafficStats.getUidRxBytes(context.getApplicationInfo().uid) == TrafficStats.UNSUPPORTED ? 0 : (TrafficStats.getTotalRxBytes() / 1024);//转为KB;
    long nowTimeStamp = System.currentTimeMillis();
    long speed = ((nowTotalRxBytes - lastTotalRxBytes) * 1000 / (nowTimeStamp - lastTimeStamp));//毫秒转换

    lastTimeStamp = nowTimeStamp;
    lastTotalRxBytes = nowTotalRxBytes;
    netSpeed = String.valueOf(speed) + " kb/s";
    return netSpeed;
}

判断是否是网络的资源

/**
 * 判断是否是网络的资源
 *
 * @param uri
 * @return
 */
public boolean isNetUri(String uri)
{
    boolean reault = false;
    if (uri != null)
    {
        if (uri.toLowerCase().startsWith("http") || uri.toLowerCase().startsWith("rtsp") || uri.toLowerCase().startsWith("mms"))
        {
            reault = true;
        }
    }
    return reault;
}

把毫秒转换成:1:20:30这种形式

private StringBuilder mFormatBuilder;
private Formatter mFormatter;

/**
     * 把毫秒转换成:1:20:30这里形式
     *
     * @param timeMs
     * @return
     */
    public String stringForTime(int timeMs)
    {
        int totalSeconds = timeMs / 1000;
        int seconds = totalSeconds % 60;

        int minutes = (totalSeconds / 60) % 60;

        int hours = totalSeconds / 3600;

        mFormatBuilder.setLength(0);
        if (hours > 0)
        {
            return mFormatter.format("%d:%02d:%02d", hours, minutes, seconds)
                    .toString();
        }
        else
        {
            return mFormatter.format("%02d:%02d", minutes, seconds).toString();
        }
    }


    // 转换成字符串的时间
    mFormatBuilder = new StringBuilder();
    mFormatter = new Formatter(mFormatBuilder, Locale.getDefault());

得到系统时间

    /**
     * 得到系统时间
     *
     * @return
     */
    private String getSysteTime()
    {
        SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
        return format.format(new Date());
    }

17-手指在屏幕上下滑动实现声音大小变化

private  float startY;

/**
 * 滑动的区域
 */
private float touchRang;
/**
 * 当前的音量
 */
private  int mVol;


   //接收事件,传递给手识别器
    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        //3.把事件传递给手势识别器
        detector.onTouchEvent(event);
        switch (event.getAction())
        {
            case MotionEvent.ACTION_DOWN://手指按下
                //1.按下记录值
                startY = event.getY();
                mVol = am.getStreamVolume(AudioManager.STREAM_MUSIC);
                touchRang = Math.min(screenHeight, screenWidth);//screenHeight
                handler.removeMessages(HIDE_MEDIACONTROLLER);

                break;
            case MotionEvent.ACTION_MOVE://手指移动
                //2.移动的记录相关值
                float endY = event.getY();
                float distanceY = startY - endY;
                //改变声音 = (滑动屏幕的距离: 总距离)*音量最大值
                float delta = (distanceY / touchRang) * maxVoice;
                //最终声音 = 原来的 + 改变声音;
                int voice = (int) Math.min(Math.max(mVol + delta, 0), maxVoice);
                if (delta != 0)
                {
                    isMute = false;
                    updataVoice(voice, isMute);
                }

//                startY = event.getY();//不要加
                break;
            case MotionEvent.ACTION_UP://手指离开
                handler.sendEmptyMessageDelayed(HIDE_MEDIACONTROLLER, 4000);
                break;
        }
        return super.onTouchEvent(event);
    }

18-监听按手机声音健改变声音

    /**
     * 监听物理健,实现声音的调节大小
     *
     * @param keyCode
     * @param event
     * @return
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
        {
            currentVoice--;
            updataVoice(currentVoice, false);
            handler.removeMessages(HIDE_MEDIACONTROLLER);
            handler.sendEmptyMessageDelayed(HIDE_MEDIACONTROLLER, 4000);
            return true;
        }
        else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP)
        {
            currentVoice++;
            updataVoice(currentVoice, false);
            handler.removeMessages(HIDE_MEDIACONTROLLER);
            handler.sendEmptyMessageDelayed(HIDE_MEDIACONTROLLER, 4000);
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

25.3-屏蔽系统播放器和Vitamio播放器切换的动画

<style name="noAnimation_Theme" parent="android:Theme">
    <item name="android:windowAnimationStyle">@style/noAnimation</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

<style name="noAnimation">
    <item name="android:activityOpenEnterAnimation">@null</item>
    <item name="android:activityOpenExitAnimation">@null</item>
    <item name="android:activityCloseEnterAnimation">@null</item>
    <item name="android:activityCloseExitAnimation">@null</item>
    <item name="android:taskOpenEnterAnimation">@null</item>
    <item name="android:taskOpenExitAnimation">@null</item>
    <item name="android:taskCloseEnterAnimation">@null</item>
    <item name="android:taskCloseExitAnimation">@null</item>
    <item name="android:taskToFrontEnterAnimation">@null</item>
    <item name="android:taskToFrontExitAnimation">@null</item>
    <item name="android:taskToBackEnterAnimation">@null</item>
    <item name="android:taskToBackExitAnimation">@null</item>

</style>

使用样式:

<activity android:name=".videoplayer.VitamioVideoPlayerActivity"
    android:screenOrientation="landscape"
    android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
    android:theme="@style/noAnimation_Theme"/>

滑动屏幕左边改变亮度滑动右边改变声音

参照代码:http://blog.csdn.net/piaozhiye/article/details/6544450

1.添加权限

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

2.集成后的代码

private float startY;
private float startX;

private float touchRang;

private int mVol;

@Override
public boolean onTouchEvent(MotionEvent event) {
    //3.把事件给手势识别器解析
    detector.onTouchEvent(event);
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            //1.按下的时候记录初始值
            startY = event.getY();
            startX = event.getX();
            touchRang = Math.min(screenHeight, screenWidth);//screenHeight
            mVol = am.getStreamVolume(AudioManager.STREAM_MUSIC);
            handler.removeMessages(HIDE_MEDIACONTROLLER);
            break;
        case MotionEvent.ACTION_MOVE:
            //2.来到新的坐标
            float endY = event.getY();
            float endX = event.getX();


            if (endX < screenWidth / 2) {
                //左边屏幕-屏幕亮度调节

                final double FLING_MIN_DISTANCE = 0.5;
                final double FLING_MIN_VELOCITY = 0.5;
                if (startY - endY > FLING_MIN_DISTANCE
                        && Math.abs(endY - startY) > FLING_MIN_VELOCITY) {
                    setBrightness(20);
                }
                if (startY - endY < FLING_MIN_DISTANCE
                        && Math.abs(endY - startY) > FLING_MIN_VELOCITY) {
                    setBrightness(-20);
                }


            } else {
                //屏幕右边-声音调节

                //3.计算偏移量
                float distanceY = startY - endY;
                //屏幕滑动的距离: 总距离 = 改变的声音: 最大音量
                float changVolume = (distanceY / touchRang) * maxVolume;

                //最终的声音= 原来的音量 + 改变的声音;
                float volume = Math.min(Math.max(mVol + changVolume, 0), maxVolume);


                if (changVolume != 0) {
                    updateVolumeProgress((int) volume);
                }
            }


            break;
        case MotionEvent.ACTION_UP:
            handler.sendEmptyMessageDelayed(HIDE_MEDIACONTROLLER, 5000);
            break;
    }
    return super.onTouchEvent(event);
}

相关文章

网友评论

      本文标题:手机音影工具类及功能性代码

      本文链接:https://www.haomeiwen.com/subject/gsctaftx.html