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

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

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

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

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

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

আদর্শভাবে, একটি অ্যাপ অবশ্যই MIME প্রকারের সর্বাধিক সম্ভাব্য পরিসর গ্রহণ করতে সক্ষম হবে। উদাহরণস্বরূপ, টেক্সট, ছবি এবং ভিডিও পাঠানোর জন্য ডিজাইন করা একটি মেসেজিং অ্যাপ আদর্শভাবে text/* , image/* এবং video/* গ্রহণ করা সমর্থন করে। Android-এ সাধারণ ডেটা পাঠানো এবং গ্রহণ করার জন্য এখানে কয়েকটি সাধারণ 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() এ পাস করার মাধ্যমে এই জিনিসগুলির মধ্যে যেকোনো একটি ভাগ করার চেষ্টা করে, তখন আপনার অ্যাপ্লিকেশনটি Android Sharesheet বা অভিপ্রায় সমাধানকারীতে একটি বিকল্প হিসাবে তালিকাভুক্ত হয়৷ ব্যবহারকারী আপনার অ্যাপ নির্বাচন করলে, এটি সংশ্লিষ্ট কার্যকলাপ শুরু করে ( পূর্ববর্তী উদাহরণে .ui.MyActivity )। আপনার কোড এবং UI এর মধ্যে উপযুক্তভাবে বিষয়বস্তু পরিচালনা করা আপনার উপর নির্ভর করে।

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

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

আগত ডেটা পরীক্ষা করার জন্য অতিরিক্ত যত্ন নিন, আপনি কখনই জানেন না যে অন্য কোনও অ্যাপ্লিকেশন আপনাকে কী পাঠাতে পারে। উদাহরণস্বরূপ, ভুল 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 পপুলেট করার মতোই সহজ হতে পারে, বা এটি একটি ছবিতে একটি আকর্ষণীয় ফটো ফিল্টার প্রয়োগ করার মতো আরও জটিল হতে পারে৷ পরবর্তী কি হবে তা আপনার অ্যাপের উপর নির্ভর করে।

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

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

Android 10 (API স্তর 29) অনুসারে, Android শেয়ারশীট শুধুমাত্র আপনার application ট্যাগে ম্যানিফেস্টে সেট করা আইকন ব্যবহার করে। অ্যান্ড্রয়েড intent-filter এবং activity ট্যাগগুলিতে সেট করা আইকনগুলিকে উপেক্ষা করে৷