প্যাকেজ দৃশ্যমানতার প্রয়োজন ঘোষণা করুন

আপনি আপনার অ্যাপ তৈরি করার সময়, আপনার অ্যাপের সাথে ইন্টারঅ্যাক্ট করার জন্য ডিভাইসে থাকা অন্যান্য অ্যাপগুলি বিবেচনা করা গুরুত্বপূর্ণ। যদি আপনার অ্যাপটি Android 11 (API লেভেল 30) বা উচ্চতরকে টার্গেট করে, তাহলে সিস্টেমটি কিছু অ্যাপকে আপনার অ্যাপের কাছে স্বয়ংক্রিয়ভাবে দৃশ্যমান করে, কিন্তু এটি ডিফল্টরূপে অন্যান্য অ্যাপগুলিকে ফিল্টার করে দেয়। এই নির্দেশিকাটি বর্ণনা করে যে কীভাবে সেই অন্যান্য অ্যাপগুলিকে আপনার অ্যাপে দৃশ্যমান করা যায়।

যদি আপনার অ্যাপটি Android 11 বা তার উচ্চতর সংস্করণকে লক্ষ্য করে এবং স্বয়ংক্রিয়ভাবে দৃশ্যমান অ্যাপগুলি ছাড়া অন্য অ্যাপগুলির সাথে ইন্টারঅ্যাক্ট করতে হয়, তাহলে আপনার অ্যাপের ম্যানিফেস্ট ফাইলে <queries> উপাদান যোগ করুন। <queries> উপাদানের মধ্যে, প্যাকেজের নাম দ্বারা , অভিপ্রায় স্বাক্ষর দ্বারা বা প্রদানকারী কর্তৃপক্ষ দ্বারা , নিম্নলিখিত বিভাগে বর্ণিত অন্যান্য অ্যাপগুলিকে নির্দিষ্ট করুন৷

নির্দিষ্ট প্যাকেজের নাম

আপনি যদি এমন নির্দিষ্ট অ্যাপগুলি জানেন যেগুলির সাথে আপনি অনুসন্ধান করতে চান বা ইন্টারঅ্যাক্ট করতে চান, যেমন অ্যাপ্লিকেশানগুলি যেগুলি আপনার অ্যাপের সাথে একীভূত হয় বা যে অ্যাপগুলির পরিষেবাগুলি আপনি ব্যবহার করেন, তাদের প্যাকেজের নামগুলি <queries> উপাদানের মধ্যে <package> উপাদানগুলির একটি সেটে অন্তর্ভুক্ত করুন:

<manifest package="com.example.game">
    <queries>
        <package android:name="com.example.store" />
        <package android:name="com.example.services" />
    </queries>
    ...
</manifest>

একটি লাইব্রেরিতে হোস্ট অ্যাপের সাথে যোগাযোগ করুন

আপনি যদি একটি Android লাইব্রেরি তৈরি করেন, তাহলে আপনি আপনার AAR ম্যানিফেস্ট ফাইলে একটি <queries> উপাদান যোগ করে আপনার প্যাকেজ দৃশ্যমানতার চাহিদা ঘোষণা করতে পারেন। এই <queries> উপাদানটির কার্যকারিতা সেই উপাদানটির মতোই রয়েছে যা অ্যাপগুলি তাদের নিজস্ব ম্যানিফেস্টে ঘোষণা করতে পারে।

যদি আপনার লাইব্রেরিতে হোস্ট অ্যাপের সাথে যোগাযোগ জড়িত থাকে, যেমন একটি আবদ্ধ পরিষেবা ব্যবহার করে, তাহলে হোস্ট অ্যাপের প্যাকেজ নাম নির্দিষ্ট করে এমন একটি <package> উপাদান অন্তর্ভুক্ত করুন:

<!-- Place inside the <queries> element. -->
<package android:name=PACKAGE_NAME />

এই ঘোষণাটি অন্তর্ভুক্ত করে, আপনি হোস্ট অ্যাপটি ইনস্টল করা আছে কিনা তা পরীক্ষা করতে পারেন এবং এটির সাথে ইন্টারঅ্যাক্ট করতে পারেন, যেমন bindService() কল করে। কলিং অ্যাপ যেটি আপনার লাইব্রেরি ব্যবহার করে তা এই ইন্টারঅ্যাকশনের ফলে হোস্ট অ্যাপের কাছে স্বয়ংক্রিয়ভাবে দৃশ্যমান হয়

প্যাকেজগুলি যেগুলি একটি অভিপ্রায় ফিল্টার স্বাক্ষরের সাথে মেলে৷

আপনার অ্যাপটিকে একটি নির্দিষ্ট উদ্দেশ্যে কাজ করে এমন অ্যাপগুলির একটি সেটের সাথে অনুসন্ধান বা ইন্টারঅ্যাক্ট করতে হতে পারে, তবে অন্তর্ভুক্ত করার জন্য নির্দিষ্ট প্যাকেজের নামগুলি আপনি হয়তো জানেন না। এই পরিস্থিতিতে, আপনি আপনার <queries> উপাদানে উদ্দেশ্য ফিল্টার স্বাক্ষর তালিকাভুক্ত করতে পারেন। আপনার অ্যাপ তারপরে <intent-filter> উপাদানগুলির সাথে মিলে যাওয়া অ্যাপগুলি আবিষ্কার করতে পারে।

