2017-01-09 11 views
0

Мне нужна помощь в получении прикрепленной карты памяти, доступной для записи из моего приложения. Версия для Android, которую я использую, - Marshmellow. Я запросил разрешение на запуск, используя приведенный ниже код.Android - Внешняя карта памяти не может быть записана в моем приложении

if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || 
      (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)) != PackageManager.PERMISSION_GRANTED) { 
     ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_WRITE_STORAGE); 
    } 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    if (requestCode == REQUEST_WRITE_STORAGE) { 
     if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) { 
      Log.d(TAG, "Permission Granted"); 
     } 
    } 
} 

Я также проверил настройки и предоставил разрешение на запись. Ниже приведены два места хранения у меня есть для телефона

/storage/emulated/0 (Internal Memory, Writable) 
/storage/9C33-6BBD (SDCard, Not writable, only readable) 

Я попытался следующий код просто проверить, если карта памяти для записи

File file = new File("/storage/9C33-6BBD"); 
file.canWrite() // returns false every time 

Я не уверен, что я пропускаю или делать неправильно, другие приложения, похоже, не имеют проблем с записью на карту памяти.

Я также использовал оболочку adb и смог создать папку на своей карте памяти.

Я также добавил разрешение ниже в моем файле манифеста.

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

Пожалуйста, дайте мне знать, если вам нужно больше деталей. И заранее спасибо за помощь.

+3

Возможный дубликат [Как написать файл на внешней SD-карте, а не на устройстве?] (Http://stackoverflow.com/questions/38247666/how-to-write-a-file-in-external- SD-карта и не-в-устройства-хранение) –

ответ

0

Я не уверен, что я пропускаю или делать неправильный

У вас нет прав на чтение/запись в произвольных местах на removable storage на Android 4.4 и выше.

Другие приложения, похоже, не имеют проблем с записью на карту памяти.

Эти приложения были предварительно установлены изготовителем устройства или разработчиком пользовательского ПЗУ.

Или эти приложения используют getExternalFilesDirs(), getExternalCacheDirs(), или getExternalMediaDirs(). Если эти методы возвращают 2+ места, второй и последующие находятся на съемном носителе, и вы можете читать/записывать в эти места.

Или эти приложения используют ACTION_OPEN_DOCUMENT, ACTION_CREATE_DOCUMENT или ACTION_OPEN_DOCUMENT_TREE, от the Storage Access Framework.

Или эти приложения используют некоторые недостатки безопасности, которые, надеюсь, будут исправлены.