সীমিত প্যাকেজ দৃশ্যমানতা থাকাকালীন সাধারণ ব্যবহারের ক্ষেত্রে পূরণ করুন

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

যখন অ্যান্ড্রয়েড ১১ বা তার উচ্চতর সংস্করণের কোনো অ্যাপ অন্য কোনো অ্যাপের অ্যাক্টিভিটি শুরু করার জন্য ইন্টেন্ট ব্যবহার করে, তখন সবচেয়ে সহজ উপায় হলো ইন্টেন্টটি কল করা এবং কোনো অ্যাপ উপলব্ধ না থাকলে ActivityNotFoundException এক্সেপশনটি হ্যান্ডেল করা।

আপনার অ্যাপের কোনো অংশ যদি startActivity() কলটি সফল হবে কি না তা জানার উপর নির্ভর করে, যেমন একটি UI দেখানো, তাহলে আপনার অ্যাপের ম্যানিফেস্টের <queries> এলিমেন্টে একটি <intent> এলিমেন্ট যোগ করুন। সাধারণত, এটি একটি <intent> এলিমেন্ট হয়ে থাকে।

ওপেন ইউআরএল

এই অংশে অ্যান্ড্রয়েড ১১ বা তার উচ্চতর সংস্করণের অ্যাপে ইউআরএল খোলার বিভিন্ন উপায় বর্ণনা করা হয়েছে।

ব্রাউজার বা অন্য অ্যাপে URL খুলুন

একটি URL খুলতে, ওয়েব URL লোড করার নির্দেশিকায় বর্ণিত ACTION_VIEW ইন্টেন্ট অ্যাকশন সম্বলিত একটি ইন্টেন্ট ব্যবহার করুন। এই ইন্টেন্টটি ব্যবহার করে startActivity() কল করার পর, নিম্নলিখিত ঘটনাগুলোর মধ্যে একটি ঘটে:

  • ইউআরএলটি একটি ওয়েব ব্রাউজার অ্যাপে খোলে।
  • ইউআরএলটি এমন একটি অ্যাপে খোলে যা ইউআরএলটিকে ডিপ লিঙ্ক হিসেবে সমর্থন করে।
  • একটি দ্ব্যর্থতা নিরসন ডায়ালগ বক্স প্রদর্শিত হয়, যা ব্যবহারকারীকে ইউআরএলটি কোন অ্যাপে খুলবে তা বেছে নেওয়ার সুযোগ দেয়।
  • একটি ActivityNotFoundException ঘটে কারণ ডিভাইসে এমন কোনো অ্যাপ ইনস্টল করা নেই যা URL-টি খুলতে পারে। (এটি একটি অস্বাভাবিক ঘটনা।)

    ActivityNotFoundException ঘটলে আপনার অ্যাপ যেন তা ক্যাচ ও হ্যান্ডেল করে, সে জন্য পরামর্শ দেওয়া হচ্ছে।

যেহেতু startActivity() মেথডটি অন্য কোনো অ্যাপ্লিকেশনের অ্যাক্টিভিটি শুরু করার জন্য প্যাকেজ ভিজিবিলিটির প্রয়োজন হয় না, তাই আপনার অ্যাপের ম্যানিফেস্টে একটি <queries> এলিমেন্ট যোগ করার বা বিদ্যমান কোনো <queries> এলিমেন্টে কোনো পরিবর্তন করার প্রয়োজন নেই। এটি URL খোলার ইমপ্লিসিট এবং এক্সপ্লিসিট উভয় ধরনের ইনটেন্টের ক্ষেত্রেই প্রযোজ্য।

ব্রাউজার উপলব্ধ আছে কিনা তা পরীক্ষা করুন

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

<!-- Place inside the <queries> element. -->
<intent>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="https" />
</intent>

যখন আপনি queryIntentActivities() কল করেন এবং আর্গুমেন্ট হিসেবে একটি ওয়েব ইন্টেন্ট পাস করেন, তখন ফেরত আসা তালিকায় কিছু ক্ষেত্রে উপলব্ধ ব্রাউজার অ্যাপগুলোও অন্তর্ভুক্ত থাকে। যদি ব্যবহারকারী ডিফল্টরূপে URL-টি কোনো নন-ব্রাউজার অ্যাপে খোলার জন্য কনফিগার করে থাকেন, তাহলে তালিকায় ব্রাউজার অ্যাপগুলো অন্তর্ভুক্ত থাকে না।

কাস্টম ট্যাবে ইউআরএল খুলুন

কাস্টম ট্যাব একটি অ্যাপকে ব্রাউজারের চেহারা ও অনুভূতি কাস্টমাইজ করার সুযোগ দেয়। আপনি আপনার অ্যাপ ম্যানিফেস্টে <queries> এলিমেন্টটি যোগ বা পরিবর্তন না করেই একটি কাস্টম ট্যাবে যেকোনো URL খুলতে পারেন।

তবে, আপনি হয়তো যাচাই করে দেখতে চাইতে পারেন যে ডিভাইসটিতে কাস্টম ট্যাব সমর্থনকারী কোনো ব্রাউজার আছে কিনা , অথবা CustomTabsClient.getPackageName() ব্যবহার করে কাস্টম ট্যাবের সাথে চালু করার জন্য একটি নির্দিষ্ট ব্রাউজার নির্বাচন করতে চাইতে পারেন। সেইসব ক্ষেত্রে, আপনার ম্যানিফেস্টের <queries> এলিমেন্টের অংশ হিসেবে নিম্নলিখিত <intent> এলিমেন্টটি অন্তর্ভুক্ত করুন:

<!-- Place inside the <queries> element. -->
<intent>
  <action android:name="android.support.customtabs.action.CustomTabsService" />
</intent>

নন-ব্রাউজার অ্যাপগুলোকে ইউআরএল পরিচালনা করতে দিন

আপনার অ্যাপ কাস্টম ট্যাব ব্যবহার করে ইউআরএল খুলতে পারলেও, সম্ভব হলে একটি নন-ব্রাউজার অ্যাপকে ইউআরএল খোলার সুযোগ দেওয়ার পরামর্শ দেওয়া হয়। আপনার অ্যাপে এই সক্ষমতা যোগ করতে, FLAG_ACTIVITY_REQUIRE_NON_BROWSER ইন্টেন্ট ফ্ল্যাগটি সেট করে এমন একটি ইন্টেন্ট ব্যবহার করে startActivity() কল করার চেষ্টা করুন। যদি সিস্টেম একটি ActivityNotFoundException থ্রো করে, তাহলে আপনার অ্যাপ কাস্টম ট্যাবে ইউআরএলটি খুলতে পারবে।

যদি কোনো ইন্টেন্টে এই ফ্ল্যাগটি অন্তর্ভুক্ত থাকে, তাহলে নিম্নলিখিত শর্তগুলির মধ্যে যেকোনো একটি ঘটলে startActivity() কল করার ফলে একটি ActivityNotFoundException থ্রো হয়:

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

নিম্নলিখিত কোড স্নিপেটটি দেখায় কিভাবে FLAG_ACTIVITY_REQUIRE_NON_BROWSER ইন্টেন্ট ফ্ল্যাগটি ব্যবহার করার জন্য আপনার লজিক আপডেট করতে হবে:

কোটলিন

try {
    val intent = Intent(ACTION_VIEW, Uri.parse(url)).apply {
        // The URL should either launch directly in a non-browser app (if it's
        // the default) or in the disambiguation dialog.
        addCategory(CATEGORY_BROWSABLE)
        flags = FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_REQUIRE_NON_BROWSER
    }
    startActivity(intent)
} catch (e: ActivityNotFoundException) {
    // Only browser apps are available, or a browser is the default.
    // So you can open the URL directly in your app, for example in a
    // Custom Tab.
    openInCustomTabs(url)
}

জাভা

try {
    Intent intent = new Intent(ACTION_VIEW, Uri.parse(url));
    // The URL should either launch directly in a non-browser app (if it's the
    // default) or in the disambiguation dialog.
    intent.addCategory(CATEGORY_BROWSABLE);
    intent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_REQUIRE_NON_BROWSER);
    startActivity(intent);
} catch (ActivityNotFoundException e) {
    // Only browser apps are available, or a browser is the default.
    // So you can open the URL directly in your app, for example in a
    // Custom Tab.
    openInCustomTabs(url);
}

দ্ব্যর্থতা নিরসন সংলাপ এড়িয়ে চলুন

যদি আপনি কোনো URL খোলার সময় ব্যবহারকারীদের দেখা যেতে পারে এমন দ্ব্যর্থতা নিরসন ডায়ালগটি দেখানো এড়াতে চান এবং এর পরিবর্তে এই পরিস্থিতিতে URL-টি নিজে পরিচালনা করতে পছন্দ করেন, তাহলে আপনি FLAG_ACTIVITY_REQUIRE_DEFAULT ইন্টেন্ট ফ্ল্যাগটি সেট করে এমন একটি ইন্টেন্ট ব্যবহার করতে পারেন।

