2

AndroidでSMSの送受信を正常に作成しました。

プログラムで特別な番号 ("+9856874236") から SMS を受信できるようにしたい。ただし、SMS が他の番号からのものである場合は、アプリケーションではなく、電話のメッセージ受信ボックスに送信されるはずです。

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;

    public class SmsReceiver extends BroadcastReceiver {
        public String str = "";

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

            Bundle bundle = intent.getExtras();
            Object messages[] = (Object[]) bundle.get("pdus");
            SmsMessage[] msgs = null;

            if (bundle != null)
            {

                Object[] pdus = (Object[]) bundle.get("pdus");
                SmsMessage smsMessage[] = new SmsMessage[messages.length];      
                String msg_from="";
                for (int n = 0; n < messages.length; n++) 
                {
                    smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]); 
                      msg_from += msgs[n].getOriginatingAddress();
                }

                String receivedMessage = smsMessage[0].getMessageBody().toString().toUpperCase();


                if(msg_from .equals("+989124236870"))  
                {
                for (int n = 0; n < messages.length; n++) 
                {

                    smsMessage[n] = SmsMessage.createFromPdu((byte[]) pdus[n]); 
                    str += "SMS from " + msgs[n].getOriginatingAddress();
                    str += " :";
                    //str += "sms az shomare makhsus";
                    str += msgs[n].getMessageBody().toString();

                    str += "\n";

               abortBroadcast();

               }


                Intent act = new Intent(context, MainActivity.class);
                act.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                act.putExtra("message", str);
                context.startActivity(act);
            }


            }

        }
    }
4

3 に答える 3

0

このサンプルを使用してカスタマイズします。

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.IBinder;
import android.telephony.SmsMessage;
import android.widget.Toast;

public class SrvSmsListener extends Service {

    private BroadcastReceiver IncomingSMSReceiver = new BroadcastReceiver() {
        private static final String SMS_RECEIVED =
                "android.provider.Telephony.SMS_RECEIVED";

        @Override
        public void onReceive(Context _context, Intent _intent) {
            if (_intent.getAction().equals(SMS_RECEIVED)) {
                Bundle bundle = _intent.getExtras();
                if (bundle != null) {
                    Object[] pdus = (Object[]) bundle.get("pdus");

                    SmsMessage[] messages = new SmsMessage[pdus.length];
                    for (int i = 0; i < pdus.length; i++)
                        messages[i] = SmsMessage
                                .createFromPdu((byte[]) pdus[i]);
                    for (SmsMessage message : messages) {
                        String strPhoneNo = message.getOriginatingAddress();
                        String msg = message.getMessageBody();

                        if (msg.startsWith("my text"))
                        {
                            // this stops notifications to others
                            this.abortBroadcast();

                        }
                    }
                }
            }
        }
    };

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
        IntentFilter filter = new IntentFilter(SMS_RECEIVED);
        BroadcastReceiver receiver = IncomingSMSReceiver;
        registerReceiver(receiver, filter);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        if (IncomingSMSReceiver != null)
        {
            unregisterReceiver(IncomingSMSReceiver);
        }
    }
}
于 2012-10-28T08:55:19.097 に答える
0

for ループに msg_from パラメータを追加するのはなぜですか?

msg_from += msgs[n].getOriginatingAddress();

それだけではいけません:

msg_from[n] = msgs[n].getOriginatingAddress();

基本的に msg_from[n] の配列を持ち、各メッセージの発信元アドレスをそこに入れます。次に、msg_from 配列をループして、すべてのメッセージについてこれを確認しますか?

次のように、原点のチェックを for ループ内に移動できます。

for (int n = 0; n < messages.length; n++) {
           if(msg_from[n].equals("+9856874236")){  
                smsMessage[n] = SmsMessage.createFromPdu((byte[]) pdus[n]); 
                str += "SMS from " + msg_from[n];
                str += " :";
                //str += "sms az shomare makhsus";
                str += msgs[n].getMessageBody().toString();

                str += "\n";

                 abortBroadcast();
               }else{
               //Do something else 
               }
           }
于 2012-10-28T08:48:21.350 に答える