【问题标题】:Android Runtime Permissions (Permission denied)Android 运行时权限(权限被拒绝)
【发布时间】:2017-01-29 11:43:46
【问题描述】:

我在 AndroidManifest.xml 中添加了使用权限,包括 WRITE_EXTERNAL_STORAGE、android.permission.CAMERA、READ_EXTERNAL_STORAGE。

当我在 Nexus6(API 24) 中运行我的应用程序时,它向我抛出了以下错误:

java.io.IOException: 权限被拒绝

这是我的代码:

/**
 * A simple {@link Fragment} subclass.
 */
public class HomeProfileFragment extends Fragment {

    public static final int REQUEST_IMAGE_CAPTURE = 1;

    private String imageFilePath;

    public HomeProfileFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_home_profile, container, false);
        ///#################
        String[] perms = {"android.permission.RECORD_AUDIO", "android.permission.CAMERA"};

        File imageFile = null;
        try{
            String state = Environment.getExternalStorageState();
            if (Environment.MEDIA_MOUNTED.equals(state)) {
                imageFile = createImageFile();
                imageFilePath = imageFile.getAbsolutePath();
            } else {
                /// Throw an error
            }
        }catch (IOException e){
            e.printStackTrace();
        }

        int permsRequestCode = 200;

        requestPermissions(perms, permsRequestCode);
        ///#################


        if (imageFile != null){
            Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(imageFile));

            if(takePictureIntent.resolveActivity(getActivity().getPackageManager())!=null){
                startActivityForResult(takePictureIntent,REQUEST_IMAGE_CAPTURE);

            }
        }
        return view;
    }

    ///##################
    public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults){

        switch(permsRequestCode){

            case 200:

                boolean audioAccepted = grantResults[0]== PackageManager.PERMISSION_GRANTED;

                boolean cameraAccepted = grantResults[1]==PackageManager.PERMISSION_GRANTED;

                break;

        }

    }

    ///##################

    private File createImageFile()throws IOException {
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String fileName = "JPEG_" + timeStamp + "_";

        File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

        File image = File.createTempFile(fileName, ".jpg", storageDir);
        return image;

    }


    private void addPhotoToGallery(String filepath){
        Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        File f = new File(filepath);
        Uri uri =Uri.fromFile(f);
        mediaScanIntent.setData(uri);

        getActivity().sendBroadcast(mediaScanIntent);

    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == Activity.RESULT_CANCELED){
        } if (requestCode == Activity.RESULT_CANCELED){
            addPhotoToGallery(imageFilePath);
        }
    }
    ///#################################
    private boolean shouldAskPermission(){

        return(Build.VERSION.SDK_INT> Build.VERSION_CODES.LOLLIPOP_MR1);

    }
}

如何在权限相机运行时打开之前使用它?

【问题讨论】:

  • 你必须在你的perms数组中添加存储权限

标签: java android permissions camera runtime


【解决方案1】:

你必须在清单中声明用户权限

<uses-feature android:name="android.hardware.camera2" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

它必须在清单中,因此安装程序可以要求用户向应用授予这些权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    相关资源
    最近更新 更多