2015-06-09 53 views
2

因此,即时通讯的工作需要我知道什么时候正在更新设备上的另一个应用程序。所以我的问题很简单,可以说YouTube或Spotify在应用程序更新时发送广播,如果有的话,我需要使用我的broadcastReceiver。Android应用程序更新广播

回答

7

你的意图过滤器应该是这样的:

<intent-filter> 
    <action android:name="android.intent.action.PACKAGE_REPLACED" /> 
    <data android:scheme="package" /> 
</intent-filter> 

从你的广播接收器的onReceive方法应该是:

@Override 
public void onReceive(Context context, Intent intent) { 
    Uri data = intent.getData(); 
    if (data.toString().equals("package:" + "com.target.package") { 
     // action to do 
    } 
} 
3

ACTION_PACKAGE_REPLACED是行动时触发一个应用程序正在更新 根据文档:

的应用程序包的新版本已经安装,更换 以前安装的现有版本。该数据包含 包的名称。

intent.getPackage()返回这个意图特别强调的包或应用程序,但它被发送给任何感兴趣的接收器,因此没有这样的包。

使用intent.getData()返回更新包作为一个开放的

+1

将这项工作为自己的应用程序?如果您的应用已更新,广播接收器是否会执行? –

0

根据android文档: 广泛施放行动:您的应用程序的新版本已安装在现有应用程序上。这只会发送到被替换的应用程序。它不包含任何额外的数据;要接收它,只需使用意向过滤器来执行此操作。

<intent-filter> 
    <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> 
    <data android:scheme="package" /> 
</intent-filter> 

从你的广播接收器的onReceive方法应该是:

@Override 
public void onReceive(Context context, Intent intent) { 
    // action to do 

}