অন্যান্য অ্যাপ্লিকেশনগুলিতে সামগ্রী ভাগ করে নেওয়ার জন্য কীভাবে সমর্থন ফাইলপ্রোভাইডার ব্যবহার করবেন?


142

আমি অ্যান্ড্রয়েড সমর্থন লাইব্রেরির ফাইলপ্রোভিডার ব্যবহার করে বাহ্যিক অ্যাপ্লিকেশন সহ একটি অভ্যন্তরীণ ফাইল সঠিকভাবে ভাগ করার (উন্মুক্ত নয়) সন্ধান করার উপায় খুঁজছি ।

দস্তাবেজের উদাহরণ অনুসরণ করে,

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="com.example.android.supportv4.my_files"
    android:grantUriPermissions="true"
    android:exported="false">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/my_paths" />
</provider>

এবং অন্য অ্যাপ্লিকেশনগুলিতে একটি ফাইল ভাগ করে নিতে শেয়ারকম্প্যাট ব্যবহার করছেন:

ShareCompat.IntentBuilder.from(activity)
.setStream(uri) // uri from FileProvider
.setType("text/html")
.getIntent()
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)

কাজ করে না, যেহেতু FLAG_GRANT_READ_URI_PERMISSION কেবলমাত্র উরির জন্য dataঅভিপ্রায়ের ভিত্তিতে উল্লিখিত অনুমতি দেয়, EXTRA_STREAMঅতিরিক্ত (যেমন নির্ধারিত ছিল setStream) মান দেয় না ।

আমি সরবরাহকারীর জন্য সেট android:exportedকরে সুরক্ষার সাথে আপোষ করার চেষ্টা করেছি true, তবে FileProviderঅভ্যন্তরীণভাবে নিজেই রপ্তানি করা হয় কিনা তা পরীক্ষা করে দেখি, যখন তখন এটি ব্যতিক্রম ছুঁড়ে দেয়।


7
+1 করুন সত্যিকারের মূল প্রশ্ন মনে করা হয় - সেখানে কিছুই Google বা উপর Stackoverflow , যতটা আমি বলতে পারে।
ফিল

ন্যূনতম গিথুব উদাহরণ প্রকল্পটি ব্যবহার করে একটি বেসিক ফাইলপ্রাইডার সেটআপ পেতে এখানে একটি পোস্ট রয়েছে: stackoverflow.com/a/48103567/2162226 । এটি স্থানীয় স্ট্যান্ডেলোন প্রকল্পে কোন ফাইলগুলি (কোনও পরিবর্তন না করে) অনুলিপি করার জন্য পদক্ষেপগুলি সরবরাহ করে
জেন বো বো

উত্তর:


159

ব্যবহার FileProviderসমর্থন লাইব্রেরি থেকে আপনি নিজে অন্যান্য অ্যাপসের জন্য দান এবং প্রত্যাহার অনুমতি (রানটাইম কোণে) নির্দিষ্ট উরি পড়া করতে হবে। Context.grantUriPermission এবং Context.revokeUriPermission পদ্ধতি ব্যবহার করুন ।

উদাহরণ স্বরূপ:

//grant permision for app with package "packegeName", eg. before starting other app via intent
context.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);

//revoke permisions
context.revokeUriPermission(uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);

শেষ অবলম্বন হিসাবে, আপনি যদি প্যাকেজের নাম সরবরাহ করতে না পারেন তবে আপনি নির্দিষ্ট অ্যাপ্লিকেশনগুলিকে অনুমতি দিতে পারেন যা নির্দিষ্ট অভিপ্রায় পরিচালনা করতে পারে:

//grant permisions for all apps that can handle given intent
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
...
List<ResolveInfo> resInfoList = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resInfoList) {
    String packageName = resolveInfo.activityInfo.packageName;
    context.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
}

