অ্যানড্রয়েডে কোনও ইন্টেন্টের মাধ্যমে যে কোনও ধরণের ফাইল বাছুন


96

আমি অ্যাপ্লিকেশনগুলির জন্য একটি ইন্টেনচুজার শুরু করতে চাই যা কোনও ধরণের ফাইল ফিরতে পারে

বর্তমানে আমি ব্যবহার করি (যা আমি ফাইল সংযুক্তির জন্য অ্যান্ড্রয়েড ইমেল উত্স কোড থেকে অনুলিপি করেছি)

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
Intent i = Intent.createChooser(intent, "File");
startActivityForResult(i, CHOOSE_FILE_REQUESTCODE);

তবে এটি কেবল আমার গ্যালাক্সি এস 2 এ "গ্যালারী" এবং "সঙ্গীত প্লেয়ার" দেখায়। এই ডিভাইসে একটি ফাইল এক্সপ্লোরার রয়েছে এবং আমি এটি তালিকাতে উপস্থিত হতে চাই। আমি ক্যামেরার অ্যাপটিও তালিকায় প্রদর্শন করতে চাই, যাতে ব্যবহারকারী কোনও ছবি শ্যুট করে আমার অ্যাপের মাধ্যমে এটি প্রেরণ করতে পারেন। যদি আমি অ্যাস্ট্রো ফাইল ম্যানেজারটি ইনস্টল করি তবে এটিও সেই অভিপ্রায়টির প্রতিক্রিয়া জানাবে। আমার গ্রাহকরা কেবল গ্যালাক্সি এসআইআইয়ের মালিক এবং তাদের ইতিমধ্যে একটি বেসিক তবে পর্যাপ্ত ফাইল ম্যানেজার রয়েছে বলে আমি এস্ট্রো ফাইল ম্যানেজার ইনস্টল করতে তাদের জোর করতে চাই না।

আমি কীভাবে এটি অর্জন করতে পারি তার কোনও ধারণা? আমি নিশ্চিত যে আমি ইতিমধ্যে ডিফল্ট ফাইল ম্যানেজারটিকে কোনও ফাইল বাছাইয়ের জন্য এই জাতীয় মেনুতে উপস্থিত দেখেছি, তবে কোন অ্যাপ্লিকেশনটিতে আমি মনে করতে পারি না।


কোনও ছবি বাছাই করার জন্য আপনার ছবি অঙ্কুর করতে খুব আলাদা কোডের প্রয়োজন হবে। আমি আসলে ভাবি না যে বেশিরভাগ ফাইল এক্সপ্লোরার কোনও ফাইল ফেরত দিতে পারে তবে আমি ভুল হতে পারি।
dtech

প্রাথমিকভাবে আপনার কোন ধরণের ফাইল অ্যাক্সেস করা দরকার তা আপনি নির্দিষ্ট করতে পারেন?
subrussn90

4
@ ডিটেক: আমি ফাইল এক্সপ্লোরার ফাইলটি ফিরে আসার আশা করি না, আমার কেবল এটির পথ দরকার।
এরগো_404

@ subrussn90: আমার ব্যবহারকারীকে যে কোনও ধরণের ফাইল বাছাই করা দরকার। এটি পিডিএফ, .ডোক, .জিপ, যে কোনও ধরণের ফাইল হতে পারে।
এরগো_404

আপনি কি এসডি কার্ডে নির্দিষ্ট ফাইলের উরি পেয়েছেন তা কি যথেষ্ট ???
subrussn90

উত্তর:


89

ক্যামেরার জন্য নয় অন্য ফাইলগুলির জন্য ..

আমার ডিভাইসে আমি ES File Explorerইনস্টল করেছি এবং এটি কেবল আমার ক্ষেত্রে কাজ করে ..

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("file/*");
startActivityForResult(intent, PICKFILE_REQUEST_CODE);

