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

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

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

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

আপনি যদি নির্দিষ্ট সেই অ্যাপগুলো সম্পর্কে জানেন যেগুলোকে আপনি কোয়েরি করতে বা যেগুলোর সাথে ইন্টারঅ্যাক্ট করতে চান, যেমন—যে অ্যাপগুলো আপনার অ্যাপের সাথে ইন্টিগ্রেট করে অথবা যে অ্যাপগুলোর পরিষেবা আপনি ব্যবহার করেন, তাহলে <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> এলিমেন্টটির কার্যকারিতা, অ্যাপগুলো তাদের নিজস্ব ম্যানিফেস্টে যে </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 পারমিশন প্রয়োজন।