參考:https://developer.android.google.cn/guide/components/broadcast-exceptions
// Android 8.0 上不限制的隱式廣播
/**
開機(jī)廣播
Intent.ACTION_LOCKED_BOOT_COMPLETED
Intent.ACTION_BOOT_COMPLETED
*/
"保留原因:這些廣播只在首次啟動(dòng)時(shí)發(fā)送一次嘉蕾,并且許多應(yīng)用都需要接收此廣播以便進(jìn)行作業(yè)掷邦、鬧鈴等事項(xiàng)的安排。"
/**
增刪用戶
Intent.ACTION_USER_INITIALIZE
"android.intent.action.USER_ADDED"
"android.intent.action.USER_REMOVED"
*/
"保留原因:這些廣播只有擁有特定系統(tǒng)權(quán)限的app才能監(jiān)聽,因此大多數(shù)正常應(yīng)用都無法接收它們舅踪。"
/**
時(shí)區(qū)、ALARM變化
"android.intent.action.TIME_SET"
Intent.ACTION_TIMEZONE_CHANGED
AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED
*/
"保留原因:時(shí)鐘應(yīng)用可能需要接收這些廣播良蛮,以便在時(shí)間或時(shí)區(qū)變化時(shí)更新鬧鈴"
/**
語言區(qū)域變化
Intent.ACTION_LOCALE_CHANGED
*/
"保留原因:只在語言區(qū)域發(fā)生變化時(shí)發(fā)送抽碌,并不頻繁。 應(yīng)用可能需要在語言區(qū)域發(fā)生變化時(shí)更新其數(shù)據(jù)决瞳。"
/**
Usb相關(guān)
UsbManager.ACTION_USB_ACCESSORY_ATTACHED
UsbManager.ACTION_USB_ACCESSORY_DETACHED
UsbManager.ACTION_USB_DEVICE_ATTACHED
UsbManager.ACTION_USB_DEVICE_DETACHED
android.hardware.usb.action.USB_STATE
*/
"保留原因:如果應(yīng)用需要了解這些 USB 相關(guān)事件的信息货徙,目前尚未找到能夠替代注冊廣播的可行方案"
/**
藍(lán)牙狀態(tài)相關(guān)
BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED
BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED
BluetoothDevice.ACTION_ACL_CONNECTED
BluetoothDevice.ACTION_ACL_DISCONNECTED
*/
"保留原因:應(yīng)用接收這些藍(lán)牙事件的廣播時(shí)不太可能會(huì)影響用戶體驗(yàn)"
/**
Telephony相關(guān)
CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED
TelephonyIntents.ACTION_*_SUBSCRIPTION_CHANGED
TelephonyIntents.SECRET_CODE_ACTION
TelephonyManager.ACTION_PHONE_STATE_CHANGED
TelecomManager.ACTION_PHONE_ACCOUNT_REGISTERED
TelecomManager.ACTION_PHONE_ACCOUNT_UNREGISTERED
*/
"保留原因:設(shè)備制造商 (OEM) 電話應(yīng)用可能需要接收這些廣播"
/**
賬號相關(guān)
AccountManager.LOGIN_ACCOUNTS_CHANGED_ACTION
*/
"保留原因:一些應(yīng)用需要了解登錄帳號的變化,以便為新帳號和變化的帳號設(shè)置計(jì)劃操作"
/**
應(yīng)用數(shù)據(jù)清除
Intent.ACTION_PACKAGE_DATA_CLEARED
*/
"保留原因:只在用戶顯式地從 Settings 清除其數(shù)據(jù)時(shí)發(fā)送瞒斩,因此廣播接收器不太可能嚴(yán)重影響用戶體驗(yàn)"
/**
軟件包被移除
Intent.ACTION_PACKAGE_FULLY_REMOVED
*/
"保留原因:一些應(yīng)用可能需要在另一軟件包被移除時(shí)更新其存儲(chǔ)的數(shù)據(jù)破婆;對于這些應(yīng)用,尚未找到能夠替代注冊此廣播的可行方案"
/**
外撥電話
Intent.ACTION_NEW_OUTGOING_CALL
*/
"保留原因:執(zhí)行操作來響應(yīng)用戶打電話行為的應(yīng)用需要接收此廣播"
/**
當(dāng)設(shè)備所有者被設(shè)置胸囱、改變或清除時(shí)發(fā)出
DevicePolicyManager.ACTION_DEVICE_OWNER_CHANGED
*/
"保留原因:此廣播發(fā)送得不是很頻繁祷舀;一些應(yīng)用需要接收它,以便知曉設(shè)備的安全狀態(tài)發(fā)生了變化"
/**
日歷相關(guān)
CalendarContract.ACTION_EVENT_REMINDER
*/
"保留原因:由日歷provider發(fā)送烹笔,用于向日歷應(yīng)用發(fā)布事件提醒裳扯。因?yàn)槿諝vprovider不清楚日歷應(yīng)用是什么,所以此廣播必須是隱式廣播谤职。"
/**
安裝或移除存儲(chǔ)相關(guān)廣播
Intent.ACTION_MEDIA_MOUNTED
Intent.ACTION_MEDIA_CHECKING
Intent.ACTION_MEDIA_EJECT
Intent.ACTION_MEDIA_UNMOUNTED
Intent.ACTION_MEDIA_UNMOUNTABLE
Intent.ACTION_MEDIA_REMOVED
Intent.ACTION_MEDIA_BAD_REMOVAL
*/
"保留原因:這些廣播是作為用戶與設(shè)備進(jìn)行物理交互的結(jié)果:安裝或移除存儲(chǔ)卷或當(dāng)啟動(dòng)初始化時(shí)(當(dāng)可用卷被裝載)的一部分發(fā)送的饰豺,因此它們不是很常見,并且通常是在用戶的掌控下"
/**
短信允蜈、WAP PUSH相關(guān)
Telephony.Sms.Intents.SMS_RECEIVED_ACTION
Telephony.Sms.Intents.WAP_PUSH_RECEIVED_ACTION
注意:需要申請以下權(quán)限才可以接收
"android.permission.RECEIVE_SMS"
"android.permission.RECEIVE_WAP_PUSH"
*/
"保留原因:SMS短信應(yīng)用需要接收這些廣播"
解決方法
按照官方推薦冤吨,對于隱式廣播,通過以下方法進(jìn)行替換饶套。
- 動(dòng)態(tài)通過調(diào)用
Context.registerReceiver()
注冊廣播接收器而不是在清單中聲明接收器漩蟆。 - 使用JobScheduler。