android 如果用户在应用程序更新后立即更新了应用程序,如何获得通知?

cs7cruho  于 2023-01-19  发布在  Android
关注(0)|答案(1)|浏览(182)

主要目标是获得有关应用程序更新的通知,并在应用程序更新后重新启动服务。
拥有广播接收器并收听Intent.ACTION_PACKAGE_REPLACED 在应用程序更新时启动我的服务。我收到以下错误

BroadcastQueue: Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_REPLACED dat=package:com.volvocars.dj flg=0x4000010 (has extras) } to com.volvocars.drivingjournal/.core.service.KeepTheAppAliveReceiver

乍一看,这像是后台执行限制之一,
我发现可以将ACTION_PACKAGE_REPLACED替换为ACTION_MY_PACKAGE_REPLACED,结果是错误消失,但BroadcastReceiver没有收到任何更新事件,无法正常工作。如何解决此问题?

ldioqlga

ldioqlga1#

确保AndroidManifest.xml的广播接收器类ClassChild.java具有此intent-filter

<receiver
            android:name=".subdir.ClassChild"
            android:exported="false"
            android:label="@string/foo>
            <intent-filter>
                 <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
            </intent-filter>

并且如果我们假设ClassChild可以扩展classParent,则让ClassChild覆盖classParentonReceive()

@Override
public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);
}

classParent.javaonReceive()可以共享的孩子检查广播(你不把有趣的事情,如final onReceive(),导致儿童无法覆盖):

@Override
public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);
    if (intent == null) {
        return;
    }
    String action = intent.getAction();

    if (Intent.ACTION_MY_PACKAGE_REPLACED.equals(action)) {
        ... do your stuff
    }

最后,如果您担心Android Studio可能无法发送MY_PACKAGE_REPLACED广播,您可以使用命令adb install -r -d <your.apk>测试应用更新。(-r表示重新安装并保留其数据,-d表示允许版本降级)

相关问题