Невозможно программно читать сообщения с телефонов Xiaomi

Я использую EasyPermission для получения permissions от пользователя.

@AfterPermissionGranted(PERMISSIONS_REQUEST_READ_SMS)
private void readSMS() {
    String[] perms = {Manifest.permission.READ_SMS};
    if (EasyPermissions.hasPermissions(this, Manifest.permission.READ_SMS)) {
        initSMS();
    } else {
        // Do not have permissions, request them now
        EasyPermissions.requestPermissions(this, getString(R.string.send_sms_rationale),
                PERMISSIONS_REQUEST_READ_SMS, Manifest.permission.READ_SMS);
    }
}

В моем initSMS() я пытался читать сообщения с устройств Android. Он отлично работал на всех устройствах, кроме Xiaomi устройств. Я использовал класс TelephonyProvider для чтения сообщений.

private void initSMS() {
    TelephonyProvider provider = new TelephonyProvider(this);
    List<Sms> sms = provider.getSms(TelephonyProvider.Filter.INBOX).getList();
    for(int i = 0; i <= sms.size() - 1; i++) {
        Log.d("Address",sms.get(i).address);
        Log.d("Sms",sms.get(i).body);
        Log.d("ReceivedDate",""+sms.get(i).receivedDate));
        Log.d("State",""+sms.get(i).status);
        Log.d("person",""+sms.get(i).person);
    }
}

Есть ли способ прочитать все сообщения с Xiaomi устройств?


person Gaurav Dabhade    schedule 08.12.2017    source источник


Ответы (1)


Я надеюсь, что это сработает для вас. сначала вам нужно вызвать функцию isMIUI() для проверки мобильного телефона miui, а затем вызвать эту функцию выше. эта функция перенаправит вас к настройке для получения смс-разрешения службы.

private void onDisplayPopupPermission() {

        try {
            // MIUI 8
            Intent localIntent = new Intent("miui.intent.action.APP_PERM_EDITOR");
            localIntent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.PermissionsEditorActivity");
            localIntent.putExtra("extra_pkgname", getPackageName());
            localIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            localIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(localIntent);


        } catch (Exception e) {
            try {
                // MIUI 5/6/7
                Intent localIntent = new Intent("miui.intent.action.APP_PERM_EDITOR");
                localIntent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");
                localIntent.putExtra("extra_pkgname", getPackageName());
                localIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                localIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(localIntent);


            } catch (Exception e1) {
                // Otherwise jump to application details
                Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                Uri uri = Uri.fromParts("package", getPackageName(), null);
                intent.setData(uri);
                startActivity(intent);
            }
        }

    }
person Jitendra virani    schedule 21.02.2018
comment
Спасибо. этот код работает для меня. теперь я получаю разрешение и смс для телефона miui. - person Gaurav Dabhade; 22.02.2018
comment
Спасибо! Вы спасли день! - person Zen Bhatt; 13.03.2018
comment
Спасибо за ваш ответ. Как мы можем проверить, дано разрешение или нет? - person Sanju; 05.09.2018
comment
@Sanju У вас есть, как проверить, дано ли разрешение или нет? - person Silambarasan; 24.09.2019