ডকুমেন্টেশন অনুযায়ী বিকল্প পদ্ধতি :

  • সেটডাটা () কে কল করে সামগ্রীতে ইউআরআই রাখুন।
  • এরপরে, FLAG_GRANT_READ_URI_PERMISSION বা FLAG_GRANT_WRITE_URI_PERMISSION বা উভয়ই দিয়ে ইন্টেন্ট.সেটফ্ল্যাগস () পদ্ধতিটি কল করুন।
  • শেষ অবধি, অন্য অ্যাপ্লিকেশনে ইন্টেন্টটি প্রেরণ করুন। প্রায়শই, আপনি সেটরেসাল্ট () এ কল করে এটি করেন।

    প্রাপ্তির ক্রিয়াকলাপের স্ট্যাক সক্রিয় থাকাকালীন কোনও উদ্দেশ্যতে দেওয়া মঞ্জুরিগুলি কার্যকর থাকে। স্ট্যাক শেষ হয়ে গেলে
    অনুমতিগুলি স্বয়ংক্রিয়ভাবে সরানো হয়।
    ক্লায়েন্ট অ্যাপ্লিকেশনটিতে একটি ক্রিয়াকলাপে দেওয়া অনুমোদিত অনুমতিগুলি স্বয়ংক্রিয়ভাবে
    সেই অ্যাপ্লিকেশানের অন্যান্য উপাদানগুলিতে প্রসারিত হয় ।

BTW। আপনার যদি প্রয়োজন হয় তবে আপনি ফাইলপ্রভাইডারের উত্সটি অনুলিপি করতে পারেন এবং attachInfoসরবরাহকারীকে রফতানি করা হচ্ছে কিনা তা পরীক্ষা করতে আটকাতে পদ্ধতি পরিবর্তন করতে পারেন।


26
অ্যাপটিটির grantUriPermissionপ্যাকেজের নাম সরবরাহ করতে আমাদের যে পদ্ধতিটি অনুমোদন করতে চাই তা ব্যবহার করে Using তবে ভাগ করার সময়, সাধারণত আমরা জানি না যে ভাগ করার গন্তব্যটি কী।
র‌্যান্ডি সুগিয়ান্তো 'ইউকু'

আমরা যদি প্যাকেজের নামটি না জানি এবং অন্যান্য অ্যাপ্লিকেশনগুলি এটি খোলার জন্য সক্ষম হতে চায় তবে কী হবে
স্টু স্টার্লিং

3
আপনি কি দয়া করে সর্বশেষ সমাধান @ লেচোর জন্য একটি ওয়ার্কিং কোড সরবরাহ করতে পারেন?
StErMi

2
সমর্থন ফাইলপ্রেজিডার সেটফ্ল্যাগগুলির সাথে কাজ করে না, তবে গ্রান্টউরিপিরমিশন দিয়ে কাজ করে কেন একটি ত্রুটিযুক্ত ট্র্যাকিং ট্র্যাকিং রয়েছে? বা এটি কোনও বাগ নয়, এক্ষেত্রে এটি কীভাবে বাগ নয়?
এনএমআর

1
এগুলি ছাড়াও, আমি দেখতে পেলাম যে গ্র্যান্টউরিপিরমিশন কল শেয়ারকম্প্যাটটি ব্যবহার করে তৈরি করা কোনও উদ্দেশ্যটির জন্য কাজ করে না তবে ম্যানুয়ালি ইন্টেন্ট তৈরি করার সময় এটি করেছিল।
স্টুস্ট্রিলিং

33

অভ্যন্তরীণ অ্যাপ্লিকেশন ফোল্ডার থেকে কীভাবে ফাইল ভাগ করা যায় সে সম্পর্কে পুরোপুরি কোডিং নমুনা কাজ করছে। অ্যান্ড্রয়েড 7 এবং অ্যান্ড্রয়েড 5 এ পরীক্ষিত।

Andro আইডি

</application>
   ....
    <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="android.getqardio.com.gmslocationtest"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths"/>
    </provider>
</application>

XML / provider_paths

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <files-path
        name="share"
        path="external_files"/>
</paths>

কোড নিজেই

    File imagePath = new File(getFilesDir(), "external_files");
    imagePath.mkdir();
    File imageFile = new File(imagePath.getPath(), "test.jpg");

    // Write data in your file

    Uri uri = FileProvider.getUriForFile(this, getPackageName(), imageFile);

    Intent intent = ShareCompat.IntentBuilder.from(this)
                .setStream(uri) // uri from FileProvider
                .setType("text/html")
                .getIntent()
                .setAction(Intent.ACTION_VIEW) //Change if needed
                .setDataAndType(uri, "image/*")
                .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

   startActivity(intent);

1
এর ব্যবহার ShareCompat.IntentBuilderএবং পঠিত ইউআরআই অনুমতি অবশেষে এটি আমার জন্য করেছিল।
কর্ড রেহেন

