«

»

Oct 19

Broadcast Receiver

האזנה ל Broadcast Receiver:

 

רקע תאורטי:

 

באנדרואיד אפשר ליצור מחלקה שתאזין לאירועים במכשיר, לדוגמה שינוי במצב החיבור לרשת, חיבור ל bluetooth, קבלת שיחה ועוד.
יש לציין שלמרות שהמחלקה היא חלק מהאפליקציה, היא לא קשורה ל Activity כלשהו באפליקציה ותרוץ גם כאשר האפליקציה לא רצה.

 

דוגמה והסבר:

 

ישנם שתי דרכים לעשות זאת:

 

1. דרך ה Manifest.xml:

    1. הגדרת receiver בקובץ ה Manifest.xml שלנו tag של receiver תחת application:

(החלף את הסוגריים המרובעים [] ב <>)

[receiver android:name="CatchIntentClass"]
      [intent-filter]
        [action android:name="android.net.conn.CONNECTIVITY_CHANGE" /]
      [/intent-filter]
    [/receiver]

    כאשר:

    ה <action> זה ה intent שרוצים להאזין לו.

   ה <receiver android:name = “…” > זה ה path למחלקה שנגדיר שאנחנו רוצים שתטפל ב intent הזה.

    2. הגדרת הרשאות בקובץ ה Manifest.xml ע”י tag של uses-permission תחת manifest    כאשר:

    לכל intent יש הרשאות מתאימות שצריך לבקש בשביל להפעיל אותו, ישנם גם intents שלא צריכים הרשאות מיוחדות. בשביל לדעת
    איזה הרשאה כל intent צריך אפשר לראות באתר של ה android developers בכתובת:

    לדוגמה בשביל ה intent: ה: ACTION_BOOT_COMPLETED צריך permission:

    3. הגדרת המחלקה שתטפל ב intent:

public class CatchIntentClass extends BroadcastReceiver {
	@Override
	public void onReceive(Context context, Intent intent) {
		Log.d("Text", "Lior: Got intent"); 
	}
}

המתודה onReceive תתפוס את ה intents שהגדרנו כאשר הם קורים.

 

2. דרך הקוד:

    מתוך המחלקה יוצרים intentFilter עם ה intent המתאים בבנאי.

    ואז קוראים ל
  getApplicationContext().registerReceiver(CatchIntentClass, newAppFilter);

    עם ה intent ועם המחלקה שיצרנו שתטפל ב intent.

	public class TestActivity extends Activity {

		@Override
		public void onCreate(Bundle savedInstanceState) {

			super.onCreate(savedInstanceState);

    הכנת ה intent

		
			IntentFilter newAppFilter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);

    ב receiver להתקנה יש להוסיף גם את ה DataScheme

                        newAppFilter.addDataScheme("package");

    רושמים את ה receiver שיקשיב להודעות לפי ה intent – newAppFilter שהגדרנו.

	                getApplicationContext().registerReceiver(CatchIntentClass, newAppFilter);

		}

    הגדרת ה receiver:

		public static BroadcastReceiver CatchIntentClass = new BroadcastReceiver() {

		    public void onReceive(Context context, Intent intent) {     

		    		Log.d("Text", "Lior: Got intent"); 

		       }

		};

	}

 

דוגמא פרטנית לזיהוי מצב ה WIFI:

 

כאשר הגדרנו כבר את ה receiver שיקשיב ל network change event בדיקה אם הוא מחובר.

@Override
public void onReceive(Context context, Intent intent) {

	Log.d("Text", "Lior: NetworkStateChangeReceiver: onReceive"); 

	NetworkInfo networkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);

בדיקת סוג החיבור

	if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI)
	{
		ConnectivityManager myConnManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
		NetworkInfo myNetworkInfo = myConnManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

בדיקה האם מחובר

		if (myNetworkInfo.isConnected()) 
		{

			Log.d("Text", "Lior: NetworkStateChangeReceiver: isConnected"); 

		}

	}

}

 

בהצלחה !

Leave a Reply

Your email address will not be published.

אתם יכולים להשתמש באפשרויות ותגי ה-HTMLהבאים: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>