প্রচুর ভাল প্রশ্ন, আসুন খনন করি। :)
তুমি এটা কিভাবে ব্যবহার কর?
কিটকাটের স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্কের সাথে আলাপচারিতার জন্য এখানে দুর্দান্ত টিউটোরিয়াল রয়েছে:
https://developer.android.com/guide/topics/providers/document-provider.html#client
ললিপপে নতুন এপিআইয়ের সাথে ইন্টারঅ্যাক্ট করা খুব মিল। ব্যবহারকারীকে ডিরেক্টরি গাছ বাছাই করতে অনুরোধ জানাতে, আপনি এই জাতীয় উদ্দেশ্য চালু করতে পারেন:
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, 42);
তারপরে আপনারঅ্যাক্টিভিটিস রেজাল্ট () এ, আপনি ব্যবহারকারী-বাছাই করা উরিটিকে নতুন ডকুমেন্টফিল সহায়ক শ্রেণিতে পাস করতে পারেন। এখানে একটি দ্রুত উদাহরণ রয়েছে যা বাছাই করা ডিরেক্টরিতে ফাইলগুলি তালিকাভুক্ত করে এবং তারপরে একটি নতুন ফাইল তৈরি করে:
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
if (resultCode == RESULT_OK) {
Uri treeUri = resultData.getData();
DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri);
// List all existing files inside picked directory
for (DocumentFile file : pickedDir.listFiles()) {
Log.d(TAG, "Found file " + file.getName() + " with size " + file.length());
}
// Create a new file and write into it
DocumentFile newFile = pickedDir.createFile("text/plain", "My Novel");
OutputStream out = getContentResolver().openOutputStream(newFile.getUri());
out.write("A long time ago...".getBytes());
out.close();
}
}
উরি ফিরে এসেছে DocumentFile.getUri()
মে বিভিন্ন প্ল্যাটফর্ম এপিআই সহ ব্যবহারের জন্য যথেষ্ট নমনীয়। উদাহরণস্বরূপ, যদি আপনি এটি ব্যবহার ভাগ পারে Intent.setData()
সঙ্গে Intent.FLAG_GRANT_READ_URI_PERMISSION
।
আপনি যদি উরিটি স্থানীয় কোড থেকে অ্যাক্সেস করতে চান তবে আপনি কল করতে পারেন ContentResolver.openFileDescriptor()
এবং তারপরে একটি traditionalতিহ্যবাহী POSIX ফাইল বিবরণকারী পূর্ণসংখ্যা ব্যবহার করতে ParcelFileDescriptor.getFd()
বা detachFd()
পেতে পারেন ।
আপনি ফাইল / ফোল্ডার অ্যাক্সেস করতে পারবেন কিনা তা কীভাবে পরীক্ষা করবেন?
ডিফল্টরূপে, ইউরিস স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্কগুলির মাধ্যমে ফিরে আসে রিবুটগুলি জুড়ে স্থির থাকে না । প্ল্যাটফর্মটি অনুমতি অব্যাহত রাখার ক্ষমতা "অফার করে", তবে আপনার যদি এটি চান তবে অনুমতিটি "নেওয়া" দরকার। আমাদের উপরের উদাহরণে, আপনি কল করবেন:
getContentResolver().takePersistableUriPermission(treeUri,
Intent.FLAG_GRANT_READ_URI_PERMISSION |
Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
আপনার অ্যাপ্লিকেশনটির কী কী অনুদান মঞ্জুর করে তা ContentResolver.getPersistedUriPermissions()
API এর মাধ্যমে অ্যাক্সেস করতে পারে তা আপনি সর্বদা নির্ধারণ করতে পারেন । যদি আপনার আর স্থায়ী উরির অ্যাক্সেসের প্রয়োজন না হয় তবে আপনি এটির সাথে এটি প্রকাশ করতে পারেন ContentResolver.releasePersistableUriPermission()
।
এটি কিটক্যাট এ পাওয়া যায়?
না, আমরা প্রত্যাহার করে প্ল্যাটফর্মের পুরানো সংস্করণগুলিতে নতুন কার্যকারিতা যুক্ত করতে পারি না।
অ্যাপ্লিকেশনগুলির ফাইল / ফোল্ডারে অ্যাক্সেস রয়েছে তা আমি দেখতে পাচ্ছি?
বর্তমানে এটির কোনও ইউআই নেই যা এটি দেখায়, তবে আপনি adb shell dumpsys activity providers
আউটপুট "মঞ্জুরিপ্রাপ্ত উরি অনুমতি" বিভাগে বিশদটি পেতে পারেন ।
যদি কোনও অ্যাপ্লিকেশন একই ডিভাইসে একাধিক ব্যবহারকারীর জন্য ইনস্টল করা থাকে তবে কী হবে?
অন্যান্য সমস্ত মাল্টি-ইউজার প্ল্যাটফর্মের কার্যকারিতার মতোই ইউরি অনুমতি অনুদানগুলি প্রতি ব্যবহারকারী ভিত্তিতে পৃথক করা হয়। অর্থাত, দুটি ভিন্ন ব্যবহারকারীর অধীনে চলমান একই অ্যাপটির ওভারল্যাপিং বা ভাগ করা উরি অনুমতি অনুদান নেই।
অনুমতিগুলি কি বাতিল করা যাবে?
ব্যাকিং ডকুমেন্টপ্রোভাডার যে কোনও সময় অনুমতি বাতিল করতে পারে যেমন মেঘ-ভিত্তিক নথি মুছে ফেলা হয়। এই বাতিল হওয়া অনুমতিগুলি আবিষ্কার করার সর্বাধিক সাধারণ উপায় হ'ল যখন তারা ContentResolver.getPersistedUriPermissions()
উপরে বর্ণিত থেকে অদৃশ্য হয়ে যায় ।
অনুদানের সাথে জড়িত যে কোনও অ্যাপের জন্য অ্যাপ্লিকেশন ডেটা সাফ হয়ে গেলে অনুমতিও বাতিল করা হয় rev
কোনও নির্বাচিত ফোল্ডারে পুনরাবৃত্তভাবে অনুমতি কাজ করার জন্য জিজ্ঞাসা করবেন?
হ্যাঁ, ACTION_OPEN_DOCUMENT_TREE
অভিপ্রায়টি আপনাকে বিদ্যমান এবং সদ্য নির্মিত ফাইল এবং ডিরেক্টরি উভয় ক্ষেত্রে পুনরাবৃত্ত অ্যাক্সেস দেয়।
এটি কি একাধিক নির্বাচনের অনুমতি দেয়?
হ্যাঁ, কিটক্যাট থেকে একাধিক নির্বাচনকে সমর্থন করা হয়েছে এবং আপনি EXTRA_ALLOW_MULTIPLE
আপনার ACTION_OPEN_DOCUMENT
অভিপ্রায় শুরু করার সময় সেটিংস স্থাপনের মাধ্যমে অনুমতি দিতে পারেন । আপনি যে ধরণের ফাইল বেছে নিতে পারেন তা ব্যবহার করতে Intent.setType()
বা EXTRA_MIME_TYPES
সংকীর্ণ করতে পারেন:
http://developer.android.com/reference/android/content/Intent.html#ACTION_OPEN_DOCUMENT
এমুলেটরটিতে নতুন এপিআই চেষ্টা করার কোনও উপায় আছে?
হ্যাঁ, প্রাথমিক ভাগ করা স্টোরেজ ডিভাইসটি চয়নকারীতে এমনকি এমুলেটরটিতে উপস্থিত হওয়া উচিত। আপনার অ্যাপ্লিকেশন শুধুমাত্র শেয়ার জমার ব্যবহার করার জন্য সংগ্রহস্থল অ্যাক্সেস ফ্রেমওয়ার্ক ব্যবহার করে, আপনি আর প্রয়োজন READ/WRITE_EXTERNAL_STORAGE
অনুমতি এ সব করতে এবং তাদের সরাতে বা ব্যবহার করতে পারেন android:maxSdkVersion
একমাত্র পুরোনো প্ল্যাটফর্ম সংস্করণের উপর তাদের অনুরোধ বৈশিষ্ট্য।
যখন ব্যবহারকারী এসডি-কার্ডকে অন্য একটিতে প্রতিস্থাপন করেন তখন কী হবে?
যখন শারীরিক মিডিয়া জড়িত থাকে, অন্তর্নিহিত মিডিয়াগুলির ইউআইডি (যেমন FAT ক্রমিক সংখ্যা) সর্বদা ফিরে আসা উড়িতে পোড়া হয়। ব্যবহারকারী একাধিক স্লটের মাঝামাঝি সময়ে মিডিয়াটিকে অদলবদল করলেও সিস্টেমটি আপনাকে ব্যবহারকারীকে প্রাথমিকভাবে নির্বাচিত মিডিয়াগুলির সাথে সংযোগ করতে ব্যবহার করে।
ব্যবহারকারী যদি দ্বিতীয় কার্ডে অদলবদল করে, আপনাকে নতুন কার্ডটিতে অ্যাক্সেস পেতে প্রম্পট করতে হবে। যেহেতু সিস্টেমটি প্রতি ইউআইডি ভিত্তিতে অনুদানগুলি স্মরণ করে, তাই ব্যবহারকারী যদি পরে এটি পুনরায় জমা দেয় তবে আপনি মূল কার্ডটিতে পূর্বে মঞ্জুর করা চালিয়ে যেতে পারবেন।
http://en.wikipedia.org/wiki/Volume_serial_number