读取MI设备中的OTP / SMS不起作用(Android)

时间:2017-03-28 10:32:12

标签: android android-broadcast android-broadcastreceiver

我已将 Auto read OTP 集成到我的代码中,除了 MIUI 设备外,它工作正常。收到BroadcastReceiver时,sms永远不会在 MI设备的情况下醒来。经过一些努力后,我认为MI devices会在其Permission Manager上运行,其中Permissions关于阅读sms的所有Privacy permissions都默认为BroadcastReceiver的类别,它看起来像这个:enter image description here

现在我无法想出任何方式通知用户首先接受或拒绝权限。默认情况下,设备在设备中安装应用后,默认情况下会禁用权限。是否有任何方法可以通知用户在应用安装时接受权限?

一些代码:

SMSReciever.class - public class SMSReciever extends BroadcastReceiver { private static final String OTP_LENGTH = "6"; private String otp = ""; private IMessageCallback callable; private static final String TAG = SMSReciever.class.getSimpleName(); @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); SmsMessage[] msgs = null; if (bundle != null) { Object[] pdus = (Object[]) bundle.get("pdus"); msgs = new SmsMessage[pdus.length]; for (int i = 0; i < msgs.length; i++) { msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); try { String sender = msgs[i].getOriginatingAddress(); String phoneNumber = msgs[i].getDisplayOriginatingAddress(); Log.d(TAG, "onReceive: phone " + phoneNumber); String message = msgs[i].getMessageBody(); Log.d(TAG, "onReceive: phone " + message); otp = GetOtp.extractOTP(message, OTP_LENGTH); if (null != sender && message.contains("OTP for AppName") && !TextUtils.isEmpty(otp)) { if (callable != null) callable.getOtp(otp); } } catch (IllegalArgumentException e) { e.printStackTrace(); } } } } public void setMessageCallable(IMessageCallback callable) { this.callable = callable; } public interface IMessageCallback { void getOtp(String otp); } } 在收到短信时醒来。

AndridManifest.xml

<uses-permission android:name="android.permission.RECEIVE_SMS"/> <uses-permission android:name="android.permission.READ_SMS"/> - 接收和阅读短信的权限

SELECT  count(cat_id), time
FROM table_name group by time
having count(time)=1

1 个答案:

答案 0 :(得分:0)

MI设备可以根据应用程序设置权限。你可以检查你的应用是否启用了短信权限。

您需要转到设置&gt;应用&gt; {your_app}&gt;权限并检查是否启用了SMS权限。由于小米手机提供每个应用程序权限。