如何在 android 5 中重命名可移动 SD 卡中的文件
how to rename a file in removeable sdcard in android 5
我无法在 android 5 中重命名可移动 SDCard 中的文件。
我尝试使用此代码重命名:
File oldfile = new File(old);
File newfile = new File(new);
oldfile.renameTo(newfile);
此代码在设备存储中运行良好。但在可移动 SD 卡中不起作用。
这个问题存在于 android 5 中,above.I 知道 Android 5 我必须使用 SAF 和 Android 超过运行时权限。但我不知道如何重命名。
请帮我。
谢谢
我找到了解决方案。留给不知道的人
final static String PREF_DEFAULT_URI = "pref_default_uri";
String strUri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
strUri = PreferenceManager.getDefaultSharedPreferences(this).getString(PREF_DEFAULT_URI, null);
if (TextUtils.isEmpty(strUri)) {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, 101);
} else {
Uri uri = Uri.parse(strUri);
DocumentFile rootDocumentfile = DocumentFile.fromTreeUri(this, uri);
updateViews(rootDocumentfile);
}
Button rename = (Button) findViewById(R.id.rename);
rename.setOnClickListener(this);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 101 && resultCode == RESULT_OK) {
Uri uri = data.getData();
final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
getContentResolver().takePersistableUriPermission(uri, takeFlags);
PreferenceManager.getDefaultSharedPreferences(this).edit().putString(PREF_DEFAULT_URI, uri.toString()).commit();
DocumentFile documentFile = DocumentFile.fromTreeUri(this, uri);
updateViews(documentFile)
}
}
public void renameclick(View v) {
File oldfile = new File(old);
File newfile = new File(new);
DocumentFile fileuri = getDocumentFilePath(getApplicationContext(),oldfile.getAbsolutePath(),strUri);
fileuri.renameTo(newfile.getName());
}
public static DocumentFile getDocumentFilePath(Context context, String path,String sdCardUri) {
DocumentFile document = DocumentFile.fromTreeUri(context, Uri.parse(sdCardUri));
String[] parts = path.split("/");
for (int i = 3; i < parts.length; i++) {
document= document.findFile(parts[i]);
}
return document;
}
public void updateViews(DocumentFile document) {
/////////
/////////
}
我无法在 android 5 中重命名可移动 SDCard 中的文件。 我尝试使用此代码重命名:
File oldfile = new File(old);
File newfile = new File(new);
oldfile.renameTo(newfile);
此代码在设备存储中运行良好。但在可移动 SD 卡中不起作用。 这个问题存在于 android 5 中,above.I 知道 Android 5 我必须使用 SAF 和 Android 超过运行时权限。但我不知道如何重命名。 请帮我。 谢谢
我找到了解决方案。留给不知道的人
final static String PREF_DEFAULT_URI = "pref_default_uri";
String strUri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
strUri = PreferenceManager.getDefaultSharedPreferences(this).getString(PREF_DEFAULT_URI, null);
if (TextUtils.isEmpty(strUri)) {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, 101);
} else {
Uri uri = Uri.parse(strUri);
DocumentFile rootDocumentfile = DocumentFile.fromTreeUri(this, uri);
updateViews(rootDocumentfile);
}
Button rename = (Button) findViewById(R.id.rename);
rename.setOnClickListener(this);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 101 && resultCode == RESULT_OK) {
Uri uri = data.getData();
final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
getContentResolver().takePersistableUriPermission(uri, takeFlags);
PreferenceManager.getDefaultSharedPreferences(this).edit().putString(PREF_DEFAULT_URI, uri.toString()).commit();
DocumentFile documentFile = DocumentFile.fromTreeUri(this, uri);
updateViews(documentFile)
}
}
public void renameclick(View v) {
File oldfile = new File(old);
File newfile = new File(new);
DocumentFile fileuri = getDocumentFilePath(getApplicationContext(),oldfile.getAbsolutePath(),strUri);
fileuri.renameTo(newfile.getName());
}
public static DocumentFile getDocumentFilePath(Context context, String path,String sdCardUri) {
DocumentFile document = DocumentFile.fromTreeUri(context, Uri.parse(sdCardUri));
String[] parts = path.split("/");
for (int i = 3; i < parts.length; i++) {
document= document.findFile(parts[i]);
}
return document;
}
public void updateViews(DocumentFile document) {
/////////
/////////
}