gpt4 book ai didi

java - Android SMS 广播接收器不起作用

转载 作者:行者123 更新时间:2023-12-01 10:01:40 26 4
gpt4 key购买 nike

嗨,我正在 try catch 短信内容并在我的应用程序中使用,所以我制作了一个带有权限和 list 的 BroadcastReceiver 但是当设备接收到短信时,我的代码没有运行,这意味着 BroadcastReceiver 没有触发。
我也查了这里内外的很多文章,有一些:

Android Sms Receiver Result to Main Activity
SMS receiver didn't work

Android SMS Receiver not working

Broadcast Receiver not working for SMS

这是我的 list 的一部分:

<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();
}
}

我还尝试在 Activity onCreate() 中动态注册接收器,但没有任何改变
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
intentFilter.setPriority(2147483647);
registerReceiver(new SmsReceiver(), intentFilter);

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

最佳答案

您应该阅读 Automatic SMS Verification .

public abstract Task startSmsRetriever ()



启动 SmsRetriever,等待匹配的 SMS 消息直到超时(5 分钟)。匹配的 SMS 消息将通过带有操作的广播 Intent 发送
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_ACTION Intent,其中包含消息的文本。使用 广播接收器 接收此验证消息。
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;
}
}
}

使用 Intent 过滤器注册您的广播接收器 com.google.android.gms.auth.api.phone.SMS_RETRIEVED 在您应用的 AndroidManifest.xml 文件中。
<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);

出于演示目的,您应该阅读 Automatic SMS Verification Android

关于java - Android SMS 广播接收器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43957473/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com