Image from Gallery in Android 6(Marshmallow)

后端 未结 5 1790
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-05 16:39

In My Application I am trying to Pick image from galley, so as to pass that image to server.

Code is working fine on Android 5 and below, but for Android 6 on Nexus

5条回答
  •  执念已碎
    2020-12-05 16:42

    DO it this way... on Button Click check for SDK Version

     if (Build.VERSION.SDK_INT >= 23){
        // Here, thisActivity is the current activity
                            if (ContextCompat.checkSelfPermission(MainActivity.this,
                                    Manifest.permission.READ_EXTERNAL_STORAGE)
                                    != PackageManager.PERMISSION_GRANTED) {
    
                                // Should we show an explanation?
                                if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.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(MainActivity.this,
                                            new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                                            MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
    
                                    // MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE is an
                                    // app-defined int constant. The callback method gets the
                                    // result of the request.
                                }
                            }else{
                                ActivityCompat.requestPermissions(MainActivity.this,
                                        new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                                        MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
                            }
                        }else {
    
                            Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
                            photoPickerIntent.setType("image/*");
                            startActivityForResult(photoPickerIntent, SELECT_PHOTO);
                        }
    

    after that in Override method onRequestPermissionsResult write this code:

     case MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE: {
                    // If request is cancelled, the result arrays are empty.
                    if (grantResults.length > 0
                            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
    
                        // permission was granted, yay! Do the
                        // contacts-related task you need to do.
                        Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
                        photoPickerIntent.setType("image/*");
                        startActivityForResult(photoPickerIntent, SELECT_PHOTO);
                    } else {
    
                        // permission denied, boo! Disable the
                        // functionality that depends on this permission.
                    }
                    return;
                }
    

    After that

    @Override
        protected void onActivityResult(int reqCode, int resultCode, Intent data) {
            super.onActivityResult(reqCode, resultCode, data);
    
            switch (reqCode) {
     case SELECT_PHOTO:
                    if (resultCode == RESULT_OK) {
                        try {
                            final Uri imageUri = data.getData();
                            final InputStream imageStream = getContentResolver().openInputStream(imageUri);
                            final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
                            contactimage.setImageBitmap(selectedImage);
                        } catch (FileNotFoundException e) {
                            e.printStackTrace();
                        }
    
                    }
    

提交回复
热议问题