Телефоны Redmi не запрашивают разрешения на SMS и, следовательно, не читают смс
Ниже приведен мой код:
<!-- Data SMS Receiver -->
<receiver android:name=".otp.OTPReceiver" android:enabled="true" android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.DATA_SMS_RECEIVED" />
<data android:scheme="sms" />
<data android:port="9027" />
</intent-filter>
</receiver>
otp.OTPReceiver
является ассоциированным BroadcastReceiver
Это работает во всех других телефонах, кроме устройств Redmi. В телефонах Redmi вам необходимо вручную включить автозапуск и другие разрешения в приложении "Разрешения" (это приложение обрабатывает разрешения на телефонах Redmi). Я вижу Facebook, whatsapp и т.д. При установке с разрешениями. Хотелось бы знать, как это можно сделать.
Я видел такие вопросы, как this и this, которые задают одно и то же, но оба они не ответили. Я попытался добавить android:enabled="true"
, android:exported="true"
в фрагмент получателя xml, как указано в здесь. Но никто из них не работает.
Изменить: Я использую data sms
(также известный как port sms
). Я также проверил нормальные смс, и проблема существует и на телефонах Redmi.
Ответы
Ответ 1
После долгого времени попытки получить SMS-разрешение MI (через поставщика SMS-сообщений).
Добавьте этот метод (метод поставщика контента) с вашей активностью или фрагментом.
вы сможете получить разрешение.
private void displaySmsLog() {
Uri allMessages = Uri.parse("content://sms/");
//Cursor cursor = managedQuery(allMessages, null, null, null, null); Both are same
Cursor cursor = this.getContentResolver().query(allMessages, null,
null, null, 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",
"**************************************************");
}
}
Попробуй, это сработало для меня.