2016-06-21 13 views
0

私はOTPメッセージを自動的に取得するためにAndroidのアプリケーションでBroadcastReceiverを使用しています。しかし、BroadcastReceiverは動作していないため、このバグを見つけられませんので、助けてください。Log.d( "onReciver"、 "on" ")onReceive()にチェックしても動作しません。BroadcastReceiverが動作していません

IncomingMessage.java

public class IncomingMessage extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     Log.d("onReciver","on"); 
     final Bundle bundle = intent.getExtras(); 
     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(); 
        String senderNum = phoneNumber ; 
        Log.d("sender NUm",senderNum); 
        String message = currentMessage .getDisplayMessageBody(); 
        try 
        { 
         if (senderNum.equals("(727)594-3351")) 
         { 
          OtpVarificationActivity Sms = new OtpVarificationActivity(); 
          Sms.recivedSms(message); 
         } 
        } 
        catch(Exception e){ 
         Log.e("BR error",e.toString()); 
        } 

       } 
      } 

     } catch (Exception e) 
     { 
      Log.e("BR error1",e.toString()); 

     } 

    } 
} 

たManifest.xml

<uses-permission android:name="android.permission.SEND_SMS" /> 
    <uses-permission android:name="android.permission.READ_SMS" /> 
    <uses-permission android:name="android.permission.RECEIVE_SMS" /> 
... 
... 
... 
<receiver android:name="com.appsprotocol.dcntv.broadcast.IncomingMessage"> 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
      </intent-filter> 
     </receiver> 
+0

どのように受信機をトリガーしていますか? –

+0

着信メッセージクラスのオブジェクトを作成 –

+0

メッセージ受信時にコードがトリガされましたか? –

答えて

0
ここ

は私の実施例である

AndoridMenifest.xmlで登録レシーバー:

  <receiver android:name="com.example.tosc185.readincommingsmsdemo.SmsListener"> 
       <intent-filter> 
        <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
       </intent-filter> 
      </receiver> 

レシーバクラス:

public class SmsListener extends BroadcastReceiver { 

    @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++) { 
         if(Build.VERSION.SDK_INT <= 22) { 
          msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
         } 
         else { 
          msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i], String.format(Locale.US, null)); 
         } 
         msg_from = msgs[i].getOriginatingAddress(); 
         String msgBody = msgs[i].getMessageBody(); 
         Toast.makeText(context, "From -" + msg_from + " : Body- " + msgBody, Toast.LENGTH_LONG).show(); 
         if (msg_from.equalsIgnoreCase("5555")) { 
          MainActivity.insertCode(msgBody); 
         } 
        } 
       } catch (Exception e) { 
//       Log.d("Exception caught",e.getMessage()); 
       } 
      } 
     } 
    } 
} 
+0

を誘発すると思うが、私の質問は私がapp.Ifを呼び出したときに私がonReceive()に入れたログメッセージを見ることができる私のBroadcastReceiverが呼び出されていない –

0

マニフェストであなたの受信機に優先順位を追加してみてください。これは私のために働いた。

<receiver android:name=".receiver.SMSReceiver"> 
      <intent-filter android:priority="999"> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver> 
+0

android:教えてください? –

+0

優先度については、このリンクを参照してください。https://developer.android.com/guide/topics/manifest/intent-filter-element.html –

0

有効にしてマニフェストファイルにエクスポートします。以下に、マニフェストのコードサンプルを示します。

<receiver 
      android:name=".SmsReceiver" 
      android:enabled="true" 
      android:exported="true"> 
      <intent-filter android:priority="999"> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver> 
+0

私は試しても動作しません。 –

+0

@RahulDev ::あなたはマシュマロを使っていますか? [BRAODCAST_SMS](https://developer.android.com/reference/android/Manifest.permission.html#BROADCAST_SMS)の権限を実装していることを確認してください。 – Jeevanandhan

+0

はい私はそれを使用してBROADCAST_SMS権限を使用しようとしていますが、エラー "権限はシステムのアプリケーションにのみ許可されています" .whatsはこのエラーの意味ですか? –

関連する問題