安卓短信广播接收器不起作用



嗨,我正在尝试捕获短信内容并在我的应用程序中使用,所以我制作了一个具有权限和清单的广播接收器但是当设备收到短信时,我的代码不会运行,这意味着广播接收器不会触发。 我还在这里检查了内部和外部的许多文章,有一些:

安卓短信接收器结果到主要活动 短信接收器不工作

安卓短信接收器不工作

广播接收器对短信不起作用

这是我清单的一部分:

<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<application.
...
...
<receiver android:name="com.example.android.receiver.SmsReceiver"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter android:priority="2147483647">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>

这是我的接收器

public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "SMS Received!", Toast.LENGTH_LONG).show();
}
}

我还尝试在 Create() 的活动内动态注册接收器,但没有任何变化

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
intentFilter.setPriority(2147483647);
registerReceiver(new SmsReceiver(), intentFilter);

有谁知道问题出在哪里?它应该只是吐司收到一条消息,这样我就可以继续工作,但接收者似乎甚至没有开火

你应该阅读Automatic SMS Verification.

公共摘要 任务启动短信检索器 ()

启动 SmsRetriever,它将等待匹配的 SMS 消息,直到超时(5 分钟)。匹配的 SMS 消息将通过带有操作的广播意图发送SmsRetriever.SMS_RETRIEVED_ACTION.

准备好验证用户的电话号码时,获取SmsRetrieverClient对象的实例,调用 startSmsRetriever,并将成功和失败侦听器附加到 SMS 检索任务:

SmsRetrieverClient mClient = SmsRetriever.getClient(this);
Task<Void> mTask = mClient.startSmsRetriever();
mTask.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override public void onSuccess(Void aVoid) {
Toast.makeText(YourActivity.this, "SMS Retriever starts", Toast.LENGTH_LONG).show();
}
});
mTask.addOnFailureListener(new OnFailureListener() {
@Override public void onFailure(@NonNull Exception e) {
Toast.makeText(YourActivity.this, "Error", Toast.LENGTH_LONG).show();
}
});

当用户的设备上收到验证消息时,Play 服务会明确向您的应用广播SmsRetriever.SMS_RETRIEVED_ACTIONIntent,其中包含消息文本。使用广播接收器接收此验证消息。

public void onReceive(Context context, Intent intent) {
if (SmsRetriever.SMS_RETRIEVED_ACTION.equals(intent.getAction())) {
Bundle extras = intent.getExtras();
Status status = (Status) extras.get(SmsRetriever.EXTRA_STATUS);
switch(status.getStatusCode()) {
case CommonStatusCodes.SUCCESS:
// Get SMS message contents
String message = (String) extras.get(SmsRetriever.EXTRA_SMS_MESSAGE);
// Extract one-time code from the message and complete verification
// by sending the code back to your server.
break;
case CommonStatusCodes.TIMEOUT:
// Waiting for SMS timed out (5 minutes)
// Handle the error ...
break;
}
}
}

使用应用的 AndroidManifest.xml 文件中com.google.android.gms.auth.api.phone.SMS_RETRIEVED的意图过滤器注册您的广播接收器。

<receiver android:name=".YourBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="com.google.android.gms.auth.api.phone.SMS_RETRIEVED"/>
</intent-filter>
</receiver>

最后,在onCreate()部分注册您的BroadcastReceiver。

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(SmsRetriever.SMS_RETRIEVED_ACTION);
getApplicationContext().registerReceiver(broadcastReceiverOBJ, intentFilter);

对于演示目的,您应该阅读自动短信验证安卓

我自己找到了。这是有效的代码! 它必须包含这样做SMS_DELIVER_ACTION。(GitHub上的许多人没有!)

进入设置->应用程序通知->默认应用程序->消息应用程序,将显示"短信应用程序"供您选择。

https://android-developers.googleblog.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html https://www.androidauthority.com/how-to-create-an-sms-app-part-2-724264/https://github.com/treehousefrog/SMS-Project-Part-2

您应该请求运行时权限才能接收短信(Android 6.0 及更高版本)。

https://developer.android.com/guide/topics/permissions/overview

首先将另一个应用设为默认短信应用。

然后:Google Hangout --> Settings(Disable merged conversations) --> SMS (Disable SMS)

这个mainfest的例子:

<receiver android:name=".SmsBroadcastReceiver"
android:exported="true"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter android:priority="999" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<action android:name="android.provider.Telephony.SMS_DELIVER" />
<action android:name="android.provider.Telephony.SMS_DELIVER_ACTION" />
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>

最新更新