android10调用安装程序安装apk

android10调用安装程序安装apk


        目前在写android期末作业,想写一个华为应用商店那样的app,自建了服务器之后,用了xutil的文件下载功能把apk下载下来,但是当需要自动安装时总是调用不了安装程序

        网上的一些方法很多已经老旧过时了,几乎没有几篇有用的,我在搜了几天后终于找到了方法,分享一下,防止更多人踩坑,本人的手机是荣耀9x,系统是安卓10的,可以成功调用安装。

 1.首先添加授权,

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.REPLACE_EXISTING_PACKAGE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
然后再<application ......>中添加
 

android:requestLegacyExternalStorage="true"
 
android:usesCleartextTraffic="true"
这一堆权限添加下来准没问题

2.然后还要在<application>......</application>中添加这样一串代码

只需要修改authorities就可以了

<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="程序的包名.fileprovider" //这里要与后面的对应起来,注意大小写一致
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" /> //这个是一个xml文件,顾名思义是文件路径用的
                                               //AS中点击alt+enter自动建立file_paths.xml
                                                
</provider>
3.找到file_paths.xml  一般就在res目录下

        就是这个

把path修改为你的软件保存的目录

<resources>
    <root-path
        name="app"               //不需要改
        path="/sdcard/holimy"   //你下载的软件保存的目录
        />
</resources>
4.之后就是调用安装程序了

        这里修改软件的路径
               然后让那一串字符与前面对应

Intent installIntent=new Intent();
installIntent.setAction(Intent.ACTION_VIEW);
installIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
installIntent.addCategory(Intent.CATEGORY_DEFAULT);
File f=new File("/sdcard/holimy/dq1.apk"); //找到下载的文件路径
 
String type="application/vnd.android.package-archive";
 
如果是android7之后
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    Uri uri = FileProvider.getUriForFile(context,
                        "包名.fileprovider", f);//这一部分要与前面对应                                                                                     
    installIntent.addFlags(installIntent.FLAG_GRANT_READ_URI_PERMISSION);
    installIntent.setDataAndType(uri, type);
    
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        boolean hasInstallPermission =getPackageManager().canRequestPackageInstalls();
            if (!hasInstallPermission) {
                startInstallPermissionSettingActivity();
            }
    }
} else {
    installIntent.setDataAndType(Uri.fromFile(f), type);
}
startActivityForResult(installIntent,0);
android.os.Process.killProcess(android.os.Process.myPid());//关闭程序
 
    @RequiresApi(api = Build.VERSION_CODES.O)
    private void startInstallPermissionSettingActivity() {
        //注意这个是8.0新API
        Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }
这样以来

就可以调用安装程序了

其中就是路径需要注意一下,看了网上许多人在路径中都是用了

Environment.getExternalStorageDirectory()
对于这个不太懂,一开始我在new File()中使用的是Environment.getExternalStorageDirectory()+"holimy/dq1.apk"

好像可以找到,但是却不能调用安装

我在后来改成了绝对路径终于可以运行了

本人只了解到了方法,对于其中的一些道理了解的还不是很深刻

想要更深入的了解请参考(看了那么多,感觉只有这两篇比较有用)

Android app更新适配安卓10、11版本_LaughingHe的博客-CSDN博客_适配安卓10

Android11 下载APK并安装_~随心~的博客-CSDN博客_android11安装apk

最后别忘记允许权限
————————————————
版权声明:本文为CSDN博主「朔合」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_53161797/article/details/121863276

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值