2016-10-17 21 views
1

まずは、私の悪い文法には申し訳ありません。私は、自動返信メッセージアプリケーションを開発しています。私はブロードキャスト受信者を使ってアプリケーションから値を受け取ることができますが、自動返信は機能しません。しかし、私がアクティビティからの価値を受け取っていなければ、それは機能しています。これは私がonSensorChanged()Android:アクティビティからブロードキャスト受信者への値を

Intent i = new Intent("my.action.string"); 
i.putExtra("apaan", lala); 
sendBroadcast(i); 

に入れて、これは私のbroadcastreceiverクラス

public class AutoReply extends BroadcastReceiver{ 

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

@Override 
public void onReceive(Context context, Intent intent) { 
    String action = intent.getAction(); 
    Log.i("message", "Broadcast Received: " +action); 

    if (action.equals(SMS_RECEIVED) && action.equals("my.action.string")) { 
     Bundle bundle = intent.getExtras(); 
     String state = bundle.getString("apaan"); 

     if (bundle != null) { 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      final SmsMessage[] sms = new SmsMessage[pdus.length]; 
      String isiSMS = "", noPengirim = ""; 
      for (int i = 0; i < pdus.length; i++) { 
       sms[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
       isiSMS = sms[i].getMessageBody();//mengambil isi pesan dari pengirim 
       noPengirim = sms[i].getOriginatingAddress();//mengambil no pengirim 
      } 

      String message = state;//isi balasan autoreplay 

      SmsManager smsSend = SmsManager.getDefault(); 
      smsSend.sendTextMessage(noPengirim, null, message, null, null); 
     } 
    } 
} 

で、私の活動のコードであり、これは私のマニフェスト

<receiver android:name=".AutoReply" android:enabled="true"> 
     <intent-filter> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      <action android:name="my.action.string" /> 
     </intent-filter> 
</receiver> 

答えて

0

アクションはなることはありませんですandroid.provider.Telephony.SMS_RECEIVEDmy.action.stringの両方です。

変更この:これに

if (action.equals(SMS_RECEIVED) && action.equals("my.action.string")) { 

if (action.equals(SMS_RECEIVED) || action.equals("my.action.string")) { 

また、手動で作成したテントでpdusを送信していないので、あなたはbundle.get("pdus")を呼び出すとき、それはnullを返します。その後、pdus.lengthを呼び出すと、NullPointerExceptionがスローされます。

+0

お返事ありがとうございます。しかし私が試してみると、最終的にはsmsMessage [] sms = .....の放送受信機クラスで別のエラーが出ます。それは言うnull配列の長さを取得しようとしている –

+0

それは "pdus"を送信していないので、 'bundle.get(" pdus ")'を呼び出すとき、それはnullを返します。そして 'pdus.length'を呼び出すと、NullPointerExceptionがスローされます。 –

+0

ありがとう、私はそれを得る。しかし、エラーを修正するために私は何をすべきですか? –

関連する問題