2017-06-10 4 views
0

Guys!Android: Die Liste der Verzeichnisse unter Verzeichnis, die von DIRECTORY_DCIM abgerufen wurde, konnte nicht abgerufen werden

Dies ist meine erste Frage hier und ich bin ein Anfänger in Android App Entwicklung, also bitte entschuldigen Sie mich, wenn meine Frage sinnlos scheint. Ich entwickle meine Android-App, in der ich versuche, die Anzahl der Fotos zu bekommen, die von der Standard-Kamera-App des Android-Telefons aufgenommen wurden. Zu diesem Zweck habe ich folgenden Code geschrieben. Dieser Code funktioniert auf meinem Android-Gerät mit OS 4.x, während derselbe Code auf meinem Android-Gerät mit OS 6.x und 7.x nicht funktioniert.

Mein Code:

package com.local.cameraphotos; 

import android.os.Environment; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 

import java.io.File; 

public class MainActivity extends AppCompatActivity { 

    public void get_no_of_pictures(File directory){ 

     int picture_count = 0; 
     int video_count = 0; 

     Log.e("Camera", "Going to get files in directory:" + directory); 

     if(directory != null) { 

     File[] files = directory.listFiles(); 
     if(files != null) { 
      for (File CurFile : files) { 
       if (CurFile.isDirectory()) { 

        if(CurFile.getName().equals("100MEDIA")) { 
        Log.e("Camera", "Directory name:" + CurFile.getName()); 
        get_no_of_pictures(CurFile); 
        }else if (CurFile.getName().equals("Camera")) { 
        Log.e("Camera", "Directory name:" + CurFile.getName()); 
        get_no_of_pictures(CurFile); 
        } 
       }else if (CurFile.isFile()){ 

        if(CurFile.getName().endsWith(".jpg")) 
        picture_count++; 
        else if(CurFile.getName().endsWith(".mp4")) 
        video_count++; 
       } 

      } 
      Log.e("Camera", "Total number of pictures:" + picture_count); 
      Log.e("Camera", "Total number of videos:" + video_count); 
     }else{ 
      Log.e("Camera", "Unable to get list of files from CameraDirectory"); 
     } 
    } 
} 

@Override 
protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    File CameraDirectory = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath()); 
    get_no_of_pictures(CameraDirectory); 

    finish(); 
} 

Das Problem tritt auf, wenn mein Code versucht, Dateien mit directory.listFiles zur Liste(), dann gibt sie null auf Android 7.x und 6.x gibt aber gültige Werte auf Android 4.x.

Mein Manifest sieht aus wie unten

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

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

<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> 

Jede Hilfe zu diesem Thema viel, wie ich bereits in diesem Forum Links zu bekommen, die Dateien in einem Verzeichnis auf Android-Dateisystem gesucht habe erkannt, aber ich Ich bin nicht auf einen solchen Fall gestoßen.

Vielen Dank im Voraus.

+1

Wurden Sie tatsächlich die Erlaubnis erteilt? Denn nur weil Sie es anfordern, heißt das nicht, dass Sie die Berechtigung speziell in Versionen> L erhalten. Sehen Sie nach, wie Sie mit Laufzeitberechtigungen umgehen und diese Berechtigungen anfordern können. – JoxTraex

+0

Hallo Jox! Danke für den Hinweis. Nachdem ich überprüft hatte, ob die Erlaubnis erteilt wurde oder nicht, stellte ich fest, dass dies nicht der Fall war. Nachdem ich einen Check hinzugefügt und den Benutzer nach dieser Berechtigung gefragt habe, funktionierte es. – Pagar

+0

Toll zu hören, es hat geholfen. Ich habe dies als Antwort gepostet. Bitte fühlen Sie sich frei zu akzeptieren. – JoxTraex

Antwort

0

Wurde Ihnen tatsächlich die Erlaubnis erteilt? Denn nur weil Sie es anfordern, heißt das nicht, dass Sie die Berechtigung speziell in Versionen> L erhalten. Sehen Sie nach, wie Sie mit Laufzeitberechtigungen umgehen und diese Berechtigungen anfordern können.

Verwandte Themen