2

我想找到我的应用程序的升级。所以我一直在使用这个代码来找到它 PACKAGE_REPLACED,但突然我无法接收到我的应用程序包替换的事件。

我改为 MY_PACKAGE_REPLACED。还是同样的问题。

分析了一些堆栈溢出问题。没运气。尝试了所有的答案。

我的目标 sdk 版本是 30:

清单代码:

<receiver android:name=".Receiver" android:enabled="true" android:debuggable="true" android:exported="true"
    tools:ignore="HardcodedDebugMode">
  <intent-filter>
    <action android:name="android.intent.action.PACKAGE_REPLACED" />

  </intent-filter>
  <intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED" />
  </intent-filter>
  <intent-filter>
    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
  </intent-filter>
</receiver>

收货人代码

@Override
public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    Log.d(TAG, "action = " + action);

    if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
        Log.d(TAG, "BOOT COMPLETED, Ping start...");
    } else if (Intent.ACTION_PACKAGE_REPLACED.equals(action)) {
        Log.d(TAG, "PACKAGE REPLACED, upgrade ping...");
    } else {
        //default action is network changed
        Log.d(TAG, "network status changed...");
    }
}
4

2 回答 2

1

在你的接收器中,你应该改变这个:

Intent.ACTION_PACKAGE_REPLACED.equals(action)

为了这:

Intent.ACTION_MY_PACKAGE_REPLACED.equals(action)
于 2021-11-17T15:51:13.357 回答
1

在分析了更多 stackoverfow 问题/答案和评论后回答自己。

以前,我使用PACKAGE_REPLACED事件来接收更新,并且我添加了包检查,因为我们收到了所有包替换的此事件。

但是突然或者我现在注意到,应用程序停止接收PACKAGE_REPLACED事件。

stackoverflow 的回答说,我们应该使用MY_PACKAGE_REPLACED。这不会提供任何额外的数据。

此外,我已将其替换为MY_PACKAGE_REPLACED并通过从 Android Studio 运行的普通 apk 进行了尝试。这是我犯了一个错误的地方。

看起来,我们应该使用 adb 命令运行,然后才触发包替换事件

./adb install /Users/vijay/desktop/android/myapp.apk

完整代码:

显现:

<receiver android:name=“.MPackageReplacedReceiver">
   <intent-filter>
   <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
   </intent-filter>
</receiver>

收货人代码

class MyPackageReplacedReceiver : BroadcastReceiver() {
     override fun onReceive(context: Context, intent: Intent) {
       Log.d(TAG, "package replaced event")
     }
}
于 2021-11-23T11:17:58.130 回答