2016-04-05 4 views
1

Когда я запускаю следующий код, он запускается на Android версии 4.4, но он не запускается на Android версии 6.0.1. На этой версии я получаю пустой экран. Я прошел аналогичные вопросы, но моя проблема все еще существует. Пожалуйста, помогите мне. Спасибо.Код запускается на android 4.4, но не на 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; 

    }} 

Вот файл манифеста

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

здесь является Gradle файлу

 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

u должен предоставить разрешение на хранение и все остальные необходимые разрешения в 6.0.1 –

+0

опубликовать ваш код градиента и манифеста ... –

+0

@NikPatel Я дал это разрешение. –

ответ

1

Скорее всего, вы забываете request permissions at runtime при доступе к памяти. С Marshmallow недостаточно просто объявить разрешения, необходимые вам в манифесте.

+0

Я тоже это пробовал. Но это не работает. –

1

Начиная с Android 6.0 (уровень API 23), пользователи предоставляют разрешения для приложений во время работы приложения, а не при установке приложения. Вы должны просить разрешения для хранения первых перед вызовом этого:

getFromSdcard(); 

Вы можете прочитать о том, как запросить разрешения здесь: http://developer.android.com/training/permissions/requesting.html

+0

Я тоже это сделал, но не работал. –

+0

Теперь вы можете проверить код. Я попросил разрешения на время работы. –

Смежные вопросы