安装后删除应用程序 (*.apk) [英] Delete an application (*.apk) after installation
问题描述
我创建了一个 android 应用程序,并将其导出为 *.apk
.安装成功后是否可以自动删除apk
文件?
I've created an android application, and exported it as *.apk
. Is it possible to make the apk
file to be deleted automatically upon successful installation?
推荐答案
如果您正在安装其他一些通过您的应用程序下载的 APK,并且在安装成功后想要删除,请跟我来 :-)
If you are installing some other APK downloading through you application and want to remove if after successful install, follow me :-)
第 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 步:注册接收者
Step 2: Register Receiver
<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
中创建,它会根据实现而有所不同.
In your Installer activity create a hash map like this, I have created in ApplicationMain
, it will differ according to implementation.
public static final ConcurrentHashMap<String, File> INSTALL_APK_INFO = new ConcurrentHashMap<String, File>();
并填写包名称和文件,apk 所在的位置.您可以使用此方法从任何 apk 中获取包名称
and fill it with package name and file, where apk is put. You can get Pacakage name from any apk using this method
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 步:现在在您的安装接收器上执行此操作
Step 5: Now on your install receiver just do this
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 所在的位置.
1) create a hashmap and populate it with the APK package name and file. File is where exactly your APK is present.
请求安装 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) 注册包添加、更改、安装意图
2) Register Package added, changed, install intents
3) 在您的接收器上获取从 Intent
3) On your receiver get the the package name that is installed from Intent
4) 从您的哈希图中获取文件对象,然后调用 delete()
4) Get the file object from your hashmap and just call delete()
这篇关于安装后删除应用程序 (*.apk)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!