hoseinr0541

مشکل اندروید 5 به بعد با rename کردن فایل در removeable sdcard

2 ارسال در این موضوع قرار دارد

سلام

با کد زیر  میشه یه فایل رو تغییر نام داد:

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

این کد روی حافظه داخلی بدون هیچ مشکلی کار میکنه. ولی وقتی بخواهیم یک فایل از داخل sdcard رو با همین کد rename کنیم عمل rename انجام نمیشه. این مشکل از اندروید 5 به بعد وجود داره. بعد از مقداری جستجو فهمیدم برای اندروید 5 میشه از SAF استفاده کرد و اندروید 6 به بعد باید مجوز ها رو در زمان اجرا از کاربر دریافت کرد. از کد زیر برای اندروید 5 استفاده کردم ولی بازم جواب نداد لطفا راهنمایی کنید. 

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    startActivityForResult(new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE), 42);

    Button rename = (Button) findViewById(R.id.rename);
    rename.setOnClickListener(this);
}

@Override
public void onActivityResult(int requestCode,int resultCode,Intent resultData) {
    if (resultCode != RESULT_OK)
        return;
    Uri treeUri = resultData.getData();
    DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri);
    grantUriPermission(getPackageName(), treeUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
    getContentResolver().takePersistableUriPermission(treeUri, Intent.FLAG_GRANT_READ_URI_PERMISSION |Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}

public void renameclick(View v) {
    File oldfile = new File(old);
    File newfile = new File(new);

    DocumentFile fileuri = DocumentFile.fromFile(oldfile);
    fileuri.renameTo(newfile);
}

 

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

با سلام. خودم راه حل رو پیدا کردم .میزارم برای اونا که نمیدونن . البته برای اندروید 5 به اینصورته.برای اندروید 6 و بالاتر گرفتن مجوز از کاربر به طریقی دیگه هست.

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

 

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری