繁体   English   中英

Android Studio 中如何使用广播接收器接收短信?

[英]How to use a broadcast receiver to receive SMS in Android Studio?

我正在构建一个应在收到 SMS 时触发 function 的应用程序。 我以前使用过 Broadcast Receivers 和 NotificationListeners,但是为了这个特定的目的,我需要注册这个 Broadcast receiver。 此时,我无法注册它,我也说不清为什么。

我已经针对堆栈溢出的类似问题尝试了多个答案,但出于某种原因,我现在用来进行故障排除的Log.d在收到短信时不会打印出来。 我认为我从根本上误解了这个问题,尽管我不确定如何。

这是我的SmsListener.java class:

public class SmsListener extends BroadcastReceiver {
    private SharedPreferences preferences;

    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
            Log.d("Test","test");
        }
    }
}

这是我的清单:

<receiver android:name=".SmsListener">
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>

这是我应该调用它的活动的onCreate() function:

BroadcastReceiver br = new SmsListener();
IntentFilter filter = new IntentFilter(Telephony.Sms.Intents.SMS_RECEIVED_ACTION);
registerReceiver(br,filter);

谢谢你的帮助。 我完全不知所措了。

这是您的接收器类-

private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; private static final String TAG = "SMSBroadcastReceiver";

@Override
public void onReceive(Context context, Intent intent) {

    if (intent.getAction() != null) {
        if (intent.getAction().equals(SMS_RECEIVED)) {
            Bundle bundle = intent.getExtras();
            if (bundle != null) {
                Object[] pdus = (Object[]) bundle.get("pdus");
                final SmsMessage[] messages = new SmsMessage[pdus.length];
                for (int i = 0; i < pdus.length; i++) {
                    messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
                    Log.e("Message Content : ", " == " + messages[i].getMessageBody());
                    Log.e("Message Content Body : ", " == " + messages[i].getDisplayMessageBody());
                    Log.e("Message recieved From", " == " + messages[0].getOriginatingAddress());
                }
            /*if (messages.length > -1) {
                Log.e("Message recieved: "," == "+ messages[0].getMessageBody());
                Log.e("Message recieved From"," == "+ messages[0].getOriginatingAddress());
            }*/
            }
        }
    }
}

在你的片段中

val smsReciever = SmsReciever()
val smsIntentFilter = IntentFilter(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)
context?.registerReceiver(smsReciever, smsIntentFilter)      

在你的清单中

<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>

在你的接收器中

class SmsReciever : BroadcastReceiver() {

   override fun onReceive(context: Context, intent: Intent) {

        val message = Telephony.Sms.Intents.getMessagesFromIntent(intent)
        val content =  message[0].displayMessageBody

        Toast.makeText(context, content,
           Toast.LENGTH_SHORT).show()
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM