অন্যান্য অ্যাপ থেকে সাধারণ ডেটা পান

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

অন্যান্য অ্যাপের ব্যবহারকারীরা প্রায়শই অ্যান্ড্রয়েড শেয়ারশিট বা ইন্টেন্ট রিজলভারের মাধ্যমে আপনার অ্যাপে ডেটা পাঠায়। যে অ্যাপগুলো আপনার অ্যাপে ডেটা পাঠায়, তাদের অবশ্যই সেই ডেটার জন্য একটি MIME টাইপ সেট করতে হবে। আপনার অ্যাপ নিম্নলিখিত উপায়ে অন্য অ্যাপের পাঠানো ডেটা গ্রহণ করতে পারে:

  • ম্যানিফেস্টে একটি মিলে যাওয়া intent-filter ট্যাগ সহ একটি Activity
  • আপনার অ্যাপ দ্বারা প্রকাশিত শর্টকাটগুলো শেয়ার করা হচ্ছে।

ডিরেক্ট শেয়ার টার্গেট হলো আপনার অ্যাপের মধ্যে থাকা একটি নির্দিষ্ট অ্যাক্টিভিটির ডিপ লিঙ্ক। এগুলি প্রায়শই কোনো ব্যক্তি বা গোষ্ঠীকে নির্দেশ করে এবং অ্যান্ড্রয়েড শেয়ারশিটে সেগুলি দেখানো হয়। উদাহরণস্বরূপ, একটি মেসেজিং অ্যাপ কোনো ব্যক্তির জন্য একটি ডিরেক্ট শেয়ার টার্গেট প্রদান করতে পারে, যা সরাসরি সেই ব্যক্তির সাথে একটি কথোপকথনে ডিপ লিঙ্ক করে। বিস্তারিত নির্দেশাবলীর জন্য ‘প্রোভাইড ডিরেক্ট শেয়ার টার্গেটস’ দেখুন।

MIME প্রকার সমর্থন করুন

