图库捕获不会返回数据 - 在某些设备上

时间:2017-03-25 10:00:04

标签: javascript java android c arrays

图库图像捕获不会返回数据 - 在某些设备上

private void selectImage() {

    final CharSequence[] options = { "Take Photo", "Choose from Gallery","Cancel" };

    AlertDialog.Builder builder = new AlertDialog.Builder(ConformComplain.this);
    builder.setTitle("Add Photo!");
    builder.setItems(options, new DialogInterface.OnClickListener() {
        @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
        @Override
        public void onClick(DialogInterface dialog, int item) {

            if(!marshMallowPermission.checkPermissionForCamera()){
                marshMallowPermission.requestPermissionForCamera();
            }else {
                if (!marshMallowPermission.checkPermissionForExternalStorage()){
                    marshMallowPermission.requestPermissionForExternalStorage();
                }
                else if (options[item].equals("Take Photo"))
                {
                    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    File f = new File(Environment.getExternalStorageDirectory(), "temp.jpg");
                    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
                    startActivityForResult(intent, 1);
                }
                else if (options[item].equals("Choose from Gallery"))
                {
                        Intent intent = new Intent();
                        intent.setType("image/*");
                        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
                        intent.setAction(Intent.ACTION_GET_CONTENT);
                        startActivityForResult(Intent.createChooser(intent, "android.intent.action.SEND_MULTIPLE"), 2);

                }
                else if (options[item].equals("Cancel")) {
                    dialog.dismiss();
                }
            }

        }
    });

    builder.show();
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   super.onActivityResult(requestCode, resultCode, data);

   if (requestCode == 2) {

            if(data.getData()!=null){

                Uri mImageUri=data.getData();
                String imagePath = GetPathToImage(context, mImageUri);
                Log.v("LOG_TAG", "hguyhuu "+ imagePath);
                bitmap = (BitmapFactory.decodeFile(imagePath));
                linearLayout.setVisibility(View.VISIBLE);
                relativeLayout.setVisibility(View.GONE);
                viewImage.setImageBitmap(bitmap);

            }else{
                if(data.getClipData()!=null){
                    ClipData mClipData=data.getClipData();
                    mArrayUri=new ArrayList<String>();
                    gridAdapter = new GridViewAdapter(this, R.layout.grid_single,mArrayUri);
                    gridView.setAdapter(gridAdapter);
                    for(int i=0;i<mClipData.getItemCount();i++){

                        ClipData.Item item = mClipData.getItemAt(i);
                        Uri uri = item.getUri();
                        Log.e(TAG, "onActivityResult: jnj"+uri );
                        String path = GetPathToImage(context,uri);
                        Log.e(TAG, "onActivityResult: "+path );
                        mArrayUri.add(path);

                    }
                    linearLayout.setVisibility(View.GONE);
                    relativeLayout.setVisibility(View.VISIBLE);

                }

            }

        }
      }

public String GetPathToImage(Context context, Uri uri) {
    Cursor cursor = null;
    try {
        String[] proj = { MediaStore.Images.Media.DATA };
        cursor = context.getContentResolver().query(uri,  proj, null, null, null);
        Log.e(TAG, "GetPathToImage: "+cursor );
        assert cursor != null;
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

你在这里的大部分内容都是错误的。

ACTION_IMAGE_CAPTURE

而言
    一旦将Uri.fromFile()提高到24或更高,
  • targetSdkVersion将无法在Android 7.0+上运行,因为您将抛出FileUriExposedException
  • 您忽略了onActivityResult()
  • 中的结果

ACTION_GET_CONTENT而言,GetPathToImage()完全错误。最好的情况是,如果您从Uri获得MediaStore,它将会起作用,即使这样,生成的“路径”也可能无法使用。 Use the Uri properly