如何从Android应用程序中读取短信代码

时间:2016-06-10 04:15:55

标签: android android-intentservice

我们希望在我们的应用程序中构建功能,以读取作为SMS的一部分发送并显示在textView上的安全代码。 此外,我不打算构建广播接收器,可能是一个意图服务,它只会在特定屏幕上运行并在用户导航到另一个屏幕后终止服务。

如果有人可以遮挡一些光线并帮助处理一些示例代码,那就太棒了。

1 个答案:

答案 0 :(得分:4)

要阅读传入的短信,您必须做三件事。

  1. 广播接收器
  2. 在清单
  3. 中声明广播接收器
  4. 需要短信接收权限
  5. 注意:如果您正在编译6.0 Marshmallow,那么您在运行时获得了android.permission.RECEIVE_SMSRuntime Permissions

    让我们开始接收传入的短信

    1)首先在清单

    中添加权限
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    

    2)在清单中声明广播接收者。

    此声明的作用将在设备接收新短信时通知您。

    <receiver android:name="com.example.abc.ReciveSMS">
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>
    

    3)将此代码添加到清单

    中声明的类中
    public class ReciveSMS extends BroadcastReceiver{
    
        private SharedPreferences preferences;
    
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
    
            if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
                Bundle bundle = intent.getExtras();           //---get the SMS message passed in---
                SmsMessage[] msgs = null;
                String msg_from;
                if (bundle != null){
                    //---retrieve the SMS message received---
                    try{
                        Object[] pdus = (Object[]) bundle.get("pdus");
                        msgs = new SmsMessage[pdus.length];
                        for(int i=0; i<msgs.length; i++){
                            msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                            msg_from = msgs[i].getOriginatingAddress();
                            String msgBody = msgs[i].getMessageBody();
                        }
                    }catch(Exception e){
    //                            Log.d("Exception caught",e.getMessage());
                    }
                }
            }
        }
    }
    

    Original Post here.