首页 > 解决方案 > 广播 onReceive 方法不会被调用

问题描述

由于评论,代码更新为更具体的信息。

清单.xml

<receiver
        android:name="com.x.x.x.MyReceiver"
        android:enabled="true"
        android:exported="false">

        <intent-filter>
            <action android:name="com.x.x.x.NOTIFICATION_INTENT_ACTION.TEST" />
        </intent-filter>
</receiver>

MyReceiver.java

internal class MyReceiver: BroadcastReceiver() {

    companion object {
        const val NOT_ID = ".."
        const val NOT = ".."
        const val NOTIFICATION_INTENT_ACTION = "com.x.x.x.NOTIFICATION_INTENT_ACTION.TEST"

    }

    override fun onReceive(context: Context, intent: Intent) {
        // does not get called
    }
}

创建Intent.java

    Intent intent = new Intent(this, MyReceiver.class);
    mPendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    mAlarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    if (mAlarmManager != null) {
        mAlarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 60000L, mPendingIntent);
    }

问题:类内部的 onReceive 方法NotRec没有被调用。我试图将 Manifest 更改为,<receiver android:name="FULL_PATH.receiver.NotRec" />但它没有改变任何东西。有任何想法吗?

标签: androidkotlinbroadcastreceiverandroid-pendingintent

解决方案


消除

android:exported="false"

<receiver>清单中的声明。

如果您不“导出”您的接收器,AlarmManager则无法触发它。当您将清单中的组件标记为“未导出”时,这意味着它是“私有的”,其他应用程序(包括类似的系统应用程序AlarmManager)无法启动或触发该组件。


推荐阅读