MY_PACKAGE_REPLACED 停止工作 - 如何查找应用程序升级 android
MY_PACKAGE_REPLACED stops working - How to find app upgrade android
我想找到我的应用程序的升级。所以我一直在使用这段代码来找到它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...");
}
}
在你的接收器中,你应该改变这个:
Intent.ACTION_PACKAGE_REPLACED.equals(action)
为此:
Intent.ACTION_MY_PACKAGE_REPLACED.equals(action)
在分析更多 stackoverlfow questions/answers 和评论后回答自己。
以前,我使用 PACKAGE_REPLACED 事件来接收更新,并且在我们收到所有包替换的事件时添加了包检查。
但是突然或者我现在注意到,应用程序停止接收 PACKAGE_REPLACED 事件。
Whosebug 的回答说,我们应该使用 MY_PACKAGE_REPLACED 。
这不会提供任何额外的数据。
此外,我已将其替换为 MY_PACKAGE_REPLACED,并通过 Android Studio 中的普通 apk 运行ning 进行了尝试。 这是我弄错的地方。
看来,我们应该运行使用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")
}
}
我想找到我的应用程序的升级。所以我一直在使用这段代码来找到它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...");
}
}
在你的接收器中,你应该改变这个:
Intent.ACTION_PACKAGE_REPLACED.equals(action)
为此:
Intent.ACTION_MY_PACKAGE_REPLACED.equals(action)
在分析更多 stackoverlfow questions/answers 和评论后回答自己。
以前,我使用 PACKAGE_REPLACED 事件来接收更新,并且在我们收到所有包替换的事件时添加了包检查。
但是突然或者我现在注意到,应用程序停止接收 PACKAGE_REPLACED 事件。
Whosebug 的回答说,我们应该使用 MY_PACKAGE_REPLACED 。 这不会提供任何额外的数据。
此外,我已将其替换为 MY_PACKAGE_REPLACED,并通过 Android Studio 中的普通 apk 运行ning 进行了尝试。 这是我弄错的地方。
看来,我们应该运行使用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")
}
}