我已将 Auto read OTP
集成到我的代码中,除了 MIUI 设备外,它工作正常。收到BroadcastReceiver
时,sms
永远不会在 MI设备的情况下醒来。经过一些努力后,我认为MI devices
会在其Permission Manager
上运行,其中Permissions
关于阅读sms
的所有Privacy permissions
都默认为BroadcastReceiver
的类别,它看起来像这个:
现在我无法想出任何方式通知用户首先接受或拒绝权限。默认情况下,设备在设备中安装应用后,默认情况下会禁用权限。是否有任何方法可以通知用户在应用安装时接受权限?
一些代码:
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
答案 0 :(得分:0)
MI设备可以根据应用程序设置权限。你可以检查你的应用是否启用了短信权限。
您需要转到设置&gt;应用&gt; {your_app}&gt;权限并检查是否启用了SMS权限。由于小米手机提供每个应用程序权限。