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

Android-拒绝创建新文件的权限,第1张

概述我试图在Android中创建一个文件,甚至在遵循所有其他答案之后,我仍然无法获得许可. saveImage()方法中发生错误. // STATICS private static final int REQUEST_EXTERNAL_STORAGE = 1; private static String[] PERMISSIONS_STORAGE =

我试图在Android中创建一个文件,甚至在遵循所有其他答案之后,我仍然无法获得许可. saveImage()方法中发生错误.

 // STATICS private static final int REQUEST_EXTERNAL_STORAGE = 1;    private static String[] PERMISSIONS_STORAGE = {            Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE    };
 protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState)        verifyStoragePermissions(this);    }
  //HERE IS THE METHOD THAT ASKS FOR PERMISSIONS    public static voID verifyStoragePermissions(Activity activity) {        // Check if we have write permission        int permission = ActivityCompat.checkSelfPermission(activity,Manifest.permission.WRITE_EXTERNAL_STORAGE);        if (permission != PackageManager.PERMISSION_GRANTED) {            // We don't have permission so prompt the user            ActivityCompat.requestPermissions(                    activity,PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE            );        }    }
  @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);......

该错误发生在saveImage()方法中.我有评论解释发生的地方.我已经尝试过使用f.mkdirs()的方法,但是如果没有它,则将无法正常工作.权限两次均被拒绝.

堆栈跟踪

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" />

我想念什么?…最佳答案这不是AndroID权限问题.相反,该异常是由于linux权限造成的,尽管是无意间造成的.

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

new file(Environment.getExternalStorageDirectory() + "TEST_APP_PHOTO_FolDER")

这是在Environment.getExternalStorageDirectory()上隐式调用toString()并直接在其后附加名称,而无需使用必需的路径分隔符,因此最终得到的全名类似于/ storage / emulated / 0TEST_APP_PHOTO_FolDER.这是指外部存储目录的父目录中的文件,并且您在那里没有写访问权,因此是Exception.

只需更改您的file实例以使用带有单独file和String参数的构造函数;第一个用于父目录,第二个用于名称.基本上,将加号更改为逗号.例如:

new file(Environment.getExternalStorageDirectory(),"TEST_APP_PHOTO_FolDER")
总结

以上是内存溢出为你收集整理的Android-拒绝创建新文件的权限 全部内容,希望文章能够帮你解决Android-拒绝创建新文件的权限 所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1145012.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存