我试图在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-拒绝创建新文件的权限 所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)