Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-创建新文件的权限被拒绝_Android - Fatal编程技术网

Android-创建新文件的权限被拒绝

Android-创建新文件的权限被拒绝,android,Android,我试图在安卓系统中创建一个文件,即使在遵循所有其他答案后,我仍然被拒绝了权限。saveImage()方法中发生错误 在舱单中: <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission and

我试图在安卓系统中创建一个文件,即使在遵循所有其他答案后,我仍然被拒绝了权限。saveImage()方法中发生错误





在舱单中:

 <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />


我遗漏了什么?…

这不是Android权限问题。相反,
异常
是由于Linux权限引起的,尽管是无意中造成的

在实例化
saveImage()
中使用的
文件时,您将新文件/目录的名称连接到
Environment.getExternalStorageDirectory()
;e、 例如,对于
壁纸目录

new File(Environment.getExternalStorageDirectory() + "TEST_APP_PHOTO_FOLDER")
这是在
环境.getExternalStorageDirectory()
上隐式调用
toString()
,并直接将名称附加到它,中间没有必要的路径分隔符,因此最终得到的全名类似于
/storage/emulated/0TEST\u APP\u PHOTO\u文件夹
。这指的是外部存储目录父目录中的文件,您在那里没有写访问权限,因此出现
异常

只需将
文件
实例化更改为使用构造函数,该构造函数接受单独的
文件
字符串
参数;第一个用于父目录,第二个用于名称。基本上,将加号改为逗号。例如:

new File(Environment.getExternalStorageDirectory(), "TEST_APP_PHOTO_FOLDER")

您的
文件中缺少路径分隔符。将
saveImage()
壁纸目录的
文件
实例化更改为新的
文件(Environment.getExternalStorageDirectory(),“TEST_APP_PHOTO_FOLDER”)
;注意逗号而不是加号。您也需要对
文件f
执行相同的操作。现在,它正试图在外部存储目录的父目录中创建您无权访问的文件。
  @Override //ON REQUEST PERMISSION RESULT, 
//I ACCEPTED THE PERMISSION, THE CODE HERE WAS EXECUTED AS IT SHOULD
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) {
        switch (requestCode) {

            case 1: {
                Log.d(TAG,"THIS IS FOR THE WRITE/READ PERMISSIONS");
                Log.d(TAG,grantResults.toString());
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Log.d(TAG,"[Persmission accepted for writing/reading]");


                    // permission was granted, yay! Do the
                    // camera related task you need to do.
                } else {
                    Log.d(TAG,"[Permission denied]");
                    // permission denied, boo! Disable the
                    // functionality that depends on this permission.
                }

            }

            // other 'case' lines to check for other
            // permissions this app might request.
        }
    }
 //THE METHOD WHERE THE ERROR HAPPENS
 public String saveImage(Bitmap myBitmap) {

        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        myBitmap.compress(Bitmap.CompressFormat.JPEG, 90, bytes);

        File wallpaperDirectory = new File(
                Environment.getExternalStorageDirectory() + "TEST_APP_PHOTO_FOLDER");

        // have the object build the directory structure, if needed.
        if (!wallpaperDirectory.exists()) {

            wallpaperDirectory.mkdirs();
        }

        try {

            File f = new File(wallpaperDirectory + "testfile.jpg");

            f.mkdirs();
          f.createNewFile(); // <--- STACK TRACE POINTS HERE

            FileOutputStream fo = new FileOutputStream(f);
..
..
..
java.io.IOException: Permission denied
        at java.io.UnixFileSystem.createFileExclusively0(Native Method)
        at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:281)
        at java.io.File.createNewFile(File.java:1000)
        at car.andrej.tradingapp.ProfileActivity.ProfileActivity.saveImage(ProfileActivity.java:263)
        at car.andrej.tradingapp.ProfileActivity.ProfileActivity.onActivityResult(ProfileActivity.java:220)
        at android.app.Activity.dispatchActivityResult(Activity.java:7556)
        at android.app.ActivityThread.deliverResults(ActivityThread.java:4487)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:4534)
        at android.app.ActivityThread.-wrap20(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1752)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6944)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
 <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />
new File(Environment.getExternalStorageDirectory() + "TEST_APP_PHOTO_FOLDER")
new File(Environment.getExternalStorageDirectory(), "TEST_APP_PHOTO_FOLDER")