android 相册静音播放键 闪退应用异常

BUG记录

1.问题复现:

使用android设备mtk平台的机器,其中相机录制视频之后在图库打开可正常播放,但单开某一视频选择静音播放就会闪退之后图库停止运行,返回到桌面。

2.问题分析:

首先进行LOG获取,可以通过抓去log工具进行log获取,或直接使用adb命令查看异常

adb logcat|findstr Runtime  //崩溃日志查看

笔者因为方便选择了使用adb命令直接查看崩溃日志

直接将报错信息去查询看看什么问题先,笔者在网上找了几篇都大同小异,就挑了一篇给大家来参考,其报错原因是因为uri资源不共享导致, 所以用FileProvider实现资源共享就解决了。

exposed beyond app through Intent.getData()-CSDN博客文章浏览阅读4k次。绝大多数国产Android App都会内置一个更新功能,也就是把新版本的APK放在服务器上,通过接口获取更新信息并下载,然后进行安装。虽然这种行为被Google严厉禁止,但身处这种环境下还是得妥协的。绝大多数的经验人士都知道以往我们在App内部安装新版本APK的时候,只需要使用非常简单的代码就能实现:Intent intent = new Intent();intent.setAction(..._exposed beyond app through intent.getdata()https://blog.csdn.net/yizhen12/article/details/104709222

3.解决方法:

定位到uri资源intent位置,如上方红色箭头标识处。主要分为三步走。

1.先找到相应的AndroidManifest.xml文件在其中注册相应的资源

alps/packages/apps/Gallery2/AndroidManifest.xml

<!--wjj add -->
            
<provider
    android:name="androidx.core.content.FileProvider" //定义相应的name名称用于java调用时所导入路径
    android:authorities="com.android.gallery3d.fileprovider" //当前应用包名+.fileprovider
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"   //用以区分的名称
        android:resource="@xml/file_paths"  //在xml文件中添加的资源文件名称
    />
</provider>

<!--wjj end -->

2.在当前目录下xml里新建一个资源文件,文件名称与菜单文件中注册的保持一致

alps/packages/apps/Gallery2/res/xml/file_paths.xml

<?xml version="1.0" encoding="utf-8"?> 

<paths xmlns:android="http://schemas.android.com/apk/res/android">
        <external-path name="external_files" path="."/>
</paths>

3.最后一步也是关键的一步,找到对应的java文件intent发出点进行修改

alps/packages/apps/Gallery2/src/com/android/gallery3d/app/MuteVideo.java


//首先按照注册路径导入相应包
import androidx.core.content.FileProvider;

//intent 启动代码

Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);  //菜单文件注册区分
Uri uri
//FileProvider.getUriForFile(上下文对象,菜单注册authorities名称,存储路径)参数说明
uri = FileProvider.getUriForFile(mActivity,"com.android.gallery3d.fileprovider",  mDstFileInfo.mFile);
intent.setDataAndType(uri, "video/*");
startActivity(intent);

4.总结:

这个问题吧其实还是比较常见的,总结出来希望能给大家带来帮助。主要是分析的过程比较重要,有错误或补充还望大家不吝赐教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值