2015-10-14 13 views
9

Używam programu MediaScannerConnection do wywoływania metody scanFile w celu dodawania zdjęć do galerii urządzeń. Ale w Androida 6 otrzymam to wyjątki, kiedy go wykonać:Funkcja MediaScannerConnection kończy się niepowodzeniem na urządzeniu z systemem Android 6 z powodu odmowy dostępu

E/DatabaseUtils: java.lang.SecurityException: Permission Denial: odczyt com.android.providers.media.MediaProvider uri zawartość: // mediów i/a/fs_id od PID = 22984, UID = 10078 wymaga android.permission.READ_EXTERNAL_STORAGE lub grantUriPermission()

i

E/iu.UploadsManager: java.lang.SecurityExceptio N: Odmowa zgody: odczytu com.android.providers.media.MediaProvider URI zawartość: // nośniki i/a/fs_id od PID = 22984, UID = 10078 wymaga android.permission.READ_EXTERNAL_STORAGE lub grantUriPermission()

Każda pomoc?

+0

Jestem stoi ten sam problem. Próbuję przesłać wideo na Youtube, ale mam ten sam błąd. Czy znalazłeś rozwiązanie? – TOP

+0

Nie. Zauważyłem, że gdy robię zdjęcie z WhatsApp, na czacie, widzę ten sam błąd w LogCat. Być może jest to problem z systemem Android 6 z powodu nowych uprawnień środowiska wykonawczego .... –

+0

Próbowałem dodać flagę Intent.FLAG_GRANT_READ_URI_PERMISSION, ale wygląda na to, że nie działa. – TOP

Odpowiedz

0

Jest to wynikiem nowych sposobów obsługi uprawnień. Twoja aplikacja musi teraz prosić o pozwolenie na wykonywanie pracy i być gotowym do odrzucenia.

w onCreate (lub gdziekolwiek) sprawdzić i ewentualnie poprosić o pozwolenie:

  if (ContextCompat.checkSelfPermission(this, 
      Manifest.permission.READ_EXTERNAL_STORAGE) 
      != PackageManager.PERMISSION_GRANTED) { 

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

      // 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(this, 
        new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
        MY_PERMISSIONS_REQUEST_READ_MEDIA); 

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

wówczas gotowi zaakceptować uprawnienia tak:

@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case MY_PERMISSIONS_REQUEST_READ_MEDIA: { 
      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      } else { 
       // permission denied, boo! Disable the 
       // functionality that depends on this permission. 
      } 
      return; 
     } 
    } 
} 
+0

Nop. Jak widać wyjątek nie jest zgłaszany przez moją aplikację, ale DatabaseUtils i UploadsManager. A uprawnienia środowiska wykonawczego nie mają wpływu na moją aplikację (jeszcze), ponieważ nie jestem ukierunkowany na interfejs API 23. –

+0

Odpowiedź jest wciąż istotna dla wymienionych problemów i jest przydatna dla osób mających podobny problem. Wstąpiłem, aby usunąć skargę. Czy istnieje sposób na ustawienie uprawnień obejmujących wszystkie wydarzenia w aplikacji? zamiast zastanawiać się, gdzie aplikacja może poprosić o premie? – Theo

Powiązane problemy