5
এটি কোনও বহিরাগত ফাইল এক্সপ্লোরার (যেমন ইএস ফাইল এক্সপ্লোরার বা অ্যাস্ট্রো ফাইল ম্যানেজারের সাথে কাজ করে তবে স্যামসাং ফাইল এক্সপ্লোরার এর সাথে নয়) এটি অদ্ভুত বলে মনে হয় যে তারা সেই ক্রিয়াটির প্রতিক্রিয়া জানাতে সঠিক অভিপ্রায় ফিল্টারগুলি প্রয়োগ করেনি
এরগো_404

@ লুকাপ - ওপেন সোর্স অ্যান্ড্রয়েড ফাইল ম্যানেজার ব্যবহার করুন এবং এটি আপনার অ্যাপ্লিকেশনটির সাথে সংহত করুন তবে আপনার কোনও তৃতীয় পক্ষের অ্যাপ্লিকেশন প্রয়োজন হবে না need
ব্যবহারকারী370305

4
আমি কীভাবে নির্বাচিত ফাইলটি পেতে পারি? আমার মনে হচ্ছে এটাই পথ, তবে কীভাবে?
ফ্রান্সিসকো

4
@ ফ্রেঞ্চিসকো কররেলেমোরেলস - ইন onActivityResult()- আপনি Uriফাইলটি পেতে পারেন ।
ব্যবহারকারী370305

4
PICKFILE_RESULT_CODEহওয়া উচিত PICKFILE_REQUEST_CODE
অ্যারন লরিঞ্জ ২

50

স্যামসাং ফাইল এক্সপ্লোরারকে কেবলমাত্র কাস্টম অ্যাকশন ( com.sec.android.app.myfiles.PICK_DATA ) দরকার নেই, তবে বিভাগের অংশ (ইন্টেন্ট। CATEGORY_DEFAULT ) এবং মাইম-টাইপ অতিরিক্ত হিসাবে পাস করা উচিত।

Intent intent = new Intent("com.sec.android.app.myfiles.PICK_DATA");
intent.putExtra("CONTENT_TYPE", "*/*");
intent.addCategory(Intent.CATEGORY_DEFAULT);

আপনি একাধিক ফাইল খোলার জন্য এই ক্রিয়াটিও ব্যবহার করতে পারেন: com.sec.android.app.myfiles.PICK_DATA_MULTIPLE যাইহোক এখানে আমার সমাধান যা স্যামসাং এবং অন্যান্য ডিভাইসে কাজ করে:

public void openFile(String mimeType) {

        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType(mimeType);
        intent.addCategory(Intent.CATEGORY_OPENABLE);

        // special intent for Samsung file manager
        Intent sIntent = new Intent("com.sec.android.app.myfiles.PICK_DATA");
         // if you want any file type, you can skip next line 
        sIntent.putExtra("CONTENT_TYPE", mimeType); 
        sIntent.addCategory(Intent.CATEGORY_DEFAULT);

        Intent chooserIntent;
        if (getPackageManager().resolveActivity(sIntent, 0) != null){
            // it is device with Samsung file manager
            chooserIntent = Intent.createChooser(sIntent, "Open file");
            chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { intent});
        } else {
            chooserIntent = Intent.createChooser(intent, "Open file");
        }

        try {
            startActivityForResult(chooserIntent, CHOOSE_FILE_REQUESTCODE);
        } catch (android.content.ActivityNotFoundException ex) {
            Toast.makeText(getApplicationContext(), "No suitable File Manager was found.", Toast.LENGTH_SHORT).show();
        }
    }

এই সমাধানটি আমার পক্ষে ভাল কাজ করে এবং সম্ভবত অন্য কারও জন্য কার্যকর হবে।


এটি প্রায়শই আমার পক্ষে কাজ করে, সিঞ্চান্ট যখন চালু করা হয় তখন কোনও ধরণের কোনও ফাইলই গ্রহণ করে না except আমি ফোল্ডারগুলির মাধ্যমে ব্রাউজ করতে পারি, তবে এটিই।
রাদু

সমস্যাটি হ'ল অভিপ্রায়টির মাইমটাইপ হওয়া দরকার: "ফাইল / *", যখন স্যামসুং সিন্টের "* / *" দরকার - * / * এর মধ্যে ফাঁকা স্থান ছাড়াই
রাদু

