2017-09-12 1 views
-1

これは私のネクサス5で動作しますが、samsungデバイスや一部のOEMデバイスでは動作しません。なぜいくつかのデバイスで、android File.delete()、File.rename()が失敗しますか?

これは私のコードです:あなたは、彼は、読み取り/書き込み権限

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

を受け入れた場合、ユーザーに依頼する必要があり

File f = new File(path); 
     if (f.exists()) { 

      if (f.delete()) { 
       MediaScannerConnection.scanFile(ctx, new String[]{path, ""}, null, null); 
      } else { 
       // Log.e(TAG, ctx.getString(R.string.unableToDelete)); 
      } 

     } else { Toast.makeText(ctx,ctx.getString(R.string.fileNotFound),Toast.LENGTH_SHORT).show(); 
     } 
+0

マニフェストに書き込み権限を追加しましたか? –

+0

はい。 –

+0

[The doc says:* "Filesクラスは、ファイルを削除できないときにIOExceptionをスローするdeleteメソッドを定義しています。これはエラーに便利です。なぜファイルを削除できないのかを診断することができます。 "*](https://developer.android.com/reference/java/io/File.html#delete())ので、代わりに' Files#delete'を使用してください問題をデバッグするのに役立つ 'File#delete'? – Pang

答えて

0

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
を追加することを忘れないでください。

ファイルを使用しているため、Api> 24でデバイスに問題が発生しました。私はUriExposureを無効にする必要があります

 if(Build.VERSION.SDK_INT>=24){ 
     try{ 
      Method m = StrictMode.class.getMethod("disableDeathOnFileUriExposure"); 
      m.invoke(null); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 
+0

私はすでに書き込み許可を与えています。私のテストデバイスのAPIレベルは19と16です。 –

関連する問題