Android 通过外部广播接收器重新启动应用程序

Android 通过外部广播接收器重新启动应用程序,android,broadcastreceiver,Android,Broadcastreceiver,我已经实现了一个应用程序,它基本上是一个自定义应用程序商店,用于更新和启动一系列相关应用程序。它还需要更新自身,这是可行的,但在安装过程中,应用程序会在没有警告的情况下被终止。在这种情况下,我希望自动重新启动应用程序,以便用户可以在更新后立即继续使用它 因此,我制作了一个单独的应用程序,其中只包含一个广播接收器,用于侦听第一个应用程序包名称的包事件并启动一个新活动从未呼叫过该接收器: <application android:icon="@drawable/ic_launcher" and

我已经实现了一个应用程序,它基本上是一个自定义应用程序商店,用于更新和启动一系列相关应用程序。它还需要更新自身,这是可行的,但在安装过程中,应用程序会在没有警告的情况下被终止。在这种情况下,我希望自动重新启动应用程序,以便用户可以在更新后立即继续使用它

因此,我制作了一个单独的应用程序,其中只包含一个广播接收器,用于侦听第一个应用程序包名称的包事件并启动一个新活动从未呼叫过该接收器

<application android:icon="@drawable/ic_launcher"
android:label="@string/app_name">

<receiver android:name=".AppUpdateReceiver">
  <intent-filter>
    <action android:name="android.intent.action.PACKAGE_REPLACED"/>
    <action android:name="android.intent.action.PACKAGE_ADDED"/>
    <action android:name="android.intent.action.PACKAGE_INSTALL"/>
    <data android:scheme="package" />
  </intent-filter>
</receiver>
一个只包含一个接收者的应用程序的
,其清单与我的非常相似。那么,在这个应用程序中,我需要什么来确保在安装另一个包时调用接收器呢


如果有更好的解决方案,我很乐意听到。

根据Android的版本,您可能需要启动一个应用程序组件,以便注册
BroadcastReceiver
。我的意思是需要一个启动器
活动
,必须由用户手动启动

从蜂窝(我认为)开始,除非应用程序以某种方式手动启动,否则不可能让应用程序组件处于“活动”状态。这背后的原因是可能在最终用户不知情的情况下执行不安全的代码


我怀疑这就是你所经历的。要测试它,请将一个简单的“Hello World”
活动添加到包含
BroadcastReceiver
的应用程序中。启动
活动
,然后检查
广播接收器
是否会在其他软件包更新后被调用。

根据Android版本的不同,您可能需要启动应用程序组件才能注册
广播接收器
。我的意思是需要一个启动器
活动
,必须由用户手动启动

从蜂窝(我认为)开始,除非应用程序以某种方式手动启动,否则不可能让应用程序组件处于“活动”状态。这背后的原因是可能在最终用户不知情的情况下执行不安全的代码


我怀疑这就是你所经历的。要测试它,请将一个简单的“Hello World”
活动添加到包含
BroadcastReceiver
的应用程序中。启动
活动
,然后检查
广播接收器
是否会在您的另一个软件包更新后被调用。

我尝试过,如果我首先在该应用程序中启动了一个活动,它会起作用,但这对我尝试完成的工作没有真正的帮助。我可以对服务做一些类似的事情,然后从更新应用程序启动服务吗?我找到了一个使用不可见活动的相关解决方案,所以我同意这是一种方法,但让用户体验知道发生了什么是一种很好的做法-一个看不见的
活动
基本上与此相反,你至少应该提供某种形式的反馈。我试过了,如果我第一次在该应用程序中开始活动,它确实有效,但这并不能真正帮助我实现我的目标。我可以对服务做一些类似的事情,然后从更新应用程序启动服务吗?我找到了一个使用不可见活动的相关解决方案,所以我同意这是一种方法,但是让用户体验知道发生了什么是一种很好的做法-一种无形的
活动
基本上与此相反,你至少应该提供某种形式的反馈。