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

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

আপনার অ্যাপ Android ১১ বা তার পরবর্তী যেকোনও ভার্সনকে টার্গেট করলে এবং অটোমেটিক দেখা যায় এমন অ্যাপ ছাড়া অন্য অ্যাপের সাথে ইন্টার‍্যাক্ট করতে হলে, আপনার অ্যাপের ম্যানিফেস্ট ফাইলে <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> এলিমেন্টের (image/*) mimeType অ্যাট্রিবিউটের সাবটাইপ।
  • <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 অনুমতি প্রয়োজন এমন অ্যাপের জন্য নির্দেশিকা প্রদান করে।