Android MY_PACKAGE_替换未在发布模式下调用

Android MY_PACKAGE_替换未在发布模式下调用,android,broadcastreceiver,Android,Broadcastreceiver,我有一个应用程序更新接收器,它在调试apk中运行良好。但在谷歌Play build发布和更新后,或者已经安装了发布版本,都不会被调用 清单文件中的接收方条目为 <receiver android:name=".receiver.AppUpdateReceiver"> <intent-filter android:priority="100"> <action android:name="andr

我有一个应用程序更新接收器,它在调试apk中运行良好。但在谷歌Play build发布和更新后,或者已经安装了发布版本,都不会被调用

清单文件中的接收方条目为

<receiver android:name=".receiver.AppUpdateReceiver">
                <intent-filter android:priority="100">
                    <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
                </intent-filter>
            </receiver>

看起来不错。我不确定为什么需要指定“安卓:优先级”

尝试删除android:priority,并将接收器导出(我认为默认情况下应该是这样,因为您正在指定一个意向过滤器)。比如:

<receiver android:name=".receiver.AppUpdateReceiver"
          android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
            </intent-filter>
</receiver>


它是通过android studio在调试模式下调用的,但不是在发布模式下。AFAICT,代码在我看来是正确的。我的另一个猜测是:1)要么Toast不起作用(有时可能发生),要么尝试将其记录下来。2) 或者,此接收器可能已禁用(编程方式)3),或者,如果您在调试版本(可能不是基于标题)上测试它,则版本代码不会递增,所以Android平台可能不会将其视为PACKAGE_REPLACEDIt,这很可能是您的toast出现问题-检查是否为您的应用程序启用了通知(如果禁用,则toast不会显示)。其次,在Toast中,makeText尝试用ApplicationContext替换上下文。根据文档,Toast中的上下文通常应该是ApplicationContext或Activity上下文-
<receiver android:name=".receiver.AppUpdateReceiver"
          android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
            </intent-filter>
</receiver>