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