4
অন্যান্য 11 কে অ্যান্ড্রয়েড ডিভাইসগুলির সম্পর্কে কী।
অলিভার ডিকসন

4
আপনি কীভাবে আমাকে সহায়তা করতে পারেন এই উদ্দেশ্যটির জন্য ইউআরআই কীভাবে সেট করবেন?
প্রিয়াঙ্কাচৌহান

4
স্যামসুং ইন্টেন্টের ক্ষেত্রে ("com.sec.android.app.myfiles.PICK_DATA") আপনি স্ট্রিংকে অতিরিক্ত "FOLDERPATH" বা "START_FOLDER" দেওয়ার চেষ্টা করতে পারেন
Chupik

41

গ্যালাক্সির জন্য আমার এই কাজটি এর শো পরিচিতিগুলি, ডিভাইসে ইনস্টল করা ফাইল পরিচালক, গ্যালারী, সঙ্গীত প্লেয়ার নোট করে

private void openFile(Int  CODE) {
    Intent i = new Intent(Intent.ACTION_GET_CONTENT);
    i.setType("*/*");
    startActivityForResult(intent, CODE);
}

এখানে onActivityResultক্রিয়াকলাপের পথ পান ।

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     String Fpath = data.getDataString();
    // do somthing...
    super.onActivityResult(requestCode, resultCode, data);

}

6
কিভাবে ইউরি রূপান্তর করবেন ইউলে.ফাইলে?
আনন্দ সাবজানি

নিশ্চিত java.io.File পেয়ে সম্পর্কে না, কিন্তু দিয়ে খোলা যেতে পারে: developer.android.com/reference/android/content/... কিভাবে সহজ নাম পেতে এখানে হল: stackoverflow.com/a/23270545/755313
demaksee

4
কিভাবে একটি ফোল্ডার বাছাই?
শৃঙ্গ 2323

7

এটি আমাকে সেরা ফলাফল দেয়:

    Intent intent;
    if (android.os.Build.MANUFACTURER.equalsIgnoreCase("samsung")) {
        intent = new Intent("com.sec.android.app.myfiles.PICK_DATA");
        intent.putExtra("CONTENT_TYPE", "*/*");
        intent.addCategory(Intent.CATEGORY_DEFAULT);
    } else {

        String[] mimeTypes =
                {"application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", // .doc & .docx
                        "application/vnd.ms-powerpoint", "application/vnd.openxmlformats-officedocument.presentationml.presentation", // .ppt & .pptx
                        "application/vnd.ms-excel", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", // .xls & .xlsx
                        "text/plain",
                        "application/pdf",
                        "application/zip", "application/vnd.android.package-archive"};

        intent = new Intent(Intent.ACTION_GET_CONTENT); // or ACTION_OPEN_DOCUMENT
        intent.setType("*/*");
        intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
    }

আপনি কি আপনারঅ্যাক্টিভিটি রিসাল্টকোড @ ইসলাম খালেদ
কিশান

4
তৃতীয় বিকল্পের জন্য org.openintents.action.PICK_FILE দেখুন। আপনার কোডটিও ধরে নিয়েছে যে স্যামসুং ফোনের প্রত্যেকে স্যামসং ফাইল ম্যানেজার ব্যবহার করে এবং (এখনও)। ফ্যালব্যাক হিসাবে স্যামসাংয়ের সাথে ইন্টেন্ট ড্রেসঅলঅ্যাক্টিভিটি ব্যবহার করা আরও দৃ rob় হবে।
মার্কাস ওলছন

1

স্যামসাং ফাইল এক্সপ্লোরার একটি কাস্টম অ্যাকশন ব্যবহার করে Turn এই কারণেই আমি স্যামসং অ্যাপ্লিকেশন থেকে স্যামসং অ্যাপ্লিকেশনগুলি দেখতে পেলাম যখন স্যামসাং অ্যাপ্লিকেশনগুলি থেকে কোনও ফাইল অনুসন্ধান করছিলাম, তবে আমার থেকে নয়।

ক্রিয়াটি হ'ল "com.sec.android.app.myfiles.PICK_DATA"

আমি একটি কাস্টম ক্রিয়াকলাপ চয়নকারী তৈরি করেছি যা উভয় উদ্দেশ্যকে ফিল্টার করে এমন ক্রিয়াকলাপগুলি প্রদর্শন করে।


হাই, আপনি কি আরও কিছুটা ব্যাখ্যা করতে পারেন? স্যামসাং গ্যালাক্সি ফোনের জন্য আমি ইনটেন্ট সিলেক্টফিল = নতুন ইনটেন্ট ("com.sec.android.app.myfiles.PICK_DATA") ব্যবহার করি; তবে এটি ত্রুটির কারণ ঘটায়
স্টিলিওসফ

আমি এখনই নিশ্চিত নই, তবে পরে এটি পরীক্ষা করতে পারি। আমি মনে করি এটি ক্রিয়াকলাপ খুঁজে পাওয়া যায় নি ব্যতিক্রম। আপনার কি কোনও কাজের সমাধান আছে? আমি প্রায় সব চেষ্টা করেছিলাম এবং এটি ঠিক করার ব্যবস্থা করি নি
স্টিলিওসফ

এই অভিপ্রায়টি গ্যালাক্সি এসআইআইতে আমার পক্ষে কাজ করেছে। এটি একটি জিটি-বি 555 (গ্যালাক্সি ওয়াই প্রো) এ চেষ্টা করেছেন এবং এটি কার্যকর হয়নি। আমি মনে করি আপনি যদি স্যামসাংয়ের সমস্ত ডিভাইসকে টার্গেট করতে চান তবে এটি নির্ভরযোগ্য নয়। আমি আমার অ্যাপ্লিকেশনটিতে একটি ওপেন সোর্স ফাইল ম্যানেজারকে সংহত করে শেষ করেছি, তবে এই জাতীয় মৌলিক প্রয়োজনের এটি একটি ভারী সমাধান।
এরগো_404

আপনি কীভাবে আমাকে সহায়তা করতে পারেন এই উদ্দেশ্যটির জন্য ইউআরআই কীভাবে সেট করবেন?
প্রিয়াঙ্কাচৌহান

0

আপনি যদি এটি জানতে চান তবে এটিতে একটি ফাইলে ডায়ালগ নামে একটি ওপেন সোর্স লাইব্রেরি উপস্থিত রয়েছে যা এটি একটি ছোট এবং সহজেই ব্যবহারযোগ্য যা কোনও ফাইল চয়নকারীকে সরবরাহ করে।

অ্যান্ড্রয়েডের জন্য অন্য ফাইল চয়নকারের লাইব্রেরির সাথে পার্থক্যটি হ'ল এফাইলডায়লগ আপনাকে ডায়ালগ এবং ক্রিয়াকলাপ হিসাবে ফাইল চয়নকারীটি খোলার বিকল্প দেয়।

এটি আপনাকে ফোল্ডারগুলি নির্বাচন করতে, ফাইলগুলি তৈরি করতে, নিয়মিত অভিব্যক্তি ব্যবহার করে ফাইলগুলি ফিল্টার করতে এবং নিশ্চিতকরণ ডায়লগগুলি প্রদর্শন করতে দেয়।


0

অন্য উত্তরগুলি ভুল নয়। তবে, এখন ফাইলগুলি খোলার জন্য আরও বিকল্প রয়েছে। উদাহরণস্বরূপ, আপনি যদি অ্যাপ্লিকেশনটিতে দীর্ঘমেয়াদী, কোনও ফাইলের স্থায়ী অ্যাক্সেস চান তবে আপনি তার ACTION_OPEN_DOCUMENTপরিবর্তে ব্যবহার করতে পারেন । অফিসিয়াল ডকুমেন্টেশন দেখুন: স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্ক ব্যবহার করে ফাইলগুলি খুলুন । এছাড়াও এই উত্তর উল্লেখ করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.