BroadcastReceiver簡單學習

1.動態註冊廣播接受者

就是在java中指定IntentFilter,然後添加不同的Action即可,想監聽什麼廣播就寫什麼Action。要注意的是
動態註冊廣播,一定要調用unregisterReceiver()。

2.靜態註冊廣播接受者

動態註冊需要程序啓動後才能接收廣播,靜態廣播就彌補了這個短板,在AndroidManifest中定製就可以讓程序在未啓動的情況下接收到廣播了。

示例代碼:

MyReceiver .java

public class MyReceiver extends BroadcastReceiver{

    //自己定義的Action
     private final String ACTION_BOOT = "com.example.broadcasttest.MY_BROADCAST";

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub

        if(ACTION_BOOT.equals(intent.getAction())){

            Toast.makeText(context,"收到廣播啦!",Toast.LENGTH_SHORT).show();
        }


    }

}

動態註冊:

MainActivity .java

public class MainActivity extends Activity {  

    private MyReceiver myReceiver;
    private Button btn_start;

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        btn_start=(Button)findViewById(R.id.btn_start);
        btn_start.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                sendBroadcast(new Intent("com.example.broadcasttest.MY_BROADCAST"));
            }
        });

        myReceiver=new MyReceiver();
        IntentFilter itFilter=new IntentFilter();
        //自己定義的廣播,也可以監聽系統廣播,如開機完畢,網絡變化等
        itFilter.addAction("com.example.broadcasttest.MY_BROADCAST");
        registerReceiver(myReceiver, itFilter);

    }  

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        unregisterReceiver(myReceiver);
    }
} 

靜態註冊:

manifest文件

  <receiver android:name=".MyReceiver" >
            <intent-filter>
                <action android:name="com.example.broadcasttest.MY_BROADCAST" />
            </intent-filter>
        </receiver>

MainActivity.java

public class MainActivity extends Activity {  

    private MyReceiver myReceiver;
    private Button btn_start;

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        btn_start=(Button)findViewById(R.id.btn_start);
        btn_start.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                sendBroadcast(new Intent("com.example.broadcasttest.MY_BROADCAST"));
            }
        });

    }  

} 

注意事項:

不要在廣播裏添加過多邏輯或者進行任何耗時操作,因爲在廣播中是不允許開闢線程的, 當onReceiver( )方法運行較長時間(超過10秒)還沒有結束的話,那麼程序會報錯(ANR), 廣播更多的時候扮演的是一個打開其他組件的角色,比如啓動Service,Notification提示, Activity等!

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