অ্যান্ড্রয়েডের অন্যান্য সংস্করণগুলির জন্য বিরতি
অলিভার ডিকসন

@ অলিভারডিকসন: কোনটি? আমি এটি অ্যান্ড্রয়েড 6.0 এবং 9.0 এ পরীক্ষা করেছি।
ভায়োলেট জিরাফ

1
এটি কাজ করে এটির একমাত্র উত্তর FileProvider। অন্যান্য উত্তরগুলি উদ্দেশ্যটি হ্যান্ডলিংকে ভুল করে (তারা ব্যবহার করে না ShareCompat.IntentBuilder), এবং সেই অভিপ্রায়টি কোনও অর্থবহ উপায়ে বাহ্যিক অ্যাপ্লিকেশন দ্বারা খোলা যায় না। শেষ পর্যন্ত আপনার উত্তর খুঁজে না পাওয়া পর্যন্ত আমি এই আজেবাজে দিনের বেশিরভাগ সময় আক্ষরিক অর্থে ব্যয় করেছি।
ভায়োলেট জিরাফ

1
@ ভায়োলেট জিরাফ আমি শেয়ারকম্প্যাটটি ব্যবহার করছি না তবে আমার কাজগুলি করছি। আমার সমস্যাটি হ'ল আমি ভুল করে আমার চয়নকারীর উদ্দেশ্যকে পড়ার অনুমতি প্রদান করছিলাম, যখন আমার উদ্দেশ্যটি পড়ার অনুমতি দেওয়ার দরকার হয়েছিল আগে এটি চয়নকারী অভিপ্রায়, পাশাপাশি চয়নকারীকে দেওয়া হয়েছিল। আমি আশা করি যে এটি উপলব্ধি করে। কেবলমাত্র আপনি সঠিক উদ্দেশ্যটি পড়ার অনুমতি দিচ্ছেন তা নিশ্চিত করুন।
রায়ান

23

এই সমাধানটি ওএস ৪.৪ থেকে আমার জন্য কাজ করে। এটিকে সমস্ত ডিভাইসে কাজ করার জন্য আমি পুরানো ডিভাইসগুলির জন্য একটি কাজের সংযোজন করেছি। এটি নিশ্চিত করে যে সর্বদা নিরাপদ সমাধান ব্যবহৃত হয়।

Manifest.xml:

    <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="com.package.name.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
    </provider>

file_paths.xml:

<paths>
    <files-path name="app_directory" path="directory/"/>
</paths>

জাভা:

public static void sendFile(Context context) {
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("text/plain");
    String dirpath = context.getFilesDir() + File.separator + "directory";
    File file = new File(dirpath + File.separator + "file.txt");
    Uri uri = FileProvider.getUriForFile(context, "com.package.name.fileprovider", file);
    intent.putExtra(Intent.EXTRA_STREAM, uri);
    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    // Workaround for Android bug.
    // grantUriPermission also needed for KITKAT,
    // see https://code.google.com/p/android/issues/detail?id=76683
    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
        List<ResolveInfo> resInfoList = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
        for (ResolveInfo resolveInfo : resInfoList) {
            String packageName = resolveInfo.activityInfo.packageName;
            context.grantUriPermission(packageName, attachmentUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
        }
    }
    if (intent.resolveActivity(context.getPackageManager()) != null) {
        context.startActivity(intent);
    }
}

public static void revokeFileReadPermission(Context context) {
    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
        String dirpath = context.getFilesDir() + File.separator + "directory";
        File file = new File(dirpath + File.separator + "file.txt");
        Uri uri = FileProvider.getUriForFile(context, "com.package.name.fileprovider", file);
        context.revokeUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
    }
}

অনুমতিটি ফ্র্যাগমেন্ট বা ক্রিয়াকলাপের onResume এবং onDestroy () পদ্ধতিগুলিতে RevokeFileReadPermission () দিয়ে বাতিল করা হয়।


1
এই সমাধানটি আমার পক্ষে কাজ করেছে তবে আমি ইন্টেন্ট.সেটডেটাএন্ডটাইপ যুক্ত করার পরেই (ইউআরআই, "ভিডিও / *");
বিটিডাব্লু অনুচ্ছেদে

আপনি কি এটি বলতে যে, fileথেকে পরিবর্তন করবে না onResumeকরার onDestroy?
কুলমাইন্ড

