在清单中注册SMS广播接收器似乎不再有效。
我知道Android最近锁定了清单广播接收器,但SMS_RECEIVED_ACTION
似乎在例外列表上。
我的接收器是这样的:
class SmsReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action != SMS_RECEIVED_ACTION) return
val messages = getMessagesFromIntent(intent)
for (s in messages) {
Log.i("SmsReceiver", s.displayMessageBody)
Toast.makeText(context, s.displayMessageBody, Toast.LENGTH_LONG).show()
}
}
}
并在舱单中登记:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<application
...
tools:targetApi="33"
android:enabled="true">
<receiver
android:name=".SmsReceiver"
android:enabled="true"
android:exported="false"
android:permission="android.permission.BROADCAST_SMS,android.permission.RECEIVE_SMS">
<intent-filter android:priority="2147483647">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
正如你所看到的,我已经结合SO的技巧有一段时间了,但还没有一个被证明是富有成效的。希望这是一件愚蠢的事情,感谢帮助:(
删除android:permission="android.permission.BROADCAST_SMS,android.permission.RECEIVE_SMS"
。
没有名为android.permission.BROADCAST_SMS,android.permission.RECEIVE_SMS
的权限。android:permission
不采用逗号分隔的列表。而且,你不需要这个属性。
我想你应该更改android:exported="真";