java - APK 未从下载文件夹中删除

标签 java android file android-intent apk

我已经设置了BroadcastApplication 时启动安装有startActivityForResult() 。安装Intent在这里创建。

private static Intent getOpenDownloadedApkIntent(Context context, File file) {

    String name = getPackageNameForAPK(file.getPath(), context);
    if (name != null) {
        INSTALL_APK_INFO.put(name, file);
    }

    // The type of intent to use to open the downloaded apk changed in Android N (7.0)
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        Uri path = FileProvider.getUriForFile(context,
                context.getApplicationContext().getPackageName() + ".utils.DownloadedFileProvider",
                file);
        Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
        intent.setData(path);
        return intent;
    } else {
        Uri uri = Uri.fromFile(file);
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
        intent.setDataAndType(uri, "application/vnd.android.package-archive");
        return intent;
    }
}

private static String getPackageNameForAPK(final String archiveFilePath, Context context) {
    try {
        PackageInfo info = context.getPackageManager().getPackageArchiveInfo(archiveFilePath, PackageManager.GET_META_DATA);
        return info.packageName;
    } catch (Exception ex) {
        ex.printStackTrace();
        return null;
    }

}

现在,如果是Android 7或更高版本,则可以卸载,但如果是Android 6或更低版本,则似乎只是删除APK的图标。但不是APK本身。

这是应该删除 APK 的代码:

private static BroadcastReceiver onInstallComplete = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            ApplicationInfo info = null;
            try {
                info = context.getPackageManager().getApplicationInfo(intent.getDataString().split(":")[1], PackageManager.GET_META_DATA);
            } catch (PackageManager.NameNotFoundException ex) {
            }

            try {
                if (info != null) {
                    File file = INSTALL_APK_INFO.get(info.packageName);
                    if (file != null) {
                          file.delete();
                        INSTALL_APK_INFO.remove(info.packageName);
                    }
                }
            } catch (NullPointerException ex) {
            }

        }
    };

我猜测这与路径有关,但同时它似乎删除了APK的图标。我所说的图标是指如果我删除 file.delete()然后APK下载文件夹中带有图标,但如果我运行 file.delete()然后APK没有图标。

我做错了什么?

最佳答案

您的意思是说应用程序正在安装但没有启动器图标?

关于java - APK 未从下载文件夹中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57605196/

相关文章:

file - 是否可以在 Golang 中调用代码的地方获取文件名?

java - 从 ArrayList 中获取随机元素,添加到另一个 ArrayList 并从第一个 ArrayList 中删除该元素 Android

Java 服务器总是返回相同的消息

android - 在我的 Android 应用程序中保存和编辑用户信息的最佳方式

安卓自定义分类

java - 在 Android 中读取和显示大格式文本文档

file - 如何在VimScript中序列化变量?

java - 如何使用 Google Vision api 获取检测到的条码帧以进行条码检测

java - 将一个 JPanel 添加到另一个 JPanel 会添加填充

java - 扫描文件中的重复字符串