16

ফিল যেহেতু মূল প্রশ্নের বিষয়ে তার মন্তব্যে বলেছে, এটি অনন্য এবং গুগলে এসও সম্পর্কিত কোনও তথ্য নেই, তাই আমি ভেবেছিলাম আমার ফলাফলগুলিও ভাগ করে নেওয়া উচিত:

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

    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="com.my.apps.package.files"
        android:exported="false"
        android:grantUriPermissions="true" >
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/my_paths" />
    </provider>

My_paths.xML এ আমার আছে:

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <files-path name="files" path="." />
</paths>

আমার কোডে আমার রয়েছে:

    Intent shareIntent = new Intent();
    shareIntent.setAction(Intent.ACTION_SEND);
    shareIntent.setType("application/xml");

    Uri uri = FileProvider.getUriForFile(this, "com.my.apps.package.files", fileToShare);
    shareIntent.putExtra(Intent.EXTRA_STREAM, uri);

    startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.share_file)));

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


9
দুঃখের বিষয় এই কাজ করে না। সেই পরিবর্তনশীল ফাইলটিশেয়ারটি কেবল তখনই কাজ করে যদি ফাইলটি কোনও এসডিকার্ড বা বাহ্যিক ফাইল সিস্টেমে উপস্থিত থাকে। ফাইলপ্রোভিডার ব্যবহারের বিষয়টি এমন যে আপনি অভ্যন্তরীণ সিস্টেম থেকে সামগ্রী ভাগ করতে পারেন।
কেইথ কনোলি

এটি স্থানীয় স্টোরেজ ফাইলগুলির সাথে (অ্যান্ড্রয়েড 5+ এ) সঠিকভাবে কাজ করছে বলে মনে হচ্ছে না। কিন্তু আমি অ্যান্ড্রয়েড 4. উপর বিষয় পেতে
Peterdk

15

যতদূর আমি এটি বলতে পারি এটি কেবলমাত্র অ্যান্ড্রয়েডের নতুন সংস্করণগুলিতে কাজ করবে, সুতরাং এটি করার জন্য আপনাকে সম্ভবত অন্যরকম উপায় বের করতে হবে। এই সমাধানটি আমার জন্য 4.4-তে কাজ করে তবে 4.0 বা 2.3.3-এ নয়, সুতরাং কোনও অ্যাপ্লিকেশনটির জন্য সামগ্রী ভাগ করে নেওয়া কোনও কার্যকর উপায় হবে না যা কোনও অ্যান্ড্রয়েড ডিভাইসে চালিত করতে বোঝায়।

ম্যানিফেস্ট.এক্সএমএল:

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="com.mydomain.myapp.SharingActivity"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

আপনি কীভাবে কর্তৃপক্ষকে নির্দিষ্ট করেন সে সম্পর্কে সতর্কতার সাথে লক্ষ্য করুন। আপনাকে অবশ্যই সেই ক্রিয়াকলাপটি নির্দিষ্ট করতে হবে যা থেকে আপনি ইউআরআই তৈরি করবেন এবং ভাগের উদ্দেশ্যটি চালু করবেন, এক্ষেত্রে ক্রিয়াকলাপটিকে বলা হয় শেয়ারিংএকটিভিটি। গুগলের ডক্স থেকে এই প্রয়োজনীয়তা সুস্পষ্ট নয়!

file_paths.xml:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <files-path name="just_a_name" path=""/>
</paths>

আপনি কীভাবে পথটি নির্দিষ্ট করেন সে বিষয়ে সতর্ক হন। উপরের ডিফল্ট আপনার ব্যক্তিগত অভ্যন্তরীণ সঞ্চয়স্থানের মূল থেকে।

শেয়ারিংএকটিভিটি.জভাতে:

Uri contentUri = FileProvider.getUriForFile(getActivity(),
"com.mydomain.myapp.SharingActivity", myFile);
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.setType("image/jpeg");
shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(shareIntent, "Share with"));

এই উদাহরণে আমরা একটি জেপিইজি চিত্র ভাগ করছি।

অবশেষে নিজেকে আশ্বস্ত করা সম্ভবত একটি ভাল ধারণা যে আপনি ফাইলটি সঠিকভাবে সংরক্ষণ করেছেন এবং আপনি এটির মতো কিছু দিয়ে এটি অ্যাক্সেস করতে পারেন:

