RT添加了权限,创建文件的时候还是报错,别的手机没有问题,现在手上的华为P9不行,具体如下:
添加的权限:
<uses-permission android:name=”android.permission.READ_EXTERNAL_STORAGE” />
<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE” />
<uses-permission android:name=”android.permission.MOUNT_UNMOUNT_FILESYSTEMS” />
—
代码如下:
String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {
file = new File(saveDir, “temp.jpg”);
file.delete();
File dir = new File(saveDir);
if(!dir.exists()) {
dir.mkdirs();
}
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(ReportActivity.this, “照片创建失败!”,
Toast.LENGTH_LONG).show();
return;
}
}
—
异常信息:
java.io.IOException: open failed: ENOENT (No such file or directory)
07-17 10:57:31.275 9327-9327/com.jackson.spdtreport W/System.err: at java.io.File.createNewFile(File.java:942)
添加的权限:
<uses-permission android:name=”android.permission.READ_EXTERNAL_STORAGE” />
<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE” />
<uses-permission android:name=”android.permission.MOUNT_UNMOUNT_FILESYSTEMS” />
—
代码如下:
String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {
file = new File(saveDir, “temp.jpg”);
file.delete();
File dir = new File(saveDir);
if(!dir.exists()) {
dir.mkdirs();
}
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(ReportActivity.this, “照片创建失败!”,
Toast.LENGTH_LONG).show();
return;
}
}
—
异常信息:
java.io.IOException: open failed: ENOENT (No such file or directory)
07-17 10:57:31.275 9327-9327/com.jackson.spdtreport W/System.err: at java.io.File.createNewFile(File.java:942)
解决方案
40
华为P9是android 6.0 的==
在API23+以上也就是安卓6.0以上的,进行了权限管理
不止要在AndroidManifest.xml里面添加权限
<uses-permission android:name=”android.permission.READ_EXTERNAL_STORAGE”/>
<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”/>
还要在JAVA代码中运行时实时请求权限:
// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE };
/**
* Checks if the app has permission to write to device storage
* If the app does not has permission then the user will be prompted to
* grant permissions
* @param activity
*/
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);
}
}
在API23+以上也就是安卓6.0以上的,进行了权限管理
不止要在AndroidManifest.xml里面添加权限
<uses-permission android:name=”android.permission.READ_EXTERNAL_STORAGE”/>
<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”/>
还要在JAVA代码中运行时实时请求权限:
// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE };
/**
* Checks if the app has permission to write to device storage
* If the app does not has permission then the user will be prompted to
* grant permissions
* @param activity
*/
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);
}
}