কম্পিউটার

নতুনদের জন্য ব্রডকাস্ট রিসিভার

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

ব্যাকগ্রাউন্ড

ব্রডকাস্ট রিসিভার হল আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনের উপাদান যা বিভিন্ন আউটলেট থেকে সম্প্রচার বার্তা (বা ইভেন্ট) শোনে:

  • অন্যান্য অ্যাপ্লিকেশন থেকে
  • সিস্টেম থেকেই
  • আপনার আবেদন থেকে

অর্থ, যখন একটি নির্দিষ্ট ক্রিয়া ঘটে তখন তাদের আহ্বান করা হয় যে তারা শোনার জন্য প্রোগ্রাম করা হয়েছে (অর্থাৎ, একটি সম্প্রচার)।

একটি সম্প্রচার হল একটি উদ্দেশ্য বস্তুর ভিতরে মোড়ানো একটি বার্তা। একটি সম্প্রচার হয় অন্তর্নিহিত বা স্পষ্ট হতে পারে।

  • একটি অন্তর্নিহিত সম্প্রচার এটি এমন একটি যা আপনার অ্যাপ্লিকেশনটিকে বিশেষভাবে লক্ষ্য করে না তাই এটি আপনার অ্যাপ্লিকেশনের জন্য একচেটিয়া নয়। একটির জন্য নিবন্ধন করতে, আপনাকে একটি IntentFilter ব্যবহার করতে হবে এবং এটি আপনার ম্যানিফেস্টে ঘোষণা করতে হবে৷ আপনাকে এই সব করতে হবে কারণ অ্যান্ড্রয়েড অপারেটিং সিস্টেম আপনার ম্যানিফেস্টের সমস্ত ঘোষিত অভিপ্রায় ফিল্টারগুলির উপর যায় এবং একটি মিল আছে কিনা তা দেখে৷ এই আচরণের কারণে, অন্তর্নিহিত সম্প্রচারের একটি লক্ষ্য বৈশিষ্ট্য নেই। একটি অন্তর্নিহিত সম্প্রচারের একটি উদাহরণ একটি ইনকামিং SMS বার্তার একটি ক্রিয়া হবে৷
  • একটি স্পষ্ট সম্প্রচার এমন একটি যা আগে থেকে পরিচিত একটি উপাদানে আপনার অ্যাপ্লিকেশনের জন্য বিশেষভাবে লক্ষ্য করা হয়। এটি এমন টার্গেট অ্যাট্রিবিউটের কারণে ঘটে যা অ্যাপ্লিকেশনটির প্যাকেজ নাম বা একটি উপাদান শ্রেণীর নাম ধারণ করে।

রিসিভার ঘোষণা করার দুটি উপায় আছে:

  1. আপনার AndroidManifest.xml ফাইলে <রিসিভার> ট্যাগ (এটিকে স্ট্যাটিকও বলা হয়) সহ একটি ঘোষণা করে
<receiver android:name=".YourBrodcastReceiverClass"  android:exported="true">
    <intent-filter>
        <!-- The actions you wish to listen to, below is an example -->
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>
AndroidManifest.xml

আপনি লক্ষ্য করবেন যে উপরে ঘোষিত ব্রডকাস্ট রিসিভারটিতে exported="true" এর একটি সম্পত্তি রয়েছে . এই বৈশিষ্ট্যটি রিসিভারকে বলে যে এটি অ্যাপ্লিকেশনের সুযোগের বাইরে থেকে সম্প্রচার গ্রহণ করতে পারে৷

2. অথবা গতিশীলভাবে রেজিস্টার রিসিভারের সাথে একটি উদাহরণ নিবন্ধন করে (যা প্রসঙ্গ নিবন্ধিত হিসাবে পরিচিত)

public abstract Intent registerReceiver (BroadcastReceiver receiver, 
                IntentFilter filter);

বাস্তবায়ন

আপনার নিজস্ব ব্রডকাস্ট রিসিভার তৈরি করতে, আপনাকে প্রথমে ব্রডকাস্ট রিসিভার প্যারেন্ট ক্লাস প্রসারিত করতে হবে এবং বাধ্যতামূলক পদ্ধতি ওভাররাইড করতে হবে, onReceive:

