您的位置:首页 > 移动开发 > Android开发

android学习笔记(17)广播事件处理进阶(注册方法)

2015-09-06 15:20 501 查看
对应苦水老师的第二十一课

前一课学习了广播的接收,用的是粗犷的方法,下面学学实用的。也就是它的注册方法。

注册BroadcastReceiver的方法:

1,在AndroidManifest.xml文件中进行注册

这种方法是最简单的,但是有个很大有问题是,这个recevicer与activity是无关的,当程序退出后,这个receiver仍然在运行,比如你的recevier调用了camera,当你用其它方式打开camera时,camera就在被占用的状态,就会出问题.

2,在应用程序的代码中进行注册

注册:

registerReceiver()

取消注册:

unregisterReceiver()

源码

MainActivity

package com.example1.broadcastdemo;

import com.example1.receiver.Receiver;

import android.net.sip.SipAudioCall.Listener;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
protected static final String action = "com.example1.broadcastdemo.ACTION";
private Button btnbc;
private Button btnregister;
private Button btnunregister;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnbc = (Button)findViewById(R.id.btnbc);
btnregister = (Button)findViewById(R.id.btnregister);
btnunregister = (Button)findViewById(R.id.btnunregister);
btnbc.setOnClickListener(listener);
btnregister.setOnClickListener(listener);
btnunregister.setOnClickListener(listener);

}
private OnClickListener listener = new OnClickListener() {
Intent intent = new Intent();
Receiver receiver;
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnbc:
intent.setAction(action);
sendBroadcast(intent);
break;
case R.id.btnregister:
receiver = new Receiver();
IntentFilter filter = new IntentFilter();
filter.addAction(action);
registerReceiver(receiver, filter);
break;
case R.id.btnunregister:
unregisterReceiver(receiver);
break;
default:
break;
}

}
};

}
Receiver.java(在另一个包中)

package com.example1.receiver;
import com.example1.broadcastdemo.MainActivity;
import com.example1.broadcastdemo.ToastDemo;

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

public class Receiver extends BroadcastReceiver {

@Override
public void onReceive(Context arg0, Intent arg1) {

Toast toast = Toast.makeText(arg0, "收到广播", Toast.LENGTH_SHORT);
toast.show();
}

}


点击register后再点击broadcast:能收到广播。



之前没有点击register或者点击了unregister后点击broadcast:都是收不到广播的。



附:


[Android] Android系统广播Action

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: