当前位置:操作系统 > 安卓/Android >>

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.zzzyk.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> 
         &n

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,