-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活动/片段, –