যদি কোনো ইন্টেন্টে এই ফ্ল্যাগটি অন্তর্ভুক্ত থাকে, তাহলে startActivity() কল করলে একটি ActivityNotFoundException থ্রো হয়, যখন সেই কলটির মাধ্যমে ব্যবহারকারীকে একটি দ্ব্যর্থতা নিরসন ডায়ালগ দেখানোর কথা ছিল।

যদি কোনো ইন্টেন্টে এই ফ্ল্যাগ এবং FLAG_ACTIVITY_REQUIRE_NON_BROWSER ইন্টেন্ট ফ্ল্যাগ উভয়ই অন্তর্ভুক্ত থাকে, তাহলে নিম্নলিখিত শর্তগুলির মধ্যে যেকোনো একটি ঘটলে startActivity() কল করার ফলে একটি ActivityNotFoundException থ্রো হয়:

  • কলটি সরাসরি ব্রাউজার অ্যাপটি চালু করে দিত।
  • কলটি ব্যবহারকারীকে একটি দ্ব্যর্থতা নিরসনকারী ডায়ালগ দেখাতো।

নিম্নলিখিত কোড স্নিপেটটি দেখায় কিভাবে FLAG_ACTIVITY_REQUIRE_NON_BROWSER এবং FLAG_ACTIVITY_REQUIRE_DEFAULT ফ্ল্যাগগুলি একসাথে ব্যবহার করতে হয়:

কোটলিন

val url = URL_TO_LOAD
try {
    // For this intent to be invoked, the system must directly launch a
    // non-browser app.
    val intent = Intent(ACTION_VIEW, Uri.parse(url)).apply {
        addCategory(CATEGORY_BROWSABLE)
        flags = FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_REQUIRE_NON_BROWSER or
                FLAG_ACTIVITY_REQUIRE_DEFAULT
    }
    startActivity(intent)
} catch (e: ActivityNotFoundException) {
    // This code executes in one of the following cases:
    // 1. Only browser apps can handle the intent.
    // 2. The user has set a browser app as the default app.
    // 3. The user hasn't set any app as the default for handling this URL.
    openInCustomTabs(url)
}

জাভা

String url = URL_TO_LOAD;
try {
    // For this intent to be invoked, the system must directly launch a
    // non-browser app.
    Intent intent = new Intent(ACTION_VIEW, Uri.parse(url));
    intent.addCategory(CATEGORY_BROWSABLE);
    intent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_REQUIRE_NON_BROWSER |
            FLAG_ACTIVITY_REQUIRE_DEFAULT);
    startActivity(intent);
} catch (ActivityNotFoundException e) {
    // This code executes in one of the following cases:
    // 1. Only browser apps can handle the intent.
    // 2. The user has set a browser app as the default app.
    // 3. The user hasn't set any app as the default for handling this URL.
    openInCustomTabs(url);
}

একটি ফাইল খুলুন

যদি আপনার অ্যাপ ফাইল বা অ্যাটাচমেন্ট পরিচালনা করে, যেমন কোনো ডিভাইস একটি নির্দিষ্ট ফাইল খুলতে পারবে কিনা তা পরীক্ষা করা, তাহলে সাধারণত ফাইলটি পরিচালনা করতে পারে এমন একটি অ্যাক্টিভিটি শুরু করার চেষ্টা করাই সবচেয়ে সহজ। এটি করার জন্য, এমন একটি ইন্টেন্ট ব্যবহার করুন যাতে ACTION_VIEW ইন্টেন্ট অ্যাকশন এবং নির্দিষ্ট ফাইলটির URI অন্তর্ভুক্ত থাকে। যদি ডিভাইসে কোনো অ্যাপ উপলব্ধ না থাকে, তাহলে আপনার অ্যাপ ActivityNotFoundException টি ক্যাচ করতে পারে। আপনার এক্সেপশন-হ্যান্ডলিং লজিকে, আপনি হয় একটি এরর দেখাতে পারেন অথবা ফাইলটি নিজে পরিচালনা করার চেষ্টা করতে পারেন।

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

<!-- Place inside the <queries> element. -->
<intent>
  <action android:name="android.intent.action.VIEW" />
  <!-- If you don't know the MIME type in advance, set "mimeType" to "*/*". -->
  <data android:mimeType="application/pdf" />
</intent>

এরপর আপনি আপনার ইন্টেন্ট দিয়ে resolveActivity() কল করে অ্যাপটি উপলব্ধ আছে কিনা তা যাচাই করতে পারেন।

URI অ্যাক্সেস মঞ্জুর করুন