আদর্শগতভাবে, একটি অ্যাপকে সর্বাধিক সংখ্যক MIME টাইপ গ্রহণ করতে সক্ষম হতে হবে। উদাহরণস্বরূপ, টেক্সট, ছবি এবং ভিডিও পাঠানোর জন্য ডিজাইন করা একটি মেসেজিং অ্যাপের জন্য text/* , image/* এবং video/* গ্রহণ করা আদর্শগতভাবে সমর্থন করা উচিত। অ্যান্ড্রয়েডে সাধারণ ডেটা পাঠানো এবং গ্রহণ করার জন্য কয়েকটি প্রচলিত MIME টাইপ নিচে দেওয়া হলো।

প্রাপকরা নিবন্ধন করেন প্রেরকরা পাঠায়
text/*
  • text/plain
  • text/rtf
  • text/html
  • text/json
`image/*`
  • image/jpg
  • image/png
  • image/gif
video/*
  • video/mp4
  • video/3gp
সমর্থিত ফাইল এক্সটেনশন application/pdf

MIME মিডিয়া টাইপের IANA অফিসিয়াল রেজিস্ট্রি দেখুন।

শেয়ারের দারুণ লক্ষ্যমাত্রা তৈরি করুন

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

একটি কার্যকলাপের মাধ্যমে ডেটা গ্রহণ করুন

একটি অ্যাক্টিভিটির মাধ্যমে ডেটা গ্রহণ করার জন্য আপনার ম্যানিফেস্ট আপডেট করা, আগত কন্টেন্ট পরিচালনা করা এবং ব্যবহারকারী যেন আপনার অ্যাপটি চিনতে পারে তা নিশ্চিত করতে হয়।

আপনার ম্যানিফেস্ট আপডেট করুন

ইনটেন্ট ফিল্টার সিস্টেমকে জানায় যে একটি অ্যাপ কম্পোনেন্ট কোন কোন ইনটেন্ট গ্রহণ করে। 'অন্যান্য অ্যাপে সাধারণ ডেটা পাঠানো' পাঠে আপনি যেভাবে ACTION_SEND অ্যাকশন সহ একটি ইনটেন্ট তৈরি করেছিলেন, ঠিক একইভাবে এই অ্যাকশন সহ ইনটেন্ট গ্রহণ করার জন্য আপনি ইনটেন্ট ফিল্টার তৈরি করেন। আপনি আপনার ম্যানিফেস্টে <intent-filter> এলিমেন্ট ব্যবহার করে একটি ইনটেন্ট ফিল্টার সংজ্ঞায়িত করেন। উদাহরণস্বরূপ, যদি আপনার অ্যাপ টেক্সট কন্টেন্ট গ্রহণ করতে পারে, তাহলে যেকোনো ধরনের এক বা একাধিক ছবি সহ একটি ম্যানিফেস্ট দেখতে নিম্নলিখিত কোড স্নিপেটের মতো হবে:

<activity android:name=".ui.MyActivity" >
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SEND_MULTIPLE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>
</activity>

যখন অন্য কোনো অ্যাপ একটি ইন্টেন্ট তৈরি করে এবং সেটিকে startActivity() ফাংশনে পাস করে এই জিনিসগুলির কোনোটি শেয়ার করার চেষ্টা করে, তখন আপনার অ্যাপ্লিকেশনটি অ্যান্ড্রয়েড শেয়ারশিট বা ইন্টেন্ট রিজলভারে একটি বিকল্প হিসেবে তালিকাভুক্ত হয়। যদি ব্যবহারকারী আপনার অ্যাপটি নির্বাচন করেন, তবে এটি সংশ্লিষ্ট অ্যাক্টিভিটিটি চালু করে (পূর্ববর্তী উদাহরণে .ui.MyActivity )। এরপর আপনার কোড এবং UI-এর মধ্যে বিষয়বস্তুটি যথাযথভাবে পরিচালনা করার দায়িত্ব আপনার।

আগত বিষয়বস্তু পরিচালনা করুন

একটি Intent দ্বারা প্রেরিত বিষয়বস্তু পরিচালনা করতে, Intent অবজেক্টটি পাওয়ার জন্য getIntent() কল করুন। অবজেক্টটি পেয়ে গেলে, এরপর কী করতে হবে তা নির্ধারণ করার জন্য আপনি এর বিষয়বস্তু পরীক্ষা করতে পারেন। যদি এই অ্যাক্টিভিটিটি সিস্টেমের অন্য কোনো অংশ (যেমন লঞ্চার) থেকে শুরু করা যায়, তবে Intent-টি পরীক্ষা করার সময় এই বিষয়টি বিবেচনায় রাখুন।

আগত ডেটা পরীক্ষা করার জন্য অতিরিক্ত সতর্কতা অবলম্বন করুন, কারণ আপনি জানেন না অন্য কোনো অ্যাপ্লিকেশন আপনাকে কী পাঠাতে পারে। উদাহরণস্বরূপ, ভুল MIME টাইপ সেট করা থাকতে পারে, অথবা পাঠানো ছবিটি অত্যন্ত বড় হতে পারে। এছাড়াও, মূল ("UI") থ্রেডের পরিবর্তে একটি পৃথক থ্রেডে বাইনারি ডেটা প্রসেস করার কথা মনে রাখবেন।

কোটলিন

override fun onCreate(savedInstanceState: Bundle?) {
    ...
    when {
        intent?.action == Intent.ACTION_SEND -> {
            if ("text/plain" == intent.type) {
                handleSendText(intent) // Handle text being sent
            } else if (intent.type?.startsWith("image/") == true) {
                handleSendImage(intent) // Handle single image being sent
            }
        }
        intent?.action == Intent.ACTION_SEND_MULTIPLE
                && intent.type?.startsWith("image/") == true -> {
                handleSendMultipleImages(intent) // Handle multiple images being sent
        }
        else -> {
            // Handle other intents, such as being started from the home screen
        }
    }
    ...
}

private fun handleSendText(intent: Intent) {
    intent.getStringExtra(Intent.EXTRA_TEXT)?.let {
        // Update UI to reflect text being shared
    }
}

private fun handleSendImage(intent: Intent) {
    (intent.getParcelableExtra<Parcelable>(Intent.EXTRA_STREAM) as? Uri)?.let {
        // Update UI to reflect image being shared
    }
}

private fun handleSendMultipleImages(intent: Intent) {
    intent.getParcelableArrayListExtra<Parcelable>(Intent.EXTRA_STREAM)?.let {
        // Update UI to reflect multiple images being shared
    }
}

জাভা

void onCreate (Bundle savedInstanceState) {
    ...
    // Get intent, action and MIME type
    Intent intent = getIntent();
    String action = intent.getAction();
    String type = intent.getType();

    if (Intent.ACTION_SEND.equals(action) && type != null) {
        if ("text/plain".equals(type)) {
            handleSendText(intent); // Handle text being sent
        } else if (type.startsWith("image/")) {
            handleSendImage(intent); // Handle single image being sent
        }
    } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {
        if (type.startsWith("image/")) {
            handleSendMultipleImages(intent); // Handle multiple images being sent
        }
    } else {
        // Handle other intents, such as being started from the home screen
    }
    ...
}

void handleSendText(Intent intent) {
    String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
    if (sharedText != null) {
        // Update UI to reflect text being shared
    }
}

void handleSendImage(Intent intent) {
    Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
    if (imageUri != null) {
        // Update UI to reflect image being shared
    }
}

void handleSendMultipleImages(Intent intent) {
    ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
    if (imageUris != null) {
        // Update UI to reflect multiple images being shared
    }
}

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

স্ক্রিনশট ইউআরএল শেয়ারিং

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

override fun onCreate(savedInstanceState: Bundle?) {
    ...
    when {
        intent?.action == Intent.ACTION_SEND -> {
            if (intent.type?.startsWith("image/") == true) {
                handleSendImage(intent)
            }
         }
    ...
}
private fun handleSendImage(intent: Intent) {
    (intent.getParcelableExtra<Parcelable>(Intent.EXTRA_STREAM) as? Uri)?.let {
     // Handle the EXTRA_TEXT as well
     intent.getCharSequenceExtra(Intent.EXTRA_TEXT)
    // Update UI to reflect image being shared and the EXTRA_TEXT
    // if available
    }
}
...
}

ব্যবহারকারীরা যেন আপনার অ্যাপটি চিনতে পারে তা নিশ্চিত করুন।

অ্যান্ড্রয়েড শেয়ারশিট এবং ইন্টেন্ট রিজলভারে আপনার অ্যাপটি তার আইকনলেবেলের মাধ্যমে উপস্থাপিত হয়। এই দুটিই ম্যানিফেস্টে সংজ্ঞায়িত করা থাকে। আরও প্রাসঙ্গিক তথ্য প্রদানের জন্য আপনি অ্যাক্টিভিটি বা ইন্টেন্ট ফিল্টার লেবেল সেট করতে পারেন।

অ্যান্ড্রয়েড ১০ (এপিআই লেভেল ২৯) থেকে, অ্যান্ড্রয়েড শেয়ারশিট শুধুমাত্র আপনার application ট্যাগের ম্যানিফেস্টে সেট করা আইকনগুলো ব্যবহার করে। অ্যান্ড্রয়েড intent-filter এবং activity ট্যাগে সেট করা আইকনগুলোকে উপেক্ষা করে।