2016-09-03 34 views
1

受信者を使用して受信メッセージを読み取ろうとしています。チュートリアルに従い、コードを追加しましたが、ブロードキャスト受信者は解雇されていません。ブロードキャスト受信者が着信SMSメッセージを受信して​​いない

私はこのコードを使用しているマニフェスト

<uses-permission android:name="android.permission.READ_SMS" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<application 
    android:name=".xyz" 
    android:allowBackup="true" 
    android:icon="@mipmap/icon_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <receiver android:name="xyz.receiver.SmsReceiver"> 
     <intent-filter android:priority="1"> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
     </intent-filter> 
    </receiver> 

BroadcastReceiver

public class SmsReceiver extends BroadcastReceiver { 
    private static SmsListener mListener; 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle data = intent.getExtras(); 
     Log.e("TEST",data.toString()); 
     Object[] pdus = (Object[]) data.get("pdus"); 
     for(int i=0;i<pdus.length;i++){ 
      SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[i]); 
      String sender = smsMessage.getDisplayOriginatingAddress(); 

      String messageBody = smsMessage.getMessageBody(); 

      mListener.messageReceived(messageBody); 
     } 
    } 
    public static void bindListener(SmsListener listener) { 
     mListener = listener; 
    } 
} 

活動

SmsReceiver.bindListener(new SmsListener() { 
    @Override 
    public void messageReceived(String messageText) { 

     Toast.makeText(OTPActivity.this, "Message: " + messageText, Toast.LENGTH_LONG).show(); 
    } 
}); 
+0

は適切なパッケージ名ですか? 'Receiver android:name =" xyz.receiver.SmsReceiver ">'それを ' –

+0

@ダルシャンそれは正しいです...私もthtで試しました.. – Bhuvi

+0

大丈夫です。マニフェストとインテントフィルタのそれぞれの受信者にこれらの行を追加してみてください。 '

答えて

0

、これはあまりにもあなたのために働く願っています:)

private BroadcastReceiver mSMSReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     try { 
      Log.e("sms receiver", "0000sdfghjkjhgfdsdfghjk"); 
      if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) { 
       Bundle bundle = intent.getExtras(); 
       if (bundle != null) { 
        Object[] pdus = (Object[]) bundle.get("pdus"); 
        String sms; 
        for (Object pdu : pdus) { 
         SmsMessage tmp; 
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
          tmp = SmsMessage.createFromPdu((byte[]) pdu, bundle.getString("format")); 
         } else { 
          tmp = SmsMessage.createFromPdu((byte[]) pdu); 
         } 
         String senderMobile = tmp.getMessageBody(); 
         sms = tmp.getMessageBody(); 
         if (senderMobile.startsWith("کد فعالسازی شما در توپ 360:")) { 
          Log.e("sms receiver", "1111sdfghjkjhgfdsdfghjk"); 
          final String mSMS = sms.replaceAll("[^0-9]", ""); 
          //TODO Check SMS Center number with senderMobile if(senderMobile.equals(989100000)){...} 
          if (mSMS.length() == 5 || mSMS.length() == 6) { 
           Log.e("sms receiver", "2222sdfghjkjhgfdsdfghjk"); 
           runOnUiThread(new Runnable() { 
            @Override 
            public void run() { 
             //CODE IS mSMS 
             code.setText(mSMS); 
             Log.e("sms receiver", "3333sdfghjkjhgfdsdfghjk"); 
            } 
           }); 
           abortBroadcast(); 
           break; 
          } 
         } 


        } 
       } 
      } 
     } catch (Exception e) { 
      Log.e("sms exception", e.getMessage()); 
     } 
    } 
}; 


@Override 
public void onResume() { 
    super.onResume(); 


    if (isGranted) { 
     IntentFilter mIntentFilter = new IntentFilter(); 
     Log.e("sms receiver", "4444sdfghjkjhgfdsdfghjk"); 
     mIntentFilter.addAction("android.provider.Telephony.SMS_RECEIVED"); 
     mIntentFilter.setPriority(Integer.MAX_VALUE); 
     registerReceiver(mSMSReceiver, mIntentFilter); 
    } else { 

     Log.e("sms receiver", "5555sdfghjkjhgfdsdfghjk"); 
    } 
} 


@Override 
public void onPause() { 
    super.onPause(); 
    if (isRegistered) { 
     unregisterReceiver(mSMSReceiver); 
     Log.e("sms receiver", "6666sdfghjkjhgfdsdfghjk"); 
    } 
} 



@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case 100: { 
      // If request is cancelled, the result arrays are empty. 

      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       isGranted = true; 
       IntentFilter mIntentFilter = new IntentFilter(); 
       mIntentFilter.addAction("android.provider.Telephony.SMS_RECEIVED"); 
       mIntentFilter.setPriority(Integer.MAX_VALUE); 
       registerReceiver(mSMSReceiver, mIntentFilter); 
       Log.e("sms receiver", "7777sdfghjkjhgfdsdfghjk"); 
       isRegistered = true; 
       onResume(); 
      } else { 
       isGranted = false; 
       Snackbar snackbar = Snackbar.make(coordinatorLayout, "دریافت کننده خودکار پیامک غیرفعال است.", Snackbar.LENGTH_LONG); 
       snackbar.show(); 
      } 
      return; 
     } 
    } 
} 
+0

4.4からわずかな動作が変更されました。あなたの側で問題を引き起こしているかもしれません。このアンドロイドブログをご覧ください:https://android-developers.googleblog.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html –

関連する問題