Android廣播機制

Intent有一個重要的機制就是作為不同進程間傳遞數據和事件的媒介。
通常我們自己的應用或者Android系統本身在某些事件來臨的時候會將Intent廣播出去的,而註冊的Broadcast Receiver可以監聽到這些Intent並且可以獲得保存在Intent中的數據。
例如,在電池電量發生變化,網絡連接發生變化或者是來電,來短信的時候,Android系統都會將相關的Intent進行廣播

。如果註冊瞭針對這些事件的Broadcast Receiver,那麼就可以處理這些事件。

實現廣播事件

Intent intent=new Intent("HelloWorld");

intent,putExtra("DATA","HHHHHHH");

sendBroadcast(intent);

 

通過繼承BroadcaastReceiver類,並重寫這個類當中的onReceiver方法來實現

public class WorkReceiver extends BroadcastReceiver

{

        public void onReceive(Context context,Intent intent)

        {

        }

}

在onReceive方法不要有執行超過5秒的代碼。如果有的話,建議在該方法中寫一個線程,單獨執行

註冊和註銷BroadcastReceiver

方法一:在AndroidManifest.xml中中註冊,推薦用這種方法註冊

<receiveer android:name="WorkReceiver">

<intent-filter>

<action android:name="HelloWorld"/>

</intent-filter> www.aiwalls.com

</receiver>

第二種方法是在代碼中註冊,這種方法的好去是靈活。

IntentFilter filter=new IntentFilter("HelloWorld");

WorkReceiver wr=new WorkReceiver();

registerReceiver(wr,filter);

註銷的話

unregisterReceiver(wr);

下面是一個實例

[java]
package com.example.androidtest; 
 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
 
public class MainActivity extends Activity { 
 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
    } 
 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
        getMenuInflater().inflate(R.menu.activity_main, menu); 
         
        menu.add(0, 0, 0, "WorkReceiver"); 
        return true; 
    } 
 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
        // TODO Auto-generated method stub  
         
        if(item.getItemId()==0) 
        { 
            Intent intent=new Intent("HelloWorld"); 
            this.sendBroadcast(intent); 
        } 
        return super.onOptionsItemSelected(item); 
    } 
     
     

package com.example.androidtest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
       
        menu.add(0, 0, 0, "WorkReceiver");
        return true;
    }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  // TODO Auto-generated method stub
  
  if(item.getItemId()==0)
  {
   Intent intent=new Intent("HelloWorld");
   this.sendBroadcast(intent);
  }
  return super.onOptionsItemSelected(item);
 }
   
   
}

WorkReceiver類

[java]
package com.example.androidtest; 
 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.widget.Toast; 
 
public class WorkReceiver extends BroadcastReceiver{ 
 
    @Override 
    public void onReceive(Context context, Intent intent) { 
         
        Toast.makeText(context, "HelloWorld", Toast.LENGTH_LONG).show(); 
    } 
 

package com.example.androidtest;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class WorkReceiver extends BroadcastReceiver{

 @Override
 public void onReceive(Context context, Intent intent) {
  
  Toast.makeText(context, "HelloWorld", Toast.LENGTH_LONG).show();
 }

}

AndroidMenifest.xml

[java]
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.androidtest" 
    android:versionCode="1" 
    android:versionName="1.0" > 
 
    <uses-sdk 
        android:minSdkVersion="4" 
        android:targetSdkVersion="15" /> 
 
    <application 
        android:icon="@drawable/ic_launcher" 
        android:label="@string/app_name" 
        android:theme="@style/AppTheme" > 
        <activity 
            android:name=".MainActivity" 
            android:label="@string/title_activity_main" > 
            <intent-filter> 
                <action android:name="android.intent.action.MAIN" /> 
 
                <category android:name="android.intent.category.LAUNCHER" /> 
            </intent-filter> 
        </activity> 
        <receiver android:name="WorkReceiver"> 
            <intent-filter> 
                <action android:name="HelloWorld"/> 
            </intent-filter> 
        </receiver> 
        
    </application> 
 
</manifest> 

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.androidtest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="4"
        android:targetSdkVersion="15" />

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

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name="WorkReceiver">
            <intent-filter>
                <action android:name="HelloWorld"/>
            </intent-filter>
        </receiver>
      
    </application>

</manifest>

發佈留言