Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用其APK卸载应用程序_Java_Android - Fatal编程技术网

Java 使用其APK卸载应用程序

Java 使用其APK卸载应用程序,java,android,Java,Android,我需要从我自己的应用程序中触发某个应用程序的卸载。我唯一拥有的是应用程序apk,即使它不必与安装的应用程序版本相同。 当然,卸载将由android处理。就像从给定的apk文件安装应用程序一样 有没有一种方法可以让我把一个意图放在一起,让android打开负责任的系统服务,并要求用户卸载或诸如此类的东西 要卸载的应用程序可能会更改,因此我不能使用常量packagename或类似的东西 有没有办法做到这一点?我知道您可以从apk中提取packagename,但这似乎需要大量的工作,而且可能有些过分。

我需要从我自己的应用程序中触发某个应用程序的卸载。我唯一拥有的是应用程序apk,即使它不必与安装的应用程序版本相同。
当然,卸载将由android处理。就像从给定的apk文件安装应用程序一样

有没有一种方法可以让我把一个意图放在一起,让android打开负责任的系统服务,并要求用户卸载或诸如此类的东西

要卸载的应用程序可能会更改,因此我不能使用常量packagename或类似的东西


有没有办法做到这一点?我知道您可以从apk中提取packagename,但这似乎需要大量的工作,而且可能有些过分。

使用Intent.ACTION\u删除Intent

Intent intent = new Intent(Intent.ACTION_DELETE);
intent.setData(Uri.parse("package:com.example.mypackage"));
startActivity(intent);
您可以从上下文中获得自己的包名

getApplicationContext().getPackageName();

如果你想卸载应用程序,那么它必须安装正确吗?您可以获得所有已安装的应用程序及其软件包名称以及其他信息,如图标、路径、启动器活动等。。。并要求用户选择要卸载的应用程序,这样您就可以知道该应用程序的软件包名称

您可以像下面这样获得已安装应用程序的列表

final PackageManager pm = getPackageManager();
//get a list of installed apps.
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

for (ApplicationInfo packageInfo : packages) {
    Log.d(TAG, "Installed package :" + packageInfo.packageName);
    Log.d(TAG, "Source dir : " + packageInfo.sourceDir);
    Log.d(TAG, "Launch Activity :" + pm.getLaunchIntentForPackage(packageInfo.packageName)); 
}

阅读软件包档案很有用。不确定这是否是您想要的。

不,您不能这样做。如果这是可能的,就不会有开发者在Play Store上的竞争。三思而后行。@ArbazAlam卸载当然必须由用户确认。卸载it本身将由android处理,就像从给定的apk文件安装应用程序一样。一旦传递到系统,负责的系统服务就会打开,用户需要进行交互。如果必须更改应用程序包名称,则可以从类似于此的应用程序中删除应用程序。但是我只有APKI如果你所有的信息都是APK,我不知道你怎么能避免从里面提取数据。@JJJ安卓是否提供了一些简单的方法来检索APK文件中的包名?我只有APK。不是包名。我还没有尝试卸载我自己的应用程序。我的应用程序从存储库下载APK,并为这些APK提供安装/更新/卸载功能。问题是,我只有其他应用的apk文件,没有包名。要触发卸载,似乎需要一个包名true,但每个.apk文件都包含一个从中提取包名的
AndroidManifest.xml
。实际上很容易(而且.apk只是一个.zip文件),用户可以下载apk而不必安装应用程序。我仍然需要检查它是否已安装,如果用户希望执行干净的安装。因此,不必在我需要查找时安装该应用程序。除此之外,所有应用程序的列表对我没有帮助,因为我的apk文件和列表中的应用程序之间没有连接。你是我的英雄:)这正是我要搜索的,非常感谢。你刚刚让我开心,已经放弃了。使用它,我可以提取apk的包名,并检查是否安装了应用程序等。真棒!
public PackageInfo getPackageArchiveInfo(String archiveFilePath, int flags)