2016-08-08 9 views
2

新しいファイルを作成する際に、上記のエラーが発生しています。このコードはAndroid 4.4バージョンで動作します。私は6.0.1のデバイスをテストしており、このエラーが発生しています。私はマニフェストファイルに書き込み権限を持っていますが、ファイルを作成する前にmkDirs()に試みましたが、それでも同じ問題です。コードスニペットは次のとおりです。アンドロイド6 - オープンに失敗しました:ENOENT(そのようなファイルやディレクトリはありません)

File newFile = new File(localFilePath); 
     try { 
      String abc = null; 
      abc = Environment.getExternalStorageState(); 
      if(!newFile.exists()) { 
       newFile.mkdirs(); 
       newFile.createNewFile(); 
      } 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
      return false; 
     } 

externalStoragStateが 'mounted'に戻ります。保管場所は、/ストレージ//0/testlocation /ファイル名..

答えて

4

あなたが答えとコードスニペット(非常に便利)6.0

private static final int MY_PERMISSIONS_REQUEST_STORAGE = 1; 
private String[] storage_permissions = 
      { 
        Manifest.permission.READ_EXTERNAL_STORAGE, 
        Manifest.permission.WRITE_EXTERNAL_STORAGE 
      }; 
    if ((int) Build.VERSION.SDK_INT >= 23) { 
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 

         if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE) && ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { 
          if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE) && ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { 
           android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(this); 
           builder.setMessage("To get storage access you have to allow us access to your sd card content."); 
           builder.setTitle("Storage"); 
           builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
            @Override 
            public void onClick(DialogInterface dialog, int which) { 
             ActivityCompat.requestPermissions(OmniSalesHubDrawerActivity.this, storage_permissions, 0); 
             onContactsClick(); 
            } 
           }); 

           builder.show(); 
          } else { 
           ActivityCompat.requestPermissions(this, storage_permissions, 0); 
           onContactsClick(); 
          } 
         } else { 
          ActivityCompat.requestPermissions(DrawerActivity.this, 
            storage_permissions, 
            MY_PERMISSIONS_REQUEST_STORAGE); 
          onContactsClick(); 
         } 

        } 
       } 
+1

感謝の実行時間のアクセス許可を与える必要があり、エミュレートされます。あなたが正しいとすれば、Android 6.0は、これらが動作するためのユーザ権限ロジックが必要と考えています。今のところ、1つのAPIレベルを下に戻すことにしました(22)ので、先に進むことができます。 APIレベル22は、Android 6デバイスで完全に機能するようです。それでは、最新のAPIレベルにアップグレードする際のポイントは何ですか(新しいAPIを使ってアプリケーションに新しいロジックを導入しても機能しない場合)下位互換性があるため、そのままアプリを公開することは安全ですか?ではない ? – Kris

+1

その2つの側面: **最初:** はい下位互換性があります。アプリケーションでバージョン23をターゲットに設定するまで完全サポートは必要ありません。 Marshmallow ** 2番目のバージョン:** 古いモデルを使用することができますから、それを元に戻すことができるので、アプリケーションはインストール時にすべてのアクセス権を要求します。マシュマロを標的にしないことで新しいモデルを避けることができるというわけではありません。沼地のあるユーザー。デバイスにアプリケーション設定で危険な権限を取り消す機能が追加されました – Bhumit

+0

ありがとう@Bhumit – Kris

関連する問題