目录创建在 Marshmallow 中不起作用 Android
Directory creation not working in Marshmallow Android
我在我的本地创建目录 application.It 在 Android 5.0 中完美运行,但在 Android 6.0 (Marshmallow) 中有时它可以工作,有时 not.I 正在使用以下代码创建新的 directory.I 正在将视频和图像文件保存在目录中。
public static void createApplicationFolder() {
File f = new File(Environment.getExternalStorageDirectory(), File.separator + Config.VIDEO_COMPRESSOR_APPLICATION_DIR_NAME);
f.mkdirs();
f = new File(Environment.getExternalStorageDirectory(), File.separator + Config.VIDEO_COMPRESSOR_APPLICATION_DIR_NAME + Config.VIDEO_COMPRESSOR_COMPRESSED_VIDEOS_DIR);
f.mkdirs();
f = new File(Environment.getExternalStorageDirectory(), File.separator + Config.VIDEO_COMPRESSOR_APPLICATION_DIR_NAME + Config.VIDEO_COMPRESSOR_TEMP_DIR);
f.mkdirs();
}
设备 运行ning 在 Android M 上,您不能直接将数据写入存储。你需要为此征求许可。
this link 可能会有帮助
所以应该在 运行 的时候在这里请求权限 WRITE_EXTERNAL_STORAGE
。
public boolean permissions() {
//cheeck id device is Android M
if (Build.VERSION.SDK_INT >= 23) {
if(checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
//your permission is granted
return true;
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
return false;
}
}
else {
//permission is automatically granted on devices lower than android M upon installation
return true;
}
}
您还需要覆盖 onRequestPermissionsResult() 回调方法。您可以在此处添加逻辑。
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(grantResults[0]== PackageManager.PERMISSION_GRANTED){
//Add your logic of saving a file to directory.
}
}
希望对您有所帮助:)
public class MyDevIDS extends AppCompatActivity {
private static final int REQUEST_RUNTIME_PERMISSION = 123;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (CheckPermission(MyDevIDS.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
// you have permission go ahead
createApplicationFolder();
} else {
// you do not have permission go request runtime permissions
RequestPermission(MyDevIDS.this, Manifest.permission.WRITE_EXTERNAL_STORAGE, REQUEST_RUNTIME_PERMISSION);
}
}
@Override
public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults) {
switch (permsRequestCode) {
case REQUEST_RUNTIME_PERMISSION: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// you have permission go ahead
createApplicationFolder();
} else {
// you do not have permission show toast.
}
return;
}
}
}
public void RequestPermission(Activity thisActivity, String Permission, int Code) {
if (ContextCompat.checkSelfPermission(thisActivity,
Permission)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Permission)) {
} else {
ActivityCompat.requestPermissions(thisActivity,
new String[]{Permission},
Code);
}
}
}
public boolean CheckPermission(Context context, String Permission) {
if (ContextCompat.checkSelfPermission(context,
Permission) == PackageManager.PERMISSION_GRANTED) {
return true;
} else {
return false;
}
}
}
在 Android Marshmallow 中,您需要在运行时请求 dangerous permissions,包括 STORAGE 权限组。
我知道一个不错的图书馆,可以让您的生活更轻松,RxPermissions。
您可以使用少量代码请求权限:
RxPermissions.getInstance(this)
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.subscribe(granted -> {
if (granted) { // Always true pre-M
// I can write to the storage now
} else {
// Oups permission denied
}
});
我在我的本地创建目录 application.It 在 Android 5.0 中完美运行,但在 Android 6.0 (Marshmallow) 中有时它可以工作,有时 not.I 正在使用以下代码创建新的 directory.I 正在将视频和图像文件保存在目录中。
public static void createApplicationFolder() {
File f = new File(Environment.getExternalStorageDirectory(), File.separator + Config.VIDEO_COMPRESSOR_APPLICATION_DIR_NAME);
f.mkdirs();
f = new File(Environment.getExternalStorageDirectory(), File.separator + Config.VIDEO_COMPRESSOR_APPLICATION_DIR_NAME + Config.VIDEO_COMPRESSOR_COMPRESSED_VIDEOS_DIR);
f.mkdirs();
f = new File(Environment.getExternalStorageDirectory(), File.separator + Config.VIDEO_COMPRESSOR_APPLICATION_DIR_NAME + Config.VIDEO_COMPRESSOR_TEMP_DIR);
f.mkdirs();
}
设备 运行ning 在 Android M 上,您不能直接将数据写入存储。你需要为此征求许可。
this link 可能会有帮助
所以应该在 运行 的时候在这里请求权限 WRITE_EXTERNAL_STORAGE
。
public boolean permissions() {
//cheeck id device is Android M
if (Build.VERSION.SDK_INT >= 23) {
if(checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
//your permission is granted
return true;
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
return false;
}
}
else {
//permission is automatically granted on devices lower than android M upon installation
return true;
}
}
您还需要覆盖 onRequestPermissionsResult() 回调方法。您可以在此处添加逻辑。
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(grantResults[0]== PackageManager.PERMISSION_GRANTED){
//Add your logic of saving a file to directory.
}
}
希望对您有所帮助:)
public class MyDevIDS extends AppCompatActivity {
private static final int REQUEST_RUNTIME_PERMISSION = 123;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (CheckPermission(MyDevIDS.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
// you have permission go ahead
createApplicationFolder();
} else {
// you do not have permission go request runtime permissions
RequestPermission(MyDevIDS.this, Manifest.permission.WRITE_EXTERNAL_STORAGE, REQUEST_RUNTIME_PERMISSION);
}
}
@Override
public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults) {
switch (permsRequestCode) {
case REQUEST_RUNTIME_PERMISSION: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// you have permission go ahead
createApplicationFolder();
} else {
// you do not have permission show toast.
}
return;
}
}
}
public void RequestPermission(Activity thisActivity, String Permission, int Code) {
if (ContextCompat.checkSelfPermission(thisActivity,
Permission)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Permission)) {
} else {
ActivityCompat.requestPermissions(thisActivity,
new String[]{Permission},
Code);
}
}
}
public boolean CheckPermission(Context context, String Permission) {
if (ContextCompat.checkSelfPermission(context,
Permission) == PackageManager.PERMISSION_GRANTED) {
return true;
} else {
return false;
}
}
}
在 Android Marshmallow 中,您需要在运行时请求 dangerous permissions,包括 STORAGE 权限组。 我知道一个不错的图书馆,可以让您的生活更轻松,RxPermissions。
您可以使用少量代码请求权限:
RxPermissions.getInstance(this)
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.subscribe(granted -> {
if (granted) { // Always true pre-M
// I can write to the storage now
} else {
// Oups permission denied
}
});