android 安装apk

配置文件

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="com.xx.xx.fileProvider" //包名加.fileProvider
    android:exported="false"
    android:grantUriPermissions="true">

    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

file_paths.xml文件

<resources>
    <paths>
        <external-path name="name" path="myapp" />
    </paths>
    <!--path:需要临时授权访问的路径(.代表所有路径),属性值不能使用具体的独立文件名,只能是目录名-->
    <!--name:就是给 path 属性所指定的子目录名称取一个别名,后续生成 content:// URI 时,
             会使用这个别名代替真实目录名。这样做的目的,是为了提高安全性-->

    <!--外部存储又分为SD卡和扩展卡内存,此处外部存储空间对应为内置SD卡内存-->
    <!--内部存储,我们称为InternalStorage,外部存储我们称为ExternalStorage-->

    <!--<files-path>:内部存储空间应用私有目录下的 files/ 目录,等同于 Context.getFilesDir() 所获取的目录路径;-->
    <!--<cache-path>:内部存储空间应用私有目录下的 cache/ 目录,等同于 Context.getCacheDir() 所获取的目录路径;-->
    <!--<external-path>:外部存储空间根目录,等同于 Environment.getExternalStorageDirectory() 所获取的目录路径;-->
    <!--<external-files-path>:外部存储空间应用私有目录下的 files/ 目录,等同于 Context.getExternalFilesDir(null) 所获取的目录路径;-->
    <!--<external-cache-path>:外部存储空间应用私有目录下的 cache/ 目录,等同于 Context.getExternalCacheDir();-->
</resources>

java代码

 

Uri fileuri; Intent intent = new Intent(Intent.ACTION_VIEW);

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

if (Build.VERSION.SDK_INT>=24){

fileuri = FileProvider.getUriForFile(this,"com.xx.xx.fileProvider",new File(Environment.getExternalStorageDirectory() + "/myapp", "appname.apk"));

}else{

fileuri = Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/myapp", "appname.apk")); } intent.setDataAndType(fileuri, "application/vnd.android" + ".package-archive");

startActivity(intent);

9.0好像默认不支持http所以在配置文件中的application添加

android:usesCleartextTraffic="true"

这样9.0以下的安装apk基本没得问题了。

Uri 中的路径一定要是你apk的下载路径.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值