দ্রষ্টব্য: এই বিভাগে বর্ণিত পদ্ধতিতে URI অ্যাক্সেস অনুমতি ঘোষণা করা সেইসব অ্যাপের জন্য আবশ্যক যেগুলো Android 11 (API লেভেল 30) বা তার উচ্চতর সংস্করণকে টার্গেট করে এবং এটি সকল অ্যাপের জন্য সুপারিশকৃত, তাদের টার্গেট SDK সংস্করণ এবং তারা তাদের কন্টেন্ট প্রোভাইডার এক্সপোর্ট করে কি না, তা নির্বিশেষে।

যেসব অ্যাপ অ্যান্ড্রয়েড ১১ বা তার উচ্চতর সংস্করণকে টার্গেট করে কন্টেন্ট ইউআরআই অ্যাক্সেস করতে চায়, তাদের অ্যাপের ইন্টেন্টে অবশ্যই নিম্নলিখিত ইন্টেন্ট ফ্ল্যাগগুলোর এক বা উভয়টি সেট করার মাধ্যমে ইউআরআই অ্যাক্সেসের অনুমতি ঘোষণা করতে হবে: FLAG_GRANT_READ_URI_PERMISSION এবং FLAG_GRANT_WRITE_URI_PERMISSION

অ্যান্ড্রয়েড ১১ এবং এর পরবর্তী সংস্করণগুলোতে, ইউআরআই অ্যাক্সেস পারমিশন ইন্টেন্ট গ্রহণকারী অ্যাপটিকে নিম্নলিখিত ক্ষমতাগুলো প্রদান করে:

  • প্রদত্ত URI অনুমতির উপর নির্ভর করে, কন্টেন্ট URI দ্বারা প্রতিনিধিত্ব করা ডেটা পড়া বা তাতে লেখা সম্ভব।
  • যে অ্যাপটিতে URI অথরিটির সাথে মেলে এমন কন্টেন্ট প্রোভাইডার রয়েছে, সেটির অ্যাক্সেস লাভ করুন। যে অ্যাপটিতে কন্টেন্ট প্রোভাইডার থাকে, সেটি ইন্টেন্ট প্রেরণকারী অ্যাপ থেকে ভিন্ন হতে পারে।

নিম্নলিখিত কোড স্নিপেটটি দেখায় কিভাবে একটি URI পারমিশন ইন্টেন্ট ফ্ল্যাগ যোগ করতে হয়, যাতে Android 11 বা তার উচ্চতর সংস্করণকে টার্গেট করা অন্য কোনো অ্যাপ কন্টেন্ট URI-এর ডেটা দেখতে পারে:

কোটলিন

val shareIntent = Intent(Intent.ACTION_VIEW).apply {
    flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
    data = CONTENT_URI_TO_SHARE_WITH_OTHER_APP
}

জাভা

Intent shareIntent = new Intent(Intent.ACTION_VIEW);
shareIntent.setFlags(FLAG_GRANT_READ_URI_PERMISSION);
shareIntent.setData(CONTENT_URI_TO_SHARE_WITH_OTHER_APP);

পরিষেবাগুলির সাথে সংযোগ করুন

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

একটি টেক্সট-টু-স্পিচ ইঞ্জিনের সাথে সংযোগ করুন

আপনার অ্যাপ যদি কোনো টেক্সট-টু-স্পিচ (TTS) ইঞ্জিনের সাথে ইন্টারঅ্যাক্ট করে, তাহলে আপনার ম্যানিফেস্টের <queries> এলিমেন্টের অংশ হিসেবে নিম্নলিখিত <intent> এলিমেন্টটি অন্তর্ভুক্ত করুন:

<!-- Place inside the <queries> element. -->
<intent>
  <action android:name="android.intent.action.TTS_SERVICE" />
</intent>

স্পিচ রিকগনিশন সার্ভিসের সাথে সংযোগ করুন

আপনার অ্যাপ যদি কোনো স্পিচ রিকগনিশন সার্ভিসের সাথে ইন্টারঅ্যাক্ট করে, তাহলে আপনার ম্যানিফেস্টের <queries> এলিমেন্টের অংশ হিসেবে নিম্নলিখিত <intent> এলিমেন্টটি অন্তর্ভুক্ত করুন:

<!-- Place inside the <queries> element. -->
<intent>
  <action android:name="android.speech.RecognitionService" />
</intent>

মিডিয়া ব্রাউজার পরিষেবাগুলির সাথে সংযোগ করুন

আপনার অ্যাপটি যদি একটি ক্লায়েন্ট মিডিয়া ব্রাউজার অ্যাপ হয়, তাহলে আপনার ম্যানিফেস্টের <queries> এলিমেন্টের অংশ হিসেবে নিম্নলিখিত <intent> এলিমেন্টটি অন্তর্ভুক্ত করুন:

