আমি ফাইল সিস্টেম থেকে একটি ফাইল বাছাই করতে আমার তৃতীয় পক্ষের ফাইল ম্যানেজারটি ব্যবহার করছি (আমার ক্ষেত্রে পিডিএফ)।
এইভাবে আমি ক্রিয়াকলাপটি চালু করি:
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType(getString(R.string.app_pdf_mime_type));
intent.addCategory(Intent.CATEGORY_OPENABLE);
String chooserName = getString(R.string.Browse);
Intent chooser = Intent.createChooser(intent, chooserName);
startActivityForResult(chooser, ActivityRequests.BROWSE);
এটি আমার মধ্যে রয়েছে onActivityResult:
Uri uri = data.getData();
if (uri != null) {
if (uri.toString().startsWith("file:")) {
fileName = uri.getPath();
} else { // uri.startsWith("content:")
Cursor c = getContentResolver().query(uri, null, null, null, null);
if (c != null && c.moveToFirst()) {
int id = c.getColumnIndex(Images.Media.DATA);
if (id != -1) {
fileName = c.getString(id);
}
}
}
}
কোড স্নিপেট এখানে উপলভ্য ওপেন ইনটেন্টস ফাইল ম্যানেজার নির্দেশাবলী থেকে ধার করা হয়েছে:
http://www.openintents.org/en/node/829
উদ্দেশ্য উদ্দেশ্য if-elseপিছনে সামঞ্জস্য। আমি আশ্চর্য হই যে ফাইল ফাইলের নাম পাওয়ার এটি যদি সর্বোত্তম উপায় তবে আমি খুঁজে পেয়েছি যে অন্যান্য ফাইল পরিচালকরা সমস্ত ধরণের জিনিস ফেরত দেয়।
উদাহরণস্বরূপ, ডকুমেন্টস টুও নিম্নলিখিতগুলির মতো কিছু ফেরত দেয়:
content://com.dataviz.dxtg.documentprovider/document/file%3A%2F%2F%2Fsdcard%2Fdropbox%2FTransfer%2Fconsent.pdf
যার উপর getContentResolver().query()ফিরে আসে null।
বিষয়গুলিকে আরও আকর্ষণীয় করে তুলতে, নামবিহীন ফাইল ম্যানেজার (ক্লায়েন্ট লগ থেকে আমি এই ইউআরআই পেয়েছি) এর মতো কিছু ফিরে পেয়েছে:
/./sdcard/downloads/.bin
ইউআরআই থেকে ফাইলের নাম বের করার কোনও পছন্দসই উপায় আছে বা কোনও একটি স্ট্রিং পার্সিংয়ের অবলম্বন করবে?