【问题标题】:how to rename a file in removeable sdcard in android 5如何在android 5中重命名可移动SD卡中的文件
【发布时间】:2019-07-26 15:16:37
【问题描述】:

我无法在 android 5 的可移除 SDCard 中重命名文件。 我尝试使用此代码重命名:

File oldfile = new File(old); File newfile = new File(new); oldfile.renameTo(newfile);

此代码在设备存储中运行良好。但在可移动的 SD 卡中不起作用。 这个问题存在于 android 5 及更高版本中。我知道对于 Android 5 我必须使用 SAF 和对于 Android 的运行时权限。但我不知道如何重命名。 请帮我。 谢谢

【问题讨论】:

  • “问题”是什么意思?你有例外吗?它只是静默执行吗?
  • 文件名不能在SD卡中重命名。不会出现错误消息。 @史蒂文

标签: android permissions rename sd-card android-external-storage


【解决方案1】:

我找到了解决方案。留给不知道的人吧

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) {
    /////////
    /////////
}

【讨论】:

    猜你喜欢
    • 2012-02-22
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    相关资源
    最近更新 更多