public void onReceive(Context context, Intent intent) {
    //Implement your logic here
 }

সব একসাথে রাখলে ফল পাওয়া যায়:

public class MyBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        StringBuilder sb = new StringBuilder();
        sb.append("Action: " + intent.getAction() + "\n");
        sb.append("URI: " + intent.toUri(Intent.URI_INTENT_SCHEME).toString() + "\n");
        String log = sb.toString();
        Toast.makeText(context, log, Toast.LENGTH_LONG).show();

    }
}
MyBroadcastReceiver.java
⚠️অনরিসিভ পদ্ধতিটি মূল থ্রেডে চলে, এবং এই কারণে, এটির সম্পাদন সংক্ষিপ্ত হওয়া উচিত।

একটি দীর্ঘ প্রক্রিয়া সম্পাদিত হলে, পদ্ধতিটি ফিরে আসার পরে সিস্টেমটি প্রক্রিয়াটিকে মেরে ফেলতে পারে। এটি এড়াতে, goAsync ব্যবহার বা একটি কাজের সময় নির্ধারণের কথা বিবেচনা করুন। আপনি এই নিবন্ধের নীচে একটি কাজের সময় নির্ধারণ সম্পর্কে আরও পড়তে পারেন৷

ডাইনামিক রেজিস্ট্রেশন উদাহরণ

একটি প্রসঙ্গ সহ একটি রিসিভার নিবন্ধন করার জন্য, আপনাকে প্রথমে আপনার সম্প্রচার রিসিভারের একটি উদাহরণ দিতে হবে:

BroadcastReceiver myBroadcastReceiver = new MyBroadcastReceiver();

তারপর, আপনি যে নির্দিষ্ট প্রসঙ্গে চান তার উপর নির্ভর করে আপনি এটি নিবন্ধন করতে পারেন:

IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
this.registerReceiver(myBroadcastReceiver, filter);
ইন্টেন্টফিল্টারের জন্য প্রথম প্যারামিটার হল একটি স্ট্রিং যা একটি ক্রিয়াকে প্রতিনিধিত্ব করে

যখন আপনার আর প্রয়োজন হবে না তখন আপনার ব্রডকাস্ট রিসিভার আনরেজিস্টার করতে ভুলবেন না

@Override
protected void onStop() {
  super.onStop();
  unregisterReceiver(myBroadcastReceiver);
}

একটি ইভেন্ট সম্প্রচার করা হচ্ছে

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

সম্প্রচার পাঠানোর তিনটি উপায় আছে:

  1. sendOrderedBroadcast পদ্ধতি, একবারে শুধুমাত্র একটি রিসিভারকে সম্প্রচার পাঠানো নিশ্চিত করে। প্রতিটি সম্প্রচার পালাক্রমে, এটি অনুসরণকারীর কাছে ডেটা প্রেরণ করতে পারে বা অনুসরণকারী রিসিভারদের কাছে সম্প্রচারের প্রচার বন্ধ করতে পারে
  2. SendBroadcast একটি পার্থক্য সহ উপরে উল্লিখিত পদ্ধতির অনুরূপ। সমস্ত সম্প্রচার গ্রহণকারী বার্তা গ্রহণ করে এবং একে অপরের উপর নির্ভর করে না
  3. The LocalBroadcastManager.sendBroadcast পদ্ধতিটি শুধুমাত্র আপনার অ্যাপ্লিকেশনের মধ্যে সংজ্ঞায়িত রিসিভারদের কাছে সম্প্রচার পাঠায় এবং আপনার আবেদনের পরিধি অতিক্রম করে না। একটি কাস্টম সম্প্রচার পাঠানোর উদাহরণ

https://giphy.com/gifs/23gUJhHyWkXEwl7UYV/html5

নতুনদের জন্য ব্রডকাস্ট রিসিভার
আনস্প্ল্যাশে জন গিবন্সের ছবি

গোটচাস এবং জিনিসগুলিতে মনোযোগ দিতে হবে

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

