2016-04-05 6 views
1

Wenn ich den folgenden Code ausführen, wird es auf Android-Version 4.4 ausgeführt, aber es läuft nicht auf Android-Version 6.0.1. Auf dieser Version bekomme ich einen leeren Bildschirm. Ich habe ähnliche Fragen gestellt, aber mein Problem ist immer noch da. Bitte hilf mir. Vielen Dank.Der Code wird auf Android 4.4 ausgeführt, aber nicht auf Android 6.0.1

public class MainActivity extends AppCompatActivity { 
private static final String TAG = "Error" ; 
private int count; 
private Bitmap[] thumbnails; 
private boolean[] thumbnailsselection; 
private String[] arrPath; 
private ImageAdapter imageAdapter; 
ArrayList<String> f = new ArrayList<String>(); 
File[] listFile; 
private ArrayList<File> fileList = new ArrayList<File>(); 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    showGalleryPreview(); 
    GridView imagegrid = (GridView) findViewById(R.id.PhoneImageGrid); 
    imageAdapter = new ImageAdapter(); 
    imagegrid.setAdapter(imageAdapter); 


    } 


    private void showGalleryPreview() { 
    if (ContextCompat.checkSelfPermission(this, 
      Manifest.permission.READ_EXTERNAL_STORAGE) 
      != PackageManager.PERMISSION_GRANTED) { 

     // Should we show an explanation? 
     if (ActivityCompat.shouldShowRequestPermissionRationale(this, 
       Manifest.permission.READ_EXTERNAL_STORAGE)) { 

      // Show an expanation to the user *asynchronously* -- don't block 
      // this thread waiting for the user's response! After the user 
      // sees the explanation, try again to request the permission. 

     } else { 

      // No explanation needed, we can request the permission. 

      ActivityCompat.requestPermissions(this, 
        new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
        MY_PERMISSIONS_REQUEST_READ_STORAGE); 

      // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an 
      // app-defined int constant. The callback method gets the 
      // result of the request. 
     } 
    } 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case MY_PERMISSIONS_REQUEST_READ_STORAGE: { 
      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       getFromSdcard(); 

       // permission was granted, yay! Do the 
       // contacts-related task you need to do. 

      } else { 

       // permission denied, boo! Disable the 
       // functionality that depends on this permission. 
      } 
      return; 
     } 

     // other 'case' lines to check for other 
     // permissions this app might request 
    } 
} 


public void getFromSdcard() 
{ 

    File file= new File(Environment.getExternalStorageDirectory() 
      .getAbsolutePath()); 
    getfile(file); 



} 


public ArrayList<File> getfile(File dir) { 
    File listFile[] = dir.listFiles(); 
    if (listFile != null && listFile.length > 0) { 
     for (int i = 0; i < listFile.length; i++) { 
      if (listFile[i].isDirectory()) { 
       fileList.add(listFile[i]); 
       getfile(listFile[i]); 

      } else { 
       if (listFile[i].getName().endsWith(".png") 
         || listFile[i].getName().endsWith(".jpg") 
         || listFile[i].getName().endsWith(".jpeg") 
         || listFile[i].getName().endsWith(".gif")) 

       { 
        fileList.add(listFile[i]); 
       } 
      } 

     } 
    } 
    return fileList; 
} 

public class ImageAdapter extends BaseAdapter { 
    private LayoutInflater mInflater; 

    public ImageAdapter() { 
     mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    public int getCount() { 
     return fileList.size(); 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = mInflater.inflate(
        R.layout.galleryitem, null); 
      holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage); 

      convertView.setTag(holder); 
     } 
     else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 


     Bitmap myBitmap = BitmapFactory.decodeFile(String.valueOf(fileList.get(position))); 
     holder.imageview.setImageBitmap(myBitmap); 
     return convertView; 
    } 
} 
class ViewHolder { 
    ImageView imageview; 

    }} 

Hier ist die Manifest-Datei

<?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="r.image"> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 


<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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

Hier die gradle Datei ist

 apply plugin: 'com.android.application' 

    android { 
compileSdkVersion 23 
buildToolsVersion "23.0.2" 

defaultConfig { 
    applicationId "r.image" 
    minSdkVersion 17 
    targetSdkVersion 23 
    versionCode 1 
    versionName "1.0" 
} 
buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
} 
    } 

dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
testCompile 'junit:junit:4.12' 
compile 'com.android.support:appcompat-v7:23.2.1' 
compile 'com.android.support:design:23.2.1' 
} 
+0

müssen Sie Speichererlaubnis geben und alle anderen notwendigen Berechtigungen in 6.0.1 –

+0

post Ihre Großtarif und Manifeste Dateicode ... –

+0

@NikPatel Ich habe diese Erlaubnis gegeben. –

Antwort

1

Höchstwahrscheinlich werden Sie zu request permissions at runtime sind vergessen, wenn die Speicherung zugreifen. Seit Marshmallow reicht es nicht aus, nur die Berechtigungen zu deklarieren, die Sie in Manifest benötigen.

+0

Ich habe das auch versucht. Aber es funktioniert nicht. –

1

Ab Android 6.0 (API-Stufe 23) gewähren Benutzer Berechtigungen für Anwendungen, während die App ausgeführt wird, nicht wenn sie die App installieren. Sie müssen für die Speicherung von Berechtigungen fragen, bevor diesem Aufruf:

getFromSdcard(); 

Sie darüber lesen können, wie hier für die Berechtigungen anfordern: http://developer.android.com/training/permissions/requesting.html

+0

Ich tat das auch, aber es funktioniert nicht. –

+0

Jetzt können Sie den Code überprüfen. Ich habe um die Laufzeitberechtigung gebeten. –

0

Es geht um neue Runtime Permission auf Android M. Bitte nehmen Sie sich einen Blick

Verwandte Themen