hoseinr0541

توسعه دهنده اندروید
  • تعداد ارسال ها

    13
  • تاریخ عضویت

  • آخرین بازدید

  • Days Won

    3

hoseinr0541 last won the day on ژانویه 27 2018

hoseinr0541 had the most liked content!

اعتبار در انجمن

1 Neutral

درباره hoseinr0541

  • درجه
    Member
  1. با سلام. خودم راه حل رو پیدا کردم .میزارم برای اونا که نمیدونن . البته برای اندروید 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) { ///////// ///////// }
  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); }