首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在android oreo及以上版本中接收数据短信

在android oreo及以上版本中接收数据短信
EN

Stack Overflow用户
提问于 2018-10-03 15:23:24
回答 1查看 441关注 0票数 0

我曾经使用隐式广播接收器接收数据短信,但现在android O不再可能了

代码语言:javascript
复制
<receiver android:name=".receiver.SMSReceiver">
        <intent-filter>
            <action android:name="android.intent.action.DATA_SMS_RECEIVED"/>
            <data android:scheme="sms"/>
            <data android:port="10013"/>
        </intent-filter>
    </receiver>

关于如何在android O及更高版本上实现数据短信,有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2018-10-03 19:16:46

在清单文件中声明广播接收器

代码语言:javascript
复制
  <receiver android:name=".SMSReader">
            <intent-filter android:priority="999" android:exported="true">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

广播接收器类

代码语言:javascript
复制
public class SMSReader extends BroadcastReceiver {

    private String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
    private Intent smsIntent;

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

        final Bundle bundle = intent.getExtras();
        if (intent.getAction() != null && intent.getAction().equalsIgnoreCase(SMS_RECEIVED)) {
            try {
                if (bundle != null) {
                    final Object[] pdusObj = (Object[]) bundle.get("pdus");
                    for (int i = 0; i < pdusObj.length; i++) {
                        SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                        String phoneNumber = currentMessage.getDisplayOriginatingAddress();
                        long time = currentMessage.getTimestampMillis();
                        String senderNum = phoneNumber;
                        if (senderNum.contains("UPI")) ;
                        {
                            String message = currentMessage.getDisplayMessageBody();
                            if (message.contains("debit")) {
                                Log.i("SmsReceiver", "senderNum: " + senderNum + "; message: " + message);
                                smsIntent = new Intent("read");
                                smsIntent.putExtra("message", message);
                                smsIntent.putExtra("sender", senderNum);

                                LocalBroadcastManager.getInstance(context).sendBroadcast(smsIntent);
                            }
                        }
                    }

                }
            } catch (Exception e) {
                Log.e("SMSReader", "Exception" + e.toString());
            }
        }
    }
}

在onCreate()中

代码语言:javascript
复制
LocalBroadcastManager.getInstance(this).registerReceiver(receiver, new IntentFilter("read"));

创建单独的方法来处理SMS

代码语言:javascript
复制
 private BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equalsIgnoreCase("read")) {
                final String message = intent.getStringExtra("message");
                final String sender = intent.getStringExtra("sender");
                formatMessage(message,sender);
            }
        }
    };
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52621815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档