靜態和動態註冊廣播接收者 72集

轉載請註明出處:http://blog.csdn.net/u011569040/article/details/45290445

筆記來源:尚學堂_堯瑋_072集-靜態和動態註冊廣播接收者


 兩種廣播發送的方式,清單中註冊廣播接收者是永久的,代碼註冊是臨時的

public class MainActivity extends Activity {
	
	MyReceive2 myReceive2;
	Button btnSendBroadcast_1;
	Button btnSendBroadcast_2;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		btnSendBroadcast_1 = (Button) findViewById(R.id.btnSendBroadcast_1);
		btnSendBroadcast_2 = (Button) findViewById(R.id.btnSendBroadcast_2);
		
		//封裝成一個方法,該代碼來註冊清單文件
		registerReceiver();
		
		//第一種方法發送廣播(清單裏註冊的)
		btnSendBroadcast_1.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				
				Intent intent = new Intent("com.example.broadcast.MyReceive1");
				intent.putExtra("key", "Broadcast_1發送的數據");
				sendBroadcast(intent);
				
			}
		});
		
		//第二種方法發送廣播(內部類,在代碼裏註冊)
		btnSendBroadcast_2.setOnClickListener(new OnClickListener() {
					
				@Override
				public void onClick(View v) {
					
					Intent intent = new Intent("com.example.broadcast.MyReceive2");
					intent.putExtra("key", "Broadcast_2發送的數據");
					sendBroadcast(intent);
				}
			});
		
		
	}

	//代碼註冊BroadcastReceiver的方法
	private void registerReceiver() {
		
		myReceive2 = new MyReceive2();
		IntentFilter filter = new IntentFilter();
		filter.addAction("com.example.broadcast.MyReceive2");
		registerReceiver(myReceive2, filter);
	}

	class MyReceive2 extends BroadcastReceiver{

		//一種是在清單裏面註冊,另一種用java代碼註冊即如下內部類
		@Override
		public void onReceive(Context context, Intent intent) {

			Log.i("main", "MyReceive2.onReceive() : "  + intent.getStringExtra("key"));
			
		}
		
	}
	
	@Override
	protected void onDestroy() {
		super.onDestroy();
		
		//當退出時,取消廣播接收者的註冊
		unregisterReceiver(myReceive2);
	}

}

public class MyReceive1 extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		//收到廣播時調用這個方法
		Log.i("main", "MyReceive1.onReceive: "  + intent.getStringExtra("key"));
		
	}

}

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.broadcast"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.broadcast.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name="com.example.broadcast.MyReceive1">
            <intent-filter >
                <action android:name="com.example.broadcast.MyReceive1"/>
                <!-- 只要發送廣播的字符串是這個name,就可以收到廣播 -->
            </intent-filter>
        </receiver>
    </application>

</manifest>



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章