Вопрос:

как переименовать файл в съемную SDCard в Android 5

android permissions rename sd-card android-external-storage

39 просмотра

1 ответ

9 Репутация автора

Я не могу переименовать файл в съемной SDCard в Android 5. Я пытаюсь переименовать с помощью этого кода:

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

Этот код работает в памяти устройства нормально. но в съемной SDCard не работают. эта проблема существует в Android 5 и выше. Я знаю, для Android 5 я должен использовать SAF и для Android над разрешениями во время выполнения. Но я не знаю, как это сделать для переименования. Помогите мне, пожалуйста. Спасибо

Автор: hosein Источник Размещён: 26.07.2019 03:16

Ответы (1)


0 плюса

9 Репутация автора

Решение

Я нашел решение. Я оставляю это для тех, кто не знает

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

Автор: hosein Размещён: 11.08.2019 08:14
Вопросы из категории :
32x32