communication between two device using sms

前端 未结 2 872
栀梦
栀梦 2020-12-22 12:18

I want my program to be able to receive sms from a special number(\"+9856874236\").

I want application to be recive SMS ,if the SMS is contain \"enable wifi\" ,then

相关标签:
2条回答
  • 2020-12-22 12:26

    In your BroadcastReceiver use following code,

    Uri uri = Uri.parse("content://sms/");
    
    ContentResolver contentResolver = getContentResolver();
    
    String phoneNumber = "+9856874236";
    String sms = "address='"+ phoneNumber + "'";
    Cursor cursor = contentResolver.query(uri, new String[] { "_id", "body" }, "read = 0 and address='" + sms, null,   null);
    
    if ( cursor.getCount() > 0 ) 
    {
        // perform action to start Wifi Connection
    
    }
    

    Also in AndroidManifest.xml file you need to set Priority for reading SMS by your application as follows,

    <receiver android:name="com.example.sms.TextMessageReceiver" >
        <intent-filter android:priority="1000">
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>
    
    0 讨论(0)
  • 2020-12-22 12:34

    To intercept the SMS as early as possible I use the following code:

    public class Communicator extends Service {
    
    private final String TAG = this.getClass().getSimpleName();
    
    private SMSReceiver mSMSreceiver;
    private IntentFilter mIntentFilter;
    
    @Override
    public void onCreate()
    {
        super.onCreate();
    
    
        Log.i(TAG, "Communicator started");
        //SMS event receiver
        mSMSreceiver = new SMSReceiver();
        mIntentFilter = new IntentFilter();
        mIntentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
        mIntentFilter.setPriority(2147483647);
        registerReceiver(mSMSreceiver, mIntentFilter);
    
        Intent intent = new Intent("android.provider.Telephony.SMS_RECEIVED");
        List<ResolveInfo> infos = getPackageManager().queryBroadcastReceivers(intent, 0);
        for (ResolveInfo info : infos) {
            Log.i(TAG, "Receiver name:" + info.activityInfo.name + "; priority=" + info.priority);
        }
    }
    
    @Override
    public void onDestroy()
    {
        super.onDestroy();
    
        // Unregister the SMS receiver
        unregisterReceiver(mSMSreceiver);
    }
    
    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }
    
    private class SMSReceiver extends BroadcastReceiver
    {
        private final String TAG = this.getClass().getSimpleName();
    
        @Override
        public void onReceive(Context context, Intent intent)
        {
            Bundle extras = intent.getExtras();
    
    
            String strMessage = "";
    
            if ( extras != null )
            {
                Object[] smsextras = (Object[]) extras.get( "pdus" );
    
                for ( int i = 0; i < smsextras.length; i++ )
                {
                    SmsMessage smsmsg = SmsMessage.createFromPdu((byte[])smsextras[i]);
    
                    String strMsgBody = smsmsg.getMessageBody().toString();
                    String strMsgSrc = smsmsg.getOriginatingAddress();
    
                    strMessage += "SMS from " + strMsgSrc + " : " + strMsgBody;                    
    
                    Log.i(TAG, strMessage);
    
                    if (strMsgBody.contains("SomeText")) {
    
    
                                // perform code
    
                        this.abortBroadcast();
    
                    }
                }
    
    
    
            }
    
        }
    
    }
    }
    

    Remember to register the service in manifest:

    <service android:name="yourpackage.Communicator" />
    

    Now in onCreate and onDestroy start and stop the service:

    startService(new Intent(this, Communicator.class));
    stopService(new Intent(this, Communicator.class));
    
    0 讨论(0)
提交回复
热议问题