2016-02-29 2 views
0

Я новичок в Android. И я работаю над дозвонщиком через приложение запуска. И я скрываю свой значок приложения из меню. Я успешно открыть приложение из Dialer В Jellybean И KitKat устройство, но когда я открываю приложение в леденец и Зефир системе получать мне исключение, как,Android java.lang.SecurityException произошло

E/GooglePlusContactsSync: Failed to clear out contacts 
                 java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts.ContactsProvider2 from ProcessRecord{ff7ceee 26321:com.google.android.apps.plus/u0a89} (pid=26321, uid=10089) requires android.permission.READ_CONTACTS or android.permission.WRITE_CONTACTS 
                  at android.os.Parcel.readException(Parcel.java:1620) 
                  at android.os.Parcel.readException(Parcel.java:1573) 
                  at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:3594) 
                  at android.app.ActivityThread.acquireProvider(ActivityThread.java:4799) 
                  at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2018) 
                  at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1466) 
                  at android.content.ContentResolver.query(ContentResolver.java:475) 
                  at android.content.ContentResolver.query(ContentResolver.java:434) 
                  at dit.a(PG:440) 
                  at dit.b(PG:1388) 
                  at diu.run(PG:325) 
                  at java.lang.Thread.run(Thread.java:818) 

E/DatabaseUtils: Writing exception to parcel 
              java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/fs_id from pid=2208, uid=10089 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission() 
               at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:605) 
               at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:480) 
               at android.content.ContentProvider$Transport.query(ContentProvider.java:211) 
               at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:112) 
               at android.os.Binder.execTransact(Binder.java:453) 

А потом Применение автоматического закрытия.

ответ

2

Android 6.0 (Marshmallow) представил новый способ разрешения разрешений на Android. Read more about it here

Начиная с Android 6.0 (уровень API 23), пользователи предоставлять разрешения приложений в то время как приложение работает, не при установке приложения. Этот подход упрощает процесс установки приложения, поскольку пользователю не нужно предоставлять разрешения при установке или обновлении приложения. Он также дает пользователю больше контроля над функциональностью приложения; например, пользователь может выбрать, чтобы предоставить приложению камеры доступ к камере, но не к местоположению устройства. Пользователь может отменить разрешения в любое время , перейдя на экран настроек приложения.

Вам необходимо объявить свои разрешения в манифесте. Проверка текущего состояния:

// Assume thisActivity is the current activity 
int permissionCheck = ContextCompat.checkSelfPermission(thisActivity, 
     Manifest.permission.WRITE_CALENDAR); 

И просить их, если вам нужно:

// Here, thisActivity is the current activity 
if (ContextCompat.checkSelfPermission(thisActivity, 
       Manifest.permission.READ_CONTACTS) 
     != PackageManager.PERMISSION_GRANTED) { 

    // Should we show an explanation? 
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, 
      Manifest.permission.READ_CONTACTS)) { 

     // Show an expanation to the user *asynchronously* -- don't block 
     // this thread waiting for the user's response! After the user 
     // sees the explanation, try again to request the permission. 

    } else { 

     // No explanation needed, we can request the permission. 

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

     // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an 
     // app-defined int constant. The callback method gets the 
     // result of the request. 
    } 
} 

Чтобы иметь дело с разрешения выполнения в Android я обычно использую this library. Это действительно помогает и уменьшает шаблон кода.

0

С Android 6.0 нам нужно проверить, предоставлено ли разрешение или нет, поэтому, чтобы читать контакты, вам нужно сначала проверить, предоставлено ли разрешение read_contacts или нет.

Try:

if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { 
     requestPermissions(new String[]{Manifest.permission.CAMERA}, 101); 
     return; 
    } else { 
     // permission already granted 
    } 

и Слушатель после выдачи разрешения

@Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    switch (requestCode) { 
     case 101: 
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       // permission granted 
      } 
      break; 
     default: 
      super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    } 
    } 
+0

Я также проверить разрешение динамически, но он не работает. Я пробую этот Кодекс. –

Смежные вопросы