File myFile = getActivity().getFileStreamPath("mySavedImage.jpeg");
if(myFile != null){
    Log.d(TAG, "File found, file description: "+myFile.toString());
}else{
    Log.w(TAG, "File not found!");
}

8

আমার অ্যাপ্লিকেশনটিতে ফাইলপ্রোভাইডার ঠিকঠাক কাজ করে, এবং আমি জিমেইল, ইয়াহু ইত্যাদি ক্লায়েন্টদের ইমেল করতে ফাইল ডিরেক্টরিতে সঞ্চিত অভ্যন্তরীণ ফাইলগুলি সংযুক্ত করতে সক্ষম হয়েছি am

আমি প্রকাশিত অ্যান্ড্রয়েড ডকুমেন্টেশনে উল্লিখিত হিসাবে আমার প্রকাশ্যে:

<provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="com.package.name.fileprovider"
        android:grantUriPermissions="true"
        android:exported="false">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/filepaths" />
    </provider>

এবং আমার ফাইলগুলি মূল ফাইল ডিরেক্টরিতে সঞ্চিত থাকায় ফাইলপথ.এক্সএমএল নিম্নরূপ ছিল:

 <paths>
<files-path path="." name="name" />

এখন কোডে:

 File file=new File(context.getFilesDir(),"test.txt");

 Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE);

 shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
                                     "Test");

 shareIntent.setType("text/plain");

 shareIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
                                 new String[] {"email-address you want to send the file to"});

   Uri uri = FileProvider.getUriForFile(context,"com.package.name.fileprovider",
                                                   file);

                ArrayList<Uri> uris = new ArrayList<Uri>();
                uris.add(uri);

                shareIntent .putParcelableArrayListExtra(Intent.EXTRA_STREAM,
                                                        uris);


                try {
                   context.startActivity(Intent.createChooser(shareIntent , "Email:").addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));                                                      


                }
                catch(ActivityNotFoundException e) {
                    Toast.makeText(context,
                                   "Sorry No email Application was found",
                                   Toast.LENGTH_SHORT).show();
                }
            }

এটি আমার পক্ষে কাজ করেছে। আশা করি এটি :)


1
আপনি রাস্তা পোস্ট করার জন্য সত্যিকারের এমভিপি = "।" আমার জন্য কাজ করেছেন
রোবস্ট্যাকওভারফ্লো 27:25

আমি "কনফিগার করা রুট যা /" একই কোড ব্যবহার করেছি সেগুলি খুঁজে পেতে ব্যর্থ হওয়ার মতো ত্রুটি পেয়ে
যাচ্ছি

5

আপনি যদি ক্যামেরা থেকে কোনও চিত্র পেয়ে থাকেন তবে এই সমাধানগুলির কোনওটিই Android 4.4 এর জন্য কাজ করে না। এই ক্ষেত্রে সংস্করণগুলি পরীক্ষা করা ভাল।

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (intent.resolveActivity(getContext().getPackageManager()) != null) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        uri = Uri.fromFile(file);
    } else {
        uri = FileProvider.getUriForFile(getContext(), getContext().getPackageName() + ".provider", file);
    }
    intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
    startActivityForResult(intent, CAMERA_REQUEST);
}

1

কেবল উপরের উত্তরটি উন্নত করতে: আপনি যদি নালপয়েন্টারেক্স পেয়ে থাকেন:

আপনি প্রসঙ্গ ছাড়াই getapplicationContext () ব্যবহার করতে পারেন

                List<ResolveInfo> resInfoList = getPackageManager().queryIntentActivities(takePictureIntent, PackageManager.MATCH_DEFAULT_ONLY);
                for (ResolveInfo resolveInfo : resInfoList) {
                    String packageName = resolveInfo.activityInfo.packageName;
                    grantUriPermission(packageName, photoURI, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
                }

1

আমি কিছু ভাগ করে কয়েকদিন জন্য আমাদের সাথে অবরুদ্ধ করে করতে চাই: fileprovider কোড হবে পরে না, আবেদন ট্যাগ মধ্যে ঢোকানো। এটি তুচ্ছ হতে পারে তবে এটি কখনই নির্দিষ্ট করা হয়নি এবং আমি ভেবেছিলাম যে আমি কাউকে সাহায্য করতে পারি! (পাইওলো ৯৪-তে আবারও ধন্যবাদ)

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