Android 7file:///storage/emulated/0/machineStateDownload/2.apk exposed beyond app through Intent.get

错误信息:

432 3719-3719/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.kingbright.machine_state, PID: 3719
    android.os.FileUriExposedException: file:///storage/emulated/0/machineStateDownload/2.apk exposed beyond app through Intent.getData()
        at android.os.StrictMode.onFileUriExposed(StrictMode.java:1814)
        at android.net.Uri.checkFileUriExposed(Uri.java:2346)
        at android.content.Intent.prepareToLeaveProcess(Intent.java:8970)
        at android.content.Intent.prepareToLeaveProcess(Intent.java:8931)
        at android.app.Instrumentation.execStartActivity(Instrumentation.java:1519)
        at android.app.Activity.startActivityForResult(Activity.java:4227)
        at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:675)
        at android.app.Activity.startActivityForResult(Activity.java:4185)
        at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:662)
        at android.app.Activity.startActivity(Activity.java:4524)
        at android.app.Activity.startActivity(Activity.java:4492)
        at com.kingbright.machine_state.MainActivity.installAPK(MainActivity.java:373)
        at com.kingbright.machine_state.MainActivity$1.handleMessage(MainActivity.java:98)
        at android.os.Handler.dispatchMessage(Handler.java:110)
        at android.os.Looper.loop(Looper.java:203)
        at android.app.ActivityThread.main(ActivityThread.java:6297)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1084)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:945)
file_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<!--    表示系统根目录/-->
    <root-path name="myroot" path="."  />
</paths>
AndroidManifest.xml
<provider
            android:authorities="com.kingbright.machine_state.provider"
            android:name="androidx.core.content.FileProvider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths"/>
        </provider>

main.java

Intent intent = new Intent(Intent.ACTION_VIEW);
            Uri data;
//            "application/vnd.android.package-archive"是文件类型,具体对应apk类型。
            String type = "application/vnd.android.package-archive";
//            用于解决android 7.0 无法弹出安装对话框的问题
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
                data = Uri.fromFile(apkFile);
            }
            else{//android 7.0 及以上版本
                intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                String authority = "com.kingbright.machine_state.provider";
                data = FileProvider.getUriForFile(mContext, authority, apkFile);
            }
            intent.setDataAndType(data, type);            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) ;
            MainActivity.this.startActivity(intent);  //弹出一个安装对话框
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值