নিম্নলিখিত বুলেট পয়েন্টগুলি প্রতিটি Android OS সংস্করণের জন্য প্রাসঙ্গিক ব্রডকাস্ট রিসিভারের পরিবর্তনগুলিকে নির্দেশ করে (7.0 থেকে শুরু করে)৷ প্রতিটি সংস্করণের জন্য, নির্দিষ্ট সীমাবদ্ধতা স্থান নিয়েছে এবং আচরণও পরিবর্তিত হয়েছে। একটি ব্রডকাস্ট রিসিভার ব্যবহার করার বিষয়ে চিন্তা করার সময় এই সীমাবদ্ধতাগুলি মনে রাখুন৷

  • 7.0 এবং উপরে (API স্তর 24) - দুটি সিস্টেম সম্প্রচার নিষ্ক্রিয় করা হয়েছে, Action_New_Picture এবং Action_New_Video (কিন্তু নিবন্ধিত রিসিভারদের জন্য সেগুলিকে Android O তে ফিরিয়ে আনা হয়েছে)
  • 8.0 এবং আপ (API লেভেল 26) - বেশিরভাগ অন্তর্নিহিত সম্প্রচারগুলিকে গতিশীলভাবে নিবন্ধিত করতে হবে এবং স্থিরভাবে নয় (আপনার ম্যানিফেস্টে)। আপনি এই লিঙ্কে সাদা তালিকাভুক্ত সম্প্রচারগুলি খুঁজে পেতে পারেন৷
  • 9.0 এবং উপরে (API স্তর 28) - Wi-Fi সিস্টেম সম্প্রচার এবং Network_State_Changed_Action এ কম তথ্য পাওয়া গেছে।

অ্যান্ড্রয়েড ও-এর পরিবর্তনগুলি আপনার সবচেয়ে বেশি সচেতন হওয়া দরকার৷ এই পরিবর্তনগুলি করার কারণ হল এটি কর্মক্ষমতা সমস্যা, ব্যাটারি হ্রাস এবং ব্যবহারকারীর অভিজ্ঞতাকে ক্ষতিগ্রস্ত করে। এটি ঘটেছে কারণ অনেক অ্যাপ্লিকেশন (এমনকি যেগুলি বর্তমানে চলছে না) একটি সিস্টেমের ব্যাপক পরিবর্তনের কথা শুনছিল এবং যখন সেই পরিবর্তনটি ঘটেছিল, তখন বিশৃঙ্খলা দেখা দেয়। কল্পনা করুন যে অ্যাকশনে নিবন্ধিত প্রতিটি অ্যাপ্লিকেশন, সম্প্রচারের কারণে কিছু করার প্রয়োজন আছে কিনা তা পরীক্ষা করতে প্রাণে এসেছে। Wi-Fi অবস্থার মতো কিছু বিবেচনা করুন, যা ঘন ঘন পরিবর্তিত হয় এবং আপনি বুঝতে শুরু করবেন কেন এই পরিবর্তনগুলি ঘটেছে৷

ব্রডকাস্ট রিসিভারের বিকল্প

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

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

আপনি যদি ব্রডকাস্ট রিসিভারের আনন্দ এবং আশ্চর্য প্রথম হাত পেতে চান, আপনি আমার সেট আপ করা সংগ্রহস্থলগুলির এই লিঙ্কগুলি অনুসরণ করতে পারেন:

  1. কাস্টম ব্রডকাস্ট (মেনিফেস্ট ঘোষণা সহ)
  2. সম্প্রচার নিবন্ধন করা (মেনিফেস্টে একটি ঘোষণা না করে)
  3. স্থানীয় ব্রডকাস্ট ম্যানেজার

সম্প্রচার ওভার।


  1. নতুনদের জন্য সবচেয়ে সহজ রাস্পবেরি পাই প্রকল্প

  2. নতুনদের জন্য মাইক্রোসফ্ট এক্সেল টিউটোরিয়াল

  3. শিশুদের জন্য মাইক্রোসফ্ট পাওয়ারপয়েন্ট টিউটোরিয়াল

  4. নতুনদের জন্য 10টি ম্যাকবুক প্রো টিপস