gpt4 book ai didi

java - 在 android 7 或更高版本中自动安装应用程序

转载 作者:行者123 更新时间:2023-12-01 20:17:47 24 4
gpt4 key购买 nike

我想在我的项目中安装应用程序。但我的代码在 api 24 或更高版本中不起作用。它的解决方案是什么?

我的代码是:

String timestamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());
String dir = Environment.getExternalStorageDirectory() + "/" + context.getResources().getString(R.string.cache_path);
String appName = appModel.getAppUrl().substring(appModel.getAppUrl().lastIndexOf('/') + 1, appModel.getAppUrl().length());
appName = timestamp + "_" + appName;

private void appInstaller(String dir, String appName) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
File file = new File(dir, appName);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
startActivity(intent);
} else {
Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/" + dir + "/" + appName)), "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}

list :

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

这个question就像我的问题一样。但它的解决方案对我来说不起作用!

感谢您帮助我!

最佳答案

我解决了这个问题,这种方法对我来说是正确的:第一:

private static final String APP_DIR = Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyAppFolderInStorage/";

private void install() {
File file = new File(APP_DIR + fileName);

if (file.exists()) {
Intent intent = new Intent(Intent.ACTION_VIEW);
String type = "application/vnd.android.package-archive";

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Uri downloadedApk = FileProvider.getUriForFile(getContext(), "ir.greencode", file);
intent.setDataAndType(downloadedApk, type);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
} else {
intent.setDataAndType(Uri.fromFile(file), type);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}

getContext().startActivity(intent);
} else {
Toast.makeText(getContext(), "ّFile not found!", Toast.LENGTH_SHORT).show();
}
}

第二:对于 android 7 及更高版本,您应该在 list 中定义一个提供程序,如下所示!

<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="ir.greencode"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/paths" />
</provider>

第三:在 res/xml 文件夹中定义 path.xml,如下所示!我正在使用此路径作为内部存储,如果您想将其更改为其他路径,有几种方法!你可以去这个FileProvider

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="your_folder_name" path="MyAppFolderInStorage/"/>
</paths>

第四:您应该在 list 中添加此权限:

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

关于java - 在 android 7 或更高版本中自动安装应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58949767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com