java - 安卓:撤销权限

标签 java android file camera

美好的一天 我正在尝试制作捕获图像然后在 gridview 中显示的应用程序 但是当我单击按钮开始捕获时出现此错误。

日志:

java.lang.SecurityException: Permission Denial: starting Intent {
act=android.media.action.IMAGE_CAPTURE flg=0x3
cmp=com.android.camera2/com.android.camera.CaptureActivity
clip={text/uri-list
U:file:///storage/emulated/0/Pictures/MyInvoice/IMG_20160223_032401.jpg}
(has extras) } from ProcessRecord{8f9b88f
1356:com.example.labon.invoicemanger/u0a62} (pid=1356, uid=10062) with
revoked permission android.permission.CAMERA
at android.os.Parcel.readException(Parcel.java:1599)

我的代码:

    myLists = new ArrayList<Images>();
    adapter = new ImageListAdapter(getActivity(), R.layout.img_list_view, myLists);
    Button myButton = (Button) view.findViewById(R.id.camerabutton);
    myButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);// create a file to save the image
            intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name
            startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE); // start the image capture Intent
        }
    });
    myGridView = (GridView) view.findViewById(R.id.gridView);
    myGridView.setAdapter(adapter);   /**
 * Create a file Uri for saving an image or video
 */
public Uri getOutputMediaFileUri(int type) {

    return Uri.fromFile(getOutputMediaFile(type));
}
/**
 * returning image /
 */
private static File getOutputMediaFile(int type) {

    // External sdcard location
    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), IMAGE_DIRECTORY_NAME);

    // Create the storage directory if it does not exist
    if (!mediaStorageDir.exists()) {
        mediaStorageDir.mkdirs();
        // if (!mediaStorageDir.mkdirs()) {
        Log.d(IMAGE_DIRECTORY_NAME, "Oops! Failed create "
                + IMAGE_DIRECTORY_NAME + " directory");
        //return null;

    }

    // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
            Locale.getDefault()).format(new Date());
    File mediaFile;
    if (type == MEDIA_TYPE_IMAGE) {
        mediaFile = new File(mediaStorageDir.getPath() + File.separator
                + "IMG_" + timeStamp + ".jpg");
    } else {
        return null;
    }


    return mediaFile;


}


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


    switch (requestCode) {
        case 1:
            if (resultCode == Activity.RESULT_OK) {
                Uri selectedImage = data.getData();
                String[] filePathColumn = {MediaStore.Images.Media.DATA};
                Cursor cursor = getActivity().getContentResolver().query(selectedImage, filePathColumn, null, null, null);
                cursor.moveToFirst();

                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                //file path of captured image
                String filePath = cursor.getString(columnIndex);
                //file path of captured image
                File f = new File(filePath);
                String filename = f.getName();
                cursor.close();

                //Convert file path into bitmap image using below line.
                Bitmap yourSelectedImage = BitmapFactory.decodeFile(filePath);
                //put bitmapimage in your imageview
                ImageView imageView = (ImageView) view.findViewById(R.id.imageListView);
                imageView.setImageBitmap(BitmapFactory.decodeByteArray(images.getImageBlob(), 0, images.getImageBlob().length));
                //newImageView.setImageBitmap(yourSelectedImage);  }
    if (resultCode == getActivity().RESULT_CANCELED) {
        // user cancelled Image capture
        Toast.makeText(getActivity(), "User cancelled image capture", Toast.LENGTH_SHORT)
                .show();
    } else {
        // failed to capture image
        Toast.makeText(getActivity(), "Sorry! Failed to capture image", Toast.LENGTH_SHORT)
                .show();
    }
} }

最佳答案

你是在棉花糖上运行这个吗?因为如果你是,权限结构已经改变。你应该阅读文档 @ http://developer.android.com/training/permissions/index.html .

用户必须明确授予权限。

关于java - 安卓:撤销权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35572853/

相关文章:

java - 在单个 view.xhtml 的 JSF beans 之间传递参数

java - 是否可以使用 JMockit 来模拟局部变量?

android - 在 Activity 中打开并显示国际化的 HTML 资源

java - 空白 Android Activity 上未找到类错误

javascript - 下载后 .js 文件变大

java - Java中什么情况下需要同步数组?

Java - 使用多点触控

java - android中TABS的圆角

java中上传和存储图像的Java解决方案

java - 启用换行符时,扫描仪的缓冲区不代表整个文件