Разрешение Android M проверенного READ_PHONE_STATE (опасные разрешения)

Если на устройстве работает Android 6.0 или выше, когда я пытаюсь получить номер телефона с помощью getLine1Number () :

Java.lang.SecurityException: требуется READ_PHONE_STATE: ни пользователь 10184, ни текущий процесс не имеют android.permission.READ_PHONE_STATE. Это выходит.

Я объявил это разрешение:

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

В Android 6.0 вам нужно явно попросить пользователя предоставить разрешения. Просто объявить его в манифесте недостаточно.

Эта статья в документах – отличное место, чтобы начать изучать новую модель, но я дам краткое резюме.

Каждый раз, когда вы выполняете действие, требующее «опасного разрешения», вам необходимо проверить, разрешено ли в настоящее время разрешение, поскольку пользователь может в любое время аннулировать его.

Это можно сделать с checkSelfPermission метода checkSelfPermission .

 if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { // We do not have this permission. Let's ask the user } 

Вы можете запросить разрешение с requestPermissions метода requestPermissions , как такового

 ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_PHONE_STATE}, PERMISSION_READ_STATE); 

Где PERMISSION_READ_STATE является постоянным целым числом, определенным вами, чтобы позже проверить метод обратного вызова.

Затем вы переопределите onRequestPermissionsResult в своей деятельности и посмотрите, было ли предоставлено разрешение. Если бы это было так, вы можете пойти вперед и выполнить опасное действие.

 @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case PERMISSION_READ_STATE: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // permission granted! // you may now do the action that requires this permission } else { // permission denied } return; } } } 
 public class MainActivity extends AppCompatActivity { TextView textView; String device_unique_id,IMEI; private static final int MY_PERMISSIONS_REQUEST_READ_PHONE_STATE = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView)findViewById(R.id.textView); } public void GetImei(View view) { loadIMEI(); } public void loadIMEI() { // Check if the READ_PHONE_STATE permission is already available. if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_PHONE_STATE)) { // get_imei_data(); } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, MY_PERMISSIONS_REQUEST_READ_PHONE_STATE); } } else { TelephonyManager mngr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); IMEI = mngr.getDeviceId(); device_unique_id = Settings.Secure.getString(this.getContentResolver(), Settings.Secure.ANDROID_ID); textView.setText(device_unique_id+"----"+mngr.getDeviceId()); // READ_PHONE_STATE permission is already been granted. Toast.makeText(this,"Alredy granted",Toast.LENGTH_SHORT).show(); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,@NonNull int[] grantResults) { if (requestCode == MY_PERMISSIONS_REQUEST_READ_PHONE_STATE) { if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // Toast.makeText(this,"Alredy DONE",Toast.LENGTH_SHORT).show(); TelephonyManager mngr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); IMEI = mngr.getDeviceId(); device_unique_id = Settings.Secure.getString(this.getContentResolver(),Settings.Secure.ANDROID_ID); textView.setText(device_unique_id+"----"+mngr.getDeviceId()); } else { Toast.makeText(this,"ehgehfg",Toast.LENGTH_SHORT).show(); } } } 
Intereting Posts
Как получить представление из эспрессо, чтобы перейти в IdlingResource? OnClick в EditText внутри TextInputLayout, внутри RecyclerView Вызов API REST из приложения Android Где я должен объявлять свои переменные? Chrome on android изменяет размер шрифта Libavcodec.so: имеет перемещение текста Андроид-клиент анализирует данные множественной формы для non ascii Невозможно разрешить импорт android.support.multidex.MultiDex после изменения на новейший Multidex Проблема Вызов контекстного меню, когда onClickListener применяется к действию Android Proguard, удаление всех операторов журнала и слияние пакетов Websockets против GCM под Android: использование батареи? Каковы некоторые из параметров параметров api-камеры для api-камеры для эффективного фотографирования при перемещении камеры пользователем? Передача последовательного устройства Bluetooth для Android / Xamarin с пустым выходным потоком ORMLite – CallBatchTasks () индивидуально или один раз для всех обновлений? Проверьте, находится ли широта и долгота в пределах круга