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

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

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

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

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

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

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

যদি আপনি একটি অ্যান্ড্রয়েড লাইব্রেরি তৈরি করেন, তাহলে আপনার 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 অনুমতি অন্তর্ভুক্ত করার জন্য উপযুক্ত এমন কিছু ব্যবহারের উদাহরণ হল:

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

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

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