在清单中注册的广播接收器在Android Oreo中未被调用

在清单中注册的广播接收器在Android Oreo中未被调用,android,broadcastreceiver,android-8.0-oreo,Android,Broadcastreceiver,Android 8.0 Oreo,我注册了以下接收器,它在Android Oreo中没有被调用,但在较低版本的设备上工作 <receiver android:name=".common.receiver.ConsultReceiver" android:exported="false"> <intent-filter> <action android:name="APP_STARTED" /> <actio

我注册了以下
接收器
,它在Android Oreo中没有被调用,但在较低版本的设备上工作

<receiver
     android:name=".common.receiver.ConsultReceiver"
     android:exported="false">
       <intent-filter>
            <action android:name="APP_STARTED" />
            <action android:name="APP_STARTED_FROM_ORGANIC" />
       </intent-filter>
</receiver>  

如有任何帮助,我们将不胜感激。

一般来说

您的
未导出。这意味着三件事之一:

  • 您正在将其与
    挂起内容
    一起使用,例如用于
    通知
    。如果是这样,请删除
    ,并使用明确的
    意图(
    新意图(这个,ConsultReceiver.class)
    )作为创建指向此接收者的
    挂起内容的一部分

  • 您正在将其用作应用程序中多个应用程序进程之间的某些IPC的一部分。在这种情况下,还要使用显式的
    意图

  • 您正在应用程序中的一个进程内使用此接收器。在这种情况下,去掉
    并使用其他东西(
    LocalBroadcastManager
    、事件总线、RxJava、
    LiveData
    等)


  • 如果您的应用程序的目标API级别为26或更高,则您不能使用清单声明隐式广播(不专门针对您的应用程序的广播)的接收器,但少数不受该限制的隐式广播除外。在大多数情况下,您可以改用计划作业。

    在Android 8.0及以上版本中,使用以下代码检查何时安装或卸载某些应用程序

    class MainActivity : AppCompatActivity() {
    
        private val receiver = YourBroadcastReceiverClass()
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
    
            val filter = IntentFilter();
            filter.addAction(Intent.ACTION_PACKAGE_ADDED)
            filter.addAction(Intent.ACTION_PACKAGE_REMOVED)
            filter.addDataScheme("package")
    
            registerReceiver(receiver, filter)
        }
    
        override fun onDestory() {
            unregisterReceiver(receiver)
            super.onDestroy()
        }
    }
    

    意图
    限制在带有的包中

    ,但它不是隐式广播receiver@Ragini:接收者既不是隐式的,也不是显式的。
    意图是隐式的或显式的。明确的
    Intent
    标识组件的Java类;隐式的
    意图
    不起作用。@SantanuSur:我不知道FCM会改变任何关于显式
    意图
    的工作方式的事情,如果你是这样问的话。在Android 8.x中启动活动没有任何变化@SantanuSur:正确。请注意,从推送消息启动活动可能不会让用户感到高兴,如果这会中断他们正在做的事情。考虑一下是否应该增加一个通知。@ JENIX:“对于隐式意图,对于ITENT.ActoNyLoad也是一样的吗?”——这不是用于广播的。“将在AndroidManifest.xml中进行静态注册仍然有效,例如.
    android.intent.action.BOOT_COMPLETED
    恰好在白名单上,但大多数操作都不在白名单上。但这不是隐式广播接收器。这够了吗?”?