কখনও একজন ইউজার একটি শেয়ার করা ফাইল নির্বাচন (সিলেক্ট) করে, আপনার অ্যাপলিকেশনকে অবশ্যই কোন ফাইল সিলেক্ট করা হয়েছে তা নির্ধারন করা এবং তারপর ফাইলের জন্য একটি কনটেন্ট ইউআরআই তৈরী করতে হবে। যেহেতু Activity একটি ListView সহজপ্রাপ্য ফাইলের তালিকা প্রদর্শন করে, যখন ইউজার একটি ফাইল নাম ক্লিক করে সিস্টেম মেথড onItemClick()কল করে, যার মধ্যে আপনি একটি নির্বাচিত ফাইল পেয়ে থাকে।
onItemClick()এর মধ্যে, নির্বাচিত ফাইলের ফাইল নামের জন্য একটি File অবজেক্ট পেতে এবং getUriForFile()এ একটি আরগুমেন্ট হিসাবে পাস করতে, অথরিটি সহ যা আপনি FileProvider এর জন্য < provider> এলিমেন্টে সুনির্দিষ্ট করেছেন। উদ্ভুত কনটেন্ট ইউআরআই অথরিটি, ফাইলের ডিরেক্টরীর (এক্সএমএল মেটা-ডাটা তে নির্দিষ্টকরনের মতো) সাথে সংশ্লিষ্ট একটি পাথ সেগমন্ট, এবং এক্সটেনশন সহ ফাইলের নাম ধারন করে। কীভাবে FileProvider এক্সএমএল মেটা-ডাটা এর উপর ভিত্তি করে পাথ সেগমেন্টে ডিরেক্টরীগুলো ম্যাপ করে তা (Specify Sharable Directories) অধ্যয়ে আলোচনা করা হয়েছে।
নিম্নোক্ত অংশটি আপনাকে দেখায় কীভাবে নির্বাচিত ফাইল সনাক্ত করতে হয় এবং এটার জন্য একটি কনটেন্ট ইউআরআই পেতে হয়:
protected void onCreate(Bundle savedInstanceState) {
...
// Define a listener that responds to clicks on a file in the ListView
mFileListView.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
/*
* When a filename in the ListView is clicked, get its
* content URI and send it to the requesting app
*/
public void onItemClick(AdapterView<?> adapterView,
View view,
int position,
long rowId) {
/*
* Get a File for the selected file name.
* Assume that the file names are in the
* mImageFilename array.
*/
File requestFile = new File(mImageFilename[position]);
/*
* Most file-related method calls need to be in
* try-catch blocks.
*/
// Use the FileProvider to get a content URI
try {
fileUri = FileProvider.getUriForFile(
MainActivity.this,
"com.example.myapp.fileprovider",
requestFile);
} catch (IllegalArgumentException e) {
Log.e("File Selector",
"The selected file can't be shared: " +
clickedFilename);
}
...
}
});
...
}
মনে রাখবেন যে আপনি শুধুমাত্র ফাইলের জন্য কনটেন্ট ইউআরআই তৈরী করতে পারবেন, যে ফাইল একটি ডিরেক্টরীর মধ্যে থাকে যা আপনি মেটা-ডাটা ফাইলে নির্দিষ্ট করেছেন, যা < paths> এলিমেন্ট ধারন করে, যেভাবে পূর্ববর্তী অধ্যয়ে (Specify Sharable Directories) আলোচিত হয়েছে। একটি পাথ এ একটি File এর জন্য যদি আপনি getUriForFile()কল করেন যা আপনি নির্দিষ্ট করেন নি, আপনি একটি IllegalArgumentException রিসিভ করবেন।