參考網址:http://www.pin5i.com/showtopic-android-receiver-sample.html
可以在代碼文件中聲明一個receiver,也可以在manifest中聲明一個,前者中的receiver只有在該activity launch起來以后才會監聽其所感興趣的文件,而如果在androidManifext.xml中聲明的話,就不受限制,隨時可以監聽感興趣的事件。
首先談談在androidManifext.xml中注冊一個receiver, 例如我們想監聽相機按鈕按下事件的發生,並且發生后調用我們的camera程序
<receiver android:name="CameraButtonIntentReceiver"> <intent-filter> <action android:name="android.intent.action.CAMERA_BUTTON"/> </intent-filter> </receiver>
在這個配置文件中聲明了一個receiver用來監聽相機的按鍵事件,所以還需要在代碼文件定義與配置文件中同名的receiver:
public class CameraButtonIntentReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { Intent i = new Intent(Intent.ACTION_MAIN); i.setClass(context, Camera.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } }
關於另外一種,在代碼中注冊一個receiver,例如我們想在代碼文件中監聽電池電量的變化,就可以按照如下方法
private final BroadcastReceiver mBatteryReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(Intent.ACTION_BATTERY_CHANGED)) { … } } }
這種方法需要在onCreate 或者onStart中注冊該receiver所感興趣的intent,如:
registerReceiver(mBatteryReceiver, Intent.ACTION_BATTERY_CHANGED);
在onStop及onDestroy中注銷監聽
registerReceiver(mBatteryReceiver, Intent.ACTION_BATTERY_CHANGED);
--------------------------------------------
關機啟動receiver
在manifest中聲明
<receiver android:name=".XXXReceiver"> <intent-filter> <action android:name="android.intent.action.ACTION_SHUTDOWN" /> </intent-filter> </receiver>
public class XXXReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ... } }
可以監聽的action可以參考:
http://developer.android.com/reference/android/content/Intent.html
---------------------------------------------
activity標簽中使用的參數:
http://developer.android.com/guide/topics/manifest/activity-element.html