নিম্নলিখিত কোড উদাহরণটি একটি <intent> উপাদান দেখায় যা অ্যাপটিকে অন্য ইনস্টল করা অ্যাপগুলি দেখতে দেয় যা JPEG ছবি শেয়ারিং সমর্থন করে:

<manifest package="com.example.game">
    <queries>
        <intent>
            <action android:name="android.intent.action.SEND" />
            <data android:mimeType="image/jpeg" />
        </intent>
    </queries>
    ...
</manifest>

<intent> উপাদানটির কয়েকটি সীমাবদ্ধতা রয়েছে:

  • আপনাকে অবশ্যই একটি <action> উপাদান অন্তর্ভুক্ত করতে হবে।
  • আপনি একটি <data> উপাদানে path , pathPrefix , pathPattern , বা port বৈশিষ্ট্যগুলি ব্যবহার করতে পারবেন না৷ সিস্টেমটি এমন আচরণ করে যেন আপনি প্রতিটি অ্যাট্রিবিউটের মান জেনেরিক ওয়াইল্ডকার্ড অক্ষর ( * ) এ সেট করেন।
  • আপনি একটি <data> উপাদানের mimeGroup বৈশিষ্ট্য ব্যবহার করতে পারবেন না।
  • একটি একক <intent> উপাদানের <data> উপাদানগুলির মধ্যে, আপনি সর্বাধিক একবারে নিম্নলিখিত প্রতিটি বৈশিষ্ট্য ব্যবহার করতে পারেন:

    • mimeType
    • scheme
    • host

    আপনি একাধিক <data> উপাদান জুড়ে এই বৈশিষ্ট্যগুলি বিতরণ করতে পারেন বা একটি একক <data> উপাদানে ব্যবহার করতে পারেন।

<intent> উপাদানটি কয়েকটি বৈশিষ্ট্যের মান হিসাবে জেনেরিক ওয়াইল্ডকার্ড অক্ষর ( * ) সমর্থন করে:

  • <action> উপাদানটির name বৈশিষ্ট্য।
  • একটি <data> উপাদানের mimeType বৈশিষ্ট্যের সাব-টাইপ ( image/* )।
  • একটি <data> উপাদান ( */* ) এর mimeType বৈশিষ্ট্যের ধরন এবং উপ-প্রকার।
  • একটি <data> উপাদানের scheme বৈশিষ্ট্য।
  • একটি <data> উপাদানের host বৈশিষ্ট্য।

পূর্ববর্তী তালিকায় অন্যথায় নির্দিষ্ট করা না থাকলে, সিস্টেমটি পাঠ্য এবং ওয়াইল্ডকার্ড অক্ষরের মিশ্রণ সমর্থন করে না, যেমন prefix*

প্যাকেজ যা একটি নির্দিষ্ট কর্তৃপক্ষ ব্যবহার করে

আপনি যদি কোন বিষয়বস্তু প্রদানকারীকে জিজ্ঞাসা করতে চান কিন্তু নির্দিষ্ট প্যাকেজের নাম জানেন না, তাহলে আপনি একটি <provider> উপাদানে প্রদানকারী কর্তৃপক্ষ ঘোষণা করতে পারেন, যেমনটি নিচের স্নিপেটে দেখানো হয়েছে:

<manifest package="com.example.suite.enterprise">
    <queries>
        <provider android:authorities="com.example.settings.files" />
    </queries>
    ...
</manifest>

আপনি একটি একক <queries> উপাদানে প্রদানকারী কর্তৃপক্ষ ঘোষণা করতে পারেন। <queries> উপাদানের মধ্যে, আপনি এক বা একাধিক <provider> উপাদান ঘোষণা করতে পারেন। একটি <provider> উপাদান একটি একক প্রদানকারী কর্তৃপক্ষ বা প্রদানকারী কর্তৃপক্ষের একটি সেমিকোলন-ডিলিমিটেড তালিকা অন্তর্ভুক্ত করতে পারে।

সমস্ত অ্যাপ (প্রস্তাবিত নয়)

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

ব্যবহারের ক্ষেত্রে কিছু উদাহরণ যেখানে QUERY_ALL_PACKAGES অনুমতি অন্তর্ভুক্ত করা উপযুক্ত:

  • অ্যাক্সেসিবিলিটি অ্যাপ
  • ব্রাউজার
  • ডিভাইস ম্যানেজমেন্ট অ্যাপ
  • নিরাপত্তা অ্যাপ্লিকেশন
  • অ্যান্টিভাইরাস অ্যাপস

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

Google Play থেকে এই নীতির আপডেটটি এমন অ্যাপগুলির জন্য নির্দেশিকা প্রদান করে যেগুলির জন্য QUERY_ALL_PACKAGES অনুমতি প্রয়োজন৷