2017-04-10 2 views
-1

Ich versuche, eine Datei zu erstellen, um die von AudioRecord gesammelten Daten zu speichern. Aber wenn ich das tue, Android Studio zeigt mir, dass:W/System.err: java.io.IOException: Berechtigung verweigert beim Schreiben der Datei

04-09 21:23:47.665 28293-28293/com.example.gongk.testfmcwv3 W/art: Before 
    Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable 
04-09 21:23:47.845 28293-28293/com.example.gongk.testfmcwv3 W/System.err: java.io.IOException: Permission denied 
04-09 21:23:47.846 28293-28293/com.example.gongk.testfmcwv3 W/System.err:  at java.io.UnixFileSystem.createFileExclusively0(Native Method) 
04-09 21:23:47.846 28293-28293/com.example.gongk.testfmcwv3 W/System.err:  at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:280) 
04-09 21:23:47.846 28293-28293/com.example.gongk.testfmcwv3 W/System.err:  at java.io.File.createNewFile(File.java:948) 
04-09 21:23:47.846 28293-28293/com.example.gongk.testfmcwv3 W/System.err:  at com.example.gongk.testfmcwv3.MainActivity.init(MainActivity.java:82) 
04-09 21:23:47.846 28293-28293/com.example.gongk.testfmcwv3 W/System.err:  at com.example.gongk.testfmcwv3.MainActivity.onCreate(MainActivity.java:63) 
04-09 21:23:47.846 28293-28293/com.example.gongk.testfmcwv3 W/System.err:  at android.app.Activity.performCreate(Activity.java:6912) 
04-09 21:23:47.846 28293-28293/com.example.gongk.testfmcwv3 W/System.err:  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126) 
04-09 21:23:47.846 28293-28293/com.example.gongk.testfmcwv3 W/System.err:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2900) 
04-09 21:23:47.846 28293-28293/com.example.gongk.testfmcwv3 W/System.err:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3008) 
04-09 21:23:47.846 28293-28293/com.example.gongk.testfmcwv3 W/System.err:  at android.app.ActivityThread.-wrap14(ActivityThread.java) 
04-09 21:23:47.846 28293-28293/com.example.gongk.testfmcwv3 W/System.err:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650) 
04-09 21:23:47.846 28293-28293/com.example.gongk.testfmcwv3 W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:102) 
04-09 21:23:47.846 28293-28293/com.example.gongk.testfmcwv3 W/System.err:  at android.os.Looper.loop(Looper.java:154) 
04-09 21:23:47.846 28293-28293/com.example.gongk.testfmcwv3 W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:6688) 
04-09 21:23:47.846 28293-28293/com.example.gongk.testfmcwv3 W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
04-09 21:23:47.846 28293-28293/com.example.gongk.testfmcwv3 W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) 
04-09 21:23:47.846 28293-28293/com.example.gongk.testfmcwv3 W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358) 
04-09 21:23:47.866 28293-28300/com.example.gongk.testfmcwv3 W/art: Suspending all threads took: 5.158ms 

Mein AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.gongk.testfmcwv3"> 

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

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:roundIcon="@mipmap/ic_launcher_round" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 

     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

    </application> 

</manifest> 

Java-Code:

file = new File(Environment.getExternalStorageDirectory(),"TestFMCWR"); 
     if (file.exists()) file.delete(); 
     try { 
      file.createNewFile(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

Ich kann nicht erklären, warum die Erlaubnis ist nicht arbeiten.

+0

Sie müssen Benutzer anfordern, um die Berechtigung zu erteilen, wenn Ihre Anwendung in Geräte-API 23 (Marshmallow) und höher installiert ist. –

+0

Der angezeigte Fehler bezieht sich übrigens nicht auf die Berechtigung verweigert –

Antwort

0

die Sie interessieren,

private Context mContext=YourActivity.this; 

    private static final int REQUEST = 112; 


    if (Build.VERSION.SDK_INT >= 23) { 
     String[] PERMISSIONS = {android.Manifest.permission.READ_EXTERNAL_STORAGE,android.Manifest.permission.WRITE_EXTERNAL_STORAGE}; 
     if (!hasPermissions(mContext, PERMISSIONS)) { 
      ActivityCompat.requestPermissions((Activity) mContext, PERMISSIONS, REQUEST); 
     } else { 
      //do here 
     } 
    } else { 
     //do here 
    } 

get Berechtigungen Ergebnis

@Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     switch (requestCode) { 
      case REQUEST: { 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
         //do here 
       } else { 
        Toast.makeText(mContext, "The app was not allowed to read your store.", Toast.LENGTH_LONG).show(); 
       } 
      } 
     } 
    } 

Kontrollberechtigungen für Eibisch

private static boolean hasPermissions(Context context, String... permissions) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) { 
      for (String permission : permissions) { 
       if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) { 
        return false; 
       } 
      } 
     } 
     return true; 
    } 

Manifest

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

Vielen Dank für Ihre Antwort. Ich habe diesen Fehler behoben. Ich habe den Hinweis über das Anfordern von Berechtigungen zur Laufzeit auf der Android-Entwicklerwebsite gelesen. Und ich habe festgestellt, dass ich die Zielversion in Gradle auch auf 22 (kleiner als 23) ändern kann. Egal, was Danke für Ihre Hilfe! – MarvinC

Verwandte Themen