2016-06-28 113 views
-1

收到消息後在手機號碼onReceive() not working。請幫我找到解決這個問題。 這是我的代碼,請檢查並糾正我,如果我錯了。接收器在廣播中不工作而收到短信

public class IncomingSms extends BroadcastReceiver { 
     Context con; 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      this.con = context; 
      if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) 
      { 
       Log.e("IncomingSms", "onReceive.."); 
       final Bundle bundle = intent.getExtras(); 
       try { 
        if (bundle != null) { 
         for (String key : bundle.keySet()) 
          Log.e("okkk", key + "// " + bundle.getString(key)); 

         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; 
          String message = currentMessage.getDisplayMessageBody(); 

          try { 
           if (senderNum.equals("TA-DOCOMO")) { 
            CodeVerificationActivity Sms = new CodeVerificationActivity(); 
            Sms.recivedSms(message); 
           } 
          } catch (Exception e) { 
          } 

         } 
        } 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 

     } 

    } 

這是我的清單文件的代碼,used.please告訴我正確的方式,如果我錯過了代碼,然後正確me.Actually東西,我是做機器人自動讀取傳入消息來驗證OTP。這對我來說非常重要。在此先感謝

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

      </intent-filter> 
     </receiver> 
+0

哪裏是你的活動類,你在哪裏稱這個 – Nitesh

+0

@Override 保護無效onStart(){ super.onStart(); 嘗試registerReceiver(new IncomingSms(),new IntentFilter(「android.provider.Telephony.SMS_RECEIVED」)); (例外e){ e.printStackTrace(); } } – Umesh

回答

1

你的棉花糖檢查。然後允許設置應用程序的權限。

或試試這個。

public class SMSBroadcast extends BroadcastReceiver { 

final SmsManager manager = SmsManager.getDefault(); 

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

    final Bundle bundle = intent.getExtras(); 

    try { 
     if (bundle != null) { 
      final Object[] pdus = (Object[]) bundle.get("pdus"); 

      for (int i = 0; i < pdus.length; i++) { 
       SmsMessage currentmessage = SmsMessage.createFromPdu((byte[]) pdus[i]); 
       String phoneNumber = currentmessage.getDisplayOriginatingAddress(); 

       String message = currentmessage.getDisplayMessageBody(); 

       Toast.makeText(context, "number " + phoneNumber + " message :" + message, Toast.LENGTH_SHORT).show(); 


      } 


     } 


    } catch (Exception e) { 
     e.printStackTrace(); 

    } 

} 
} 

的Manifest.xml

<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<uses-permission android:name="android.permission.READ_SMS" /> 
<uses-permission android:name="android.permission.SEND_SMS" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 

    <receiver android:name="com.inficare.avinashverma.googlecloudmessagingdemo.broadcast.SMSBroadcast"> 
     <intent-filter> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED"></action> 
     </intent-filter> 

    </receiver> 

    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 
1

好第一個改變你這樣的代碼

public class IncomingSms extends BroadcastReceiver { 
public static final String SMS_BUNDLE = "pdus"; 
String address; 
SmsMessage smsMessage; 
public void onReceive(Context context, Intent intent) { 
    Bundle intentExtras = intent.getExtras(); 
    if (intentExtras != null) { 
     Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE); 
     for (int i = 0; i < sms.length; ++i) { 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
       String format = intentExtras.getString("format"); 
       smsMessage = SmsMessage.createFromPdu((byte[]) sms[i], format); 
      } 
      else { 
       smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]); 
      } 
      // SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]); 

      address = smsMessage.getOriginatingAddress(); 



     } 
     // Toast.makeText(context, smsMessageStr, Toast.LENGTH_SHORT).show(); 

     //this will update the UI with message 
     YourActivity inst = Youractivity.instance();//write your activity 
     // where you are checking for message. 
     inst.updateList(address); 
    } 
} 
} 

那麼你的活動類中

public static YourActivity instance() { 
    return inst; 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    inst = this; 
} 

public void updateList(final String smsMessage) { 



     if (smsMessage.equalsIgnoreCase("IM-DOCOMO")) { 

    Toast.makeText(VerifyNumber.this, "Successfully verified", 
        Toast.LENGTH_LONG).show(); 

     } 
    } 

Then in onresume and onpause register your receiver so that you need to add 
your receiver in manifest 
public void onResume(){ 
    super.onResume(); 
    IntentFilter filter = new IntentFilter(); 
     filter.addAction("android.provider.Telephony.SMS_RECEIVED"); 
     try{ 
     registerReceiver(broadCastReceiver, filter); 
     }catch(IllegalArgumentException e){ 
      e.printStackTrace(); 
     } 
} 

public void onPause() 
    { 
    super.onPause(); 
     try { 
      unregisterReceiver(broadCastReceiver); 

       } catch(IllegalArgumentException e){ 
        e.printStackTrace(); 
       } 
    }