-2
public class SmsReceiver extends BroadcastReceiver { 

    private static SmsListener mListener; 

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

     final Bundle data = intent.getExtras(); 

     final 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(); 
      //You must check here if the sender is your provider and not another one with same text. 

      Log.i("Sender id ",sender); 

      String messageBody = smsMessage.getMessageBody(); 
      Log.i("get Message body ",messageBody); 
      messageBody=smsMessage.getDisplayMessageBody(); 
      Log.i("Message Body ",messageBody); 

      //Pass on the text to our listener. 
      mListener.messageReceived(messageBody); 
     } 
    } 

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

} 

public interface SmsListener { 
    public void messageReceived(String messageText); 
} 

不工作在fragement /對話框呼叫:自動短信閱讀Android的

SmsReceiver.bindListener(new SmsListener() { 
      @Override 
      public void messageReceived(String messageText) { 
       Log.d("Text",messageText); 
       Toast.makeText(getContext(),"Message: "+messageText,Toast.LENGTH_LONG).show(); 
      } 
     }); 

@Override 
    public void onResume() { 

     Log.i("In resume ","resume"); 
     SmsReceiver.bindListener(new SmsListener() { 
      @Override 
      public void messageReceived(String messageText) { 
       Log.d("Text",messageText); 
       Toast.makeText(getContext(),"Message: "+messageText,Toast.LENGTH_LONG).show(); 
      } 
     }); 

     super.onResume(); 
    } 

    @Override 
    public void onPause() { 
     Log.i("In pause ","pause"); 
     super.onPause(); 
     SmsReceiver.bindListener(new SmsListener() { 
      @Override 
      public void messageReceived(String messageText) { 
       Log.d("Text",messageText); 
       Toast.makeText(getContext(),"Message: "+messageText,Toast.LENGTH_LONG).show(); 
      } 
     }); 

    } 



<receiver android:name="services.SmsReceiver"> 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
      </intent-filter> 
     </receiver> 
    <uses-permission android:name="android.permission.RECEIVE_SMS" /> 
     <uses-permission android:name="android.permission.READ_SMS" /> 
     <uses-permission android:name="android.permission.SEND_SMS" /> 

我沒有得到任何錯誤,沒有什麼是日誌打印也。不知道發生了什麼問題。即使沒有從廣播接收器打印。我認爲onResume中的代碼也沒有執行。

+1

有您註冊短信-R 'AndroidMenifest'上的接收者? –

+0

你在測試這個設備是小米嗎? –

+0

是的。 @android_griezmann –

回答

1

對於小蜜權限對話框使用該瀏覽所有的短信

private void displaySmsLog() { 
     Uri allMessages = Uri.parse("content://sms/"); 
     //Cursor cursor = managedQuery(allMessages, null, null, null, null); Both are same 
     Cursor cursor = getActivity().getContentResolver().query(allMessages, null, 
       null, null, null); 

    if (cursor!=null) { 

    while (cursor.moveToNext()) { 
     for (int i = 0; i < cursor.getColumnCount(); i++) { 
      Log.d(cursor.getColumnName(i) + "", cursor.getString(i) + ""); 
     } 
     Log.d("One row finished", 
       "**************************************************"); 
    } 
} 
     else { 


} 

    } 

希望這有助於:)

+0

我是否需要檢查廣播接收器類中的權限? –

+0

這是運行時權限。在讀取短信之前檢查它的活動或分段。 –

0

自一個小蜜裝置,它否認短信讀/接收權限要麼你必須手動開啓許可或者你可以只是嘗試下面的代碼,讓小蜜知道您的應用程序需要讀取/接收短信,它會顯示一個對話框的權限讀取短信: -

Cursor cursor = getActivity().getContentResolver().query(Uri.parse("content://sms/inbox"), null, null, null, null); 
    if (cursor == null) { 
     return; 
    } 
    try { 
     if (cursor.moveToFirst()) { 
      // must check the result to prevent exception 
       //This will show a permission dialog to let app read /receive sms 
       } 
      } while (cursor.moveToNext()); 
     } else { 
      Log.e(this.getClass().getSimpleName(), "No SMS"); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     cursor.close(); 
    } 
+0

我是否需要在廣播接收機類中檢查權限? –

+0

你可以在活動/片段onStart()之前做你希望收到短信。如果您在應用程序收到otp時用戶等待的OTP活動/片段, –