在 android 上以编程方式安装 APK

Posted

技术标签:

【中文标题】在 android 上以编程方式安装 APK【英文标题】:Install APK programmatically on android 【发布时间】:2011-09-15 18:57:31 【问题描述】:

我一直在尝试让一个 android 应用程序以编程方式在 sdcard 上安装一个 APK,但我遇到了一些麻烦。

这就是我的做法:

Intent intent = new Intent(Intent.ACTION_VIEW);           
intent.setDataAndType("ApkFilePath...","application/vnd.android.package-archive");
activity.startActivityForResult(intent,5000);

现在一切正常,它带来了包管理器,我可以控制当管理器完成安装 APK 时该做什么。

但我遇到的问题是,如果在安装结束时用户单击“打开”而不是“完成”,则不会调用“OnActivityResult”方法,因为管理器仍然存在......这对系统的另一个要求提出了另一个问题。

有没有办法知道用户何时在包管理器的末尾选择了“打开”,或者有没有办法强制管理器只显示我希望它显示的按钮?

真的可以使用帮助,我到处搜索,似乎没有找到解决方案

【问题讨论】:

很好地改变了方法,现在我没有启动 startActivityForResult,而是为应用程序添加的操作创建了一个广播接收器,然后我从那里处理调用......这样工作得更好 如果您找到的解决方案适合您,请将其作为答案(而不是评论)发布并接受。 实际上我改变了实现并做了uwe在答案中建议的事情。在“PackageReceiver”中,我只是将已安装的包名称与我的应用程序包名称进行了比较,然后打开它......这样即使用户点击或不点击打开/完成,它也会打开 【参考方案1】:

如果安装了新应用,您可以将接收器添加到您的 AndroidManifest.xml 以收听广播。 像这样:

<receiver android:name=".PackageReceiver">
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_ADDED" />
        <action android:name="android.intent.action.PACKAGE_CHANGED" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="package" />
    </intent-filter>
</receiver>

这个类会在安装新包时被调用:

public class PackageReceiver extends BroadcastReceiver 

  @Override
  public void onReceive(Context context, Intent intent) 
    // handle install event here
  

【讨论】:

哦,是的,这就是我们当时最终做的,谢谢,这是正确的解决方案 谢谢你。这对我帮助很大。有没有一种方法可以将“Intend Extras”(附加信息)传递给“PackageReceiver”类。在我的应用程序中,我正在触发安装过程。我需要知道安装了哪个应用程序。

以上是关于在 android 上以编程方式安装 APK的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 上以编程方式使用 Instagram

在 android 4.0 上以编程方式设置 *** 连接

如何在 Android 上以编程方式截取屏幕截图? [复制]

如何在 Android 上以编程方式关闭 3G/数据?

如何在 Android TV 上以编程方式更改电视频道

当相机在Android中的表面视图上以编程方式截屏