BroadcastReceiver使用

BroadcastReceiver是用于接收广播通知的组件,例如按下拍照键、电池电量低、安装新应用等,还有普通应用程序,例如启动特定的线程、文件下载完毕等。

BroadcastReceiver类是所有广播接收器的抽象基类。当消息到达时,接收器调用onReceive()方法,在该方法结束后,BroadcastReceiver实例失活。

onReceive()方法是实现BroadcastReceiver类时需要重写的方法。

用于接收广播有以下两类:

  • 普通广播:使用Context.sendBroadcast()方法发送,异步,以未定义的顺序运行。
  • 有序广播:使用Context.sendOrderedBroadcast()方法发送,每次只发送给一个接受者。有序接收者的顺序由匹配的intent-filter的android:priority属性控制,具有相同优先级的接收者运行顺序任意。
应用

当接收到短信时给出提示信息的功能

public class SMSReceive extends BroadcastReceiver {
	private static final String action = "android.provider.Telephony.SMS_RECEIVED";
	@Override
	public void onReceive(Context context, Intent intent) {
		if(intent.getAction().equals(action)){
			Toast.makeText(context, context.getResources().getString(R.string.message), Toast.LENGTH_LONG).show();
		}
		
	}

}
编写AndroidMainfest.xml文件,注册Activity及BroadcastReceiver,如下:

        <activity
            android:name=".SMSActivity"
            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=".SMSReceive">
            <intent-filter >
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter>
        </receiver>


显示电池剩余电量的功能

编写BatteryReceiver类,继承自BroadcastReceiver类,重写onReceive()方法

public class BatteryReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
		
		String action = intent.getAction();
		if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
			int level = intent.getIntExtra("level", 0);
			int scale = intent.getIntExtra("scale", 100);
			Toast.makeText(context, "剩余电量:"+(level *100 / scale)+"%", Toast.LENGTH_LONG).show();
			
		}
		
	}

}
编写BatteryActivity类,如下:

public class BatteryActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		Button button = (Button)findViewById(R.id.button1);
		button.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				registerReceiver(new BatteryReceiver()	, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));				
			}
		});
		
	}
}
效果如下:



另一个例子,注册通知、发送通知、取消注册通知,界面如下:


自定义MyBroadcastReceiver类,如下,当接收到通知时,输出通知的信息。

package com.example.usingbroadcast;

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

public class MyBroadcastReceiver extends BroadcastReceiver {

	public static final String ACTION = "com.example.usingbroadcast.intent.action.MYBC";
	
	@Override
	public void onReceive(Context arg0, Intent intent) {
		System.out.println(intent.getStringExtra("text"));
	}

}

MainActivity如下:

package com.example.usingbroadcast;

import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

	private Button btnSendBroadcast, btnRegisterBCR, btnUnregisterBRC;
	private final MyBroadcastReceiver myBC = new MyBroadcastReceiver();//Broadcast
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		btnSendBroadcast = (Button) findViewById(R.id.btnSendBroadcastReceiver);		
		btnSendBroadcast.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				
				//Intent intent = new Intent(MainActivity.this, MyBroadcastReceiver.class);
				Intent intent = new Intent(MyBroadcastReceiver.ACTION);
				intent.putExtra("text", "Hello Broadcast");
				sendBroadcast(intent);//发送广播
			}
		});
		
		btnRegisterBCR = (Button) findViewById(R.id.btnRegisterBroadcast);
		btnRegisterBCR.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				registerReceiver(myBC, new IntentFilter(MyBroadcastReceiver.ACTION));//注册广播
			}
		});
		
		btnUnregisterBRC = (Button) findViewById(R.id.btnUnregisterBroadcast);
		btnUnregisterBRC.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				unregisterReceiver(myBC);//取消注册广播
			}
		});

		
	}
}

点击按钮,查看输出结果。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值