<!-- Place inside the <queries> element. -->
<intent>
  <action android:name="android.media.browse.MediaBrowserService" />
</intent>

কাস্টম কার্যকারিতা প্রদান করুন

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

এসএমএস অ্যাপগুলির জন্য অনুসন্ধান

যদি আপনার অ্যাপের কোনো ডিভাইসে ইনস্টল করা এসএমএস অ্যাপগুলোর সেট সম্পর্কে তথ্যের প্রয়োজন হয়, উদাহরণস্বরূপ, কোন অ্যাপটি ডিভাইসের ডিফল্ট এসএমএস হ্যান্ডলার তা পরীক্ষা করার জন্য, তাহলে আপনার ম্যানিফেস্টের <queries> এলিমেন্টের অংশ হিসেবে নিম্নলিখিত <intent> এলিমেন্টটি অন্তর্ভুক্ত করুন:

<!-- Place inside the <queries> element. -->
<intent>
  <action android:name="android.intent.action.SENDTO"/>
  <data android:scheme="smsto" android:host="*" />
</intent>

একটি কাস্টম শেয়ারশিট তৈরি করুন

যখনই সম্ভব, সিস্টেম-প্রদত্ত শেয়ারশিট ব্যবহার করুন। বিকল্পভাবে, আপনার ম্যানিফেস্টের <queries> এলিমেন্টের অংশ হিসেবে নিম্নলিখিত <intent> এলিমেন্টটি অন্তর্ভুক্ত করুন:

<!-- Place inside the <queries> element. -->
<intent>
  <action android:name="android.intent.action.SEND" />
  <!-- Replace with the MIME type that your app works with, if needed. -->
  <data android:mimeType="image/jpeg" />
</intent>

আপনার অ্যাপের লজিকে শেয়ারশিট তৈরির প্রক্রিয়া, যেমন queryIntentActivities() কল করা, অন্যথায় অ্যান্ড্রয়েড ১১-এর পূর্ববর্তী সংস্করণগুলোর তুলনায় অপরিবর্তিত থাকে।

কাস্টম টেক্সট নির্বাচন ক্রিয়াগুলি দেখান

যখন ব্যবহারকারীরা আপনার অ্যাপে টেক্সট নির্বাচন করেন, তখন একটি টেক্সট সিলেকশন টুলবার নির্বাচিত টেক্সটের উপর সম্পাদনযোগ্য সম্ভাব্য অপারেশনগুলোর একটি তালিকা দেখায়। যদি এই টুলবারটি অন্য অ্যাপের কাস্টম অ্যাকশন দেখায়, তাহলে আপনার ম্যানিফেস্টের <queries> এলিমেন্টের অংশ হিসেবে নিম্নলিখিত <intent> এলিমেন্টটি অন্তর্ভুক্ত করুন:

<!-- Place inside the <queries> element. -->
<intent>
  <action android:name="android.intent.action.PROCESS_TEXT" />
  <data android:mimeType="text/plain" />
</intent>

একজন কন্ট্যাক্টের জন্য কাস্টম ডেটা সারিগুলি দেখান

অ্যাপগুলো কন্ট্যাক্টস প্রোভাইডারে কাস্টম ডেটা সারি যোগ করতে পারে। একটি কন্ট্যাক্টস অ্যাপকে এই কাস্টম ডেটা দেখানোর জন্য, এটিকে নিম্নলিখিত কাজগুলো করতে সক্ষম হতে হবে:

  1. অন্যান্য অ্যাপগুলো থেকে contacts.xml ফাইলটি পড়ুন।
  2. কাস্টম MIME টাইপের সাথে সঙ্গতিপূর্ণ একটি আইকন লোড করুন।

আপনার অ্যাপটি যদি একটি কন্ট্যাক্টস অ্যাপ হয়, তাহলে আপনার ম্যানিফেস্টের <queries> এলিমেন্টের অংশ হিসেবে নিম্নলিখিত <intent> এলিমেন্টগুলো অন্তর্ভুক্ত করুন:

<!-- Place inside the <queries> element. -->
<!-- Lets the app read the contacts.xml file from other apps. -->
<intent>
  <action android:name="android.accounts.AccountAuthenticator" />
</intent>
<!-- Lets the app load an icon corresponding to the custom MIME type. -->
<intent>
  <action android:name="android.intent.action.VIEW" />
  <data android:scheme="content" android:host="com.android.contacts"
        android:mimeType="vnd.android.cursor.item/*" />
</intent>