Android Kotlin - 如何检测和读取收到的短信

And*_*ers 6 sms android kotlin

我知道有很多这样的问题已经浮出水面,我已经尝试了所有我能遇到的问题,但我仍然无法让它发挥作用。

我的问题是 BroadcastReceiver onReceive 似乎永远不会被调用。我的代码如下:

class SMSReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
    Log.d("BroadcastReceiver", "onReceive")
    if (intent.action == Telephony.Sms.Intents.SMS_RECEIVED_ACTION) {
        Log.d("BroadcastReceiver", "SMS received")
        // Will do stuff with message here
    }
}
Run Code Online (Sandbox Code Playgroud)

日志消息永远不会出现。

AndroidManifest.xml

<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar">
    <activity android:name=".main.MainActivity" 
    android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" 
            />
        </intent-filter>
    </activity>
    <activity android:name=".setup.SetupActivity" 
     android:screenOrientation="portrait">
    </activity>
    <receiver
            android:name=".SMSReceiver"
            android:enabled="true"
            android:exported="true">
        <intent-filter android:priority="1000">
            <action 
         android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>
</application>
Run Code Online (Sandbox Code Playgroud)

在我的 mainActivity 中,我尝试了多种方法来实现这一点,但目前只有:

var smsReceiver = SMSReceiver()
Run Code Online (Sandbox Code Playgroud)

我很感激我能得到的任何提示,如果有任何代码示例是用 Kotlin 编写的,那也会很棒。:)

vis*_*gid 0

不要在 onReceive() 内部使用 if 检查

class SMSReceiver : BroadcastReceiver() {
 override fun onReceive(context: Context, intent: Intent) {
  Log.d("BroadcastReceiver", "onReceive")

    Log.d("BroadcastReceiver", "SMS received")
    // Will do stuff with message here

}
Run Code Online (Sandbox Code Playgroud)