安装后删除应用程序(* .apk)

时间:2013-04-13 05:20:33

标签: android apk android-install-apk

我创建了一个Android应用程序,并将其导出为*.apk。是否可以在成功安装后自动删除apk文件?

4 个答案:

答案 0 :(得分:7)

如果您正在通过您的应用程序安装其他APK下载并想要在成功安装后删除,请关注我: - )

第1步: 在AndroidManifest.xml

中声明以下权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_ADDED" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_CHANGED" />    
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_INSTALL" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REPLACED" />

第2步: 注册接收器

<receiver
            android:name="com.az.appstore.InstallReceiver"
            android:enabled="true" >
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_ADDED" />
                <action android:name="android.intent.action.PACKAGE_CHANGED" />
                <action android:name="android.intent.action.PACKAGE_REMOVED" />
                <action android:name="android.intent.action.PACKAGE_INSTALL" />


                <data android:scheme="package" />
            </intent-filter>
        </receiver>

第4步:

在您的安装程序活动中创建一个这样的哈希映射,我在ApplicationMain中创建,它将根据实现而有所不同。

public static final ConcurrentHashMap<String, File> INSTALL_APK_INFO = new ConcurrentHashMap<String, File>();

并用包名称和文件填充它,其中放置了apk。您可以使用此方法从任何apk获取Pacakage名称

public 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;
        }

    }

第5步: 现在在您的安装接收器上执行此操作

if (action.equals(Intent.ACTION_PACKAGE_ADDED) || action.equals(Intent.ACTION_PACKAGE_CHANGED) || action.equals(Intent.ACTION_PACKAGE_INSTALL) || action.equals(Intent.ACTION_PACKAGE_REPLACED)) {
            ApplicationInfo info = null;
            try {
                info = context.getPackageManager().getApplicationInfo(intent.getDataString().split(":")[1], PackageManager.GET_META_DATA);
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                if (info != null) {
                    File file = ApplicationMain.INSTALL_APK_INFO.get(info.packageName);
                    if (file != null) {
                        file.delete();
                        ApplicationMain.INSTALL_APK_INFO.remove(info.packageName);
                    }
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }

<强>摘要

1)创建一个hashmap并使用APK包名称和文件填充它。文件就是您的APK的确切位置。

请求安装APK

public static void installUpdateAPK(Context context, String pathToAPK) {

        pathToAPK = pathToAPK.replace("file:///", "");

        final Intent intent = new Intent(Intent.ACTION_VIEW);
        File file = new File(pathToAPK);
        intent.setDataAndType(Uri.fromFile(file), APK_MIME_TYPE);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
        String name = getPackageNameForAPK(pathToAPK, context);

        if (name != null) {
            ApplicationMain.INSTALL_APK_INFO.put(name, file);
        }
    }

2)注册包添加,更改,安装意图

3)在您的接收器上获取从Intent

安装的包名称

4)从hashmap获取文件对象,然后调用delete()

答案 1 :(得分:3)

安装完成后,是否从设备的SD卡中删除了APK无关紧要。即使可以在应用程序中编写此类功能,任何拥有root设备的用户都始终能够从/data/app/系统分区访问APK。这有效地使您无法首先删除APK。

话虽这么说,你可以添加一个在第一次运行时删除APK的功能。由于APK可以保存/存储在SD卡的任何位置,我认为这些问题帮助您。

要查找文件:Search entire sdcard for a specific file

要在找到文件后删除该文件:How to delete a file from SD card?

答案 2 :(得分:1)

如果您知道在设备上下载apk的位置,那么您可以在首次运行应用时将其删除。如果它在SD卡上,您需要获得写入权限。

但是,如果您不知道它的保存位置,那么最多您必须扫描设备以获取具有您提供的名称的apk文件并将其删除。

此外,安装后,apks将被复制到内部存储。任何拥有root设备的用户都可以恢复你的apk。

Beta测试是一个值得信赖的问题。如果你不相信你要给apk进行测试的人,不要把它交给他们。

答案 3 :(得分:-1)

当应用程序启动时,您可以手动检查sdcard / download文件夹(或您可能保存apk的其他位置)。然后从那里删除它。

为避免在每次运行中搜索,您可以在共享首选项中存储first_run字段。默认情况下将字段设置为true,并在首次运行后将其设置为false。这样你就可以发现第一个小矮人