动态注册和静态注册的不同
动态注册是将在静态注册中 AndroidManifest.xml 中的过滤接收 放在程序里完成,直接看程序
SecondReceiver.java 文件 (新建了 com.test.receiver 包)
package com.test.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class SecondReceiver extends BroadcastReceiver {
private static final String SS = "SecondReceiver";
@Override
public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
Log.i(SS, "SecondReceiver-->onReceive");
}
}
MainActivity.java 文件
package com.test;
import com.lanbokaka.receiver.SecondReceiver;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity {
static final String SS = "SS";
protected static final String ACTION = "com.lanbokaka.receiver.ACTION";
private Button mButton1;
private Button mButton2;
private Button mButton3;
SecondReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton1 = (Button) findViewById(R.id.button1);
mButton1.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent();
intent.setAction(ACTION); //增加 Action 标识
sendBroadcast(intent); //发送广播
}
});
mButton2 = (Button) findViewById(R.id.button2);
mButton2.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View arg0) {
receiver = new SecondReceiver(); //注意:每次点击 “动态注册” Button 都会 new 一个接收器
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION); //过滤广播
registerReceiver(receiver, filter);
}
});
mButton3 = (Button) findViewById(R.id.button3);
mButton3.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View arg0) {
unregisterReceiver(receiver); //程序容易崩溃,可以增加判断再取消注册
}
});
}
}
AndroidManifest.xml 文件
<application>
.
.
<receiver android:name="com.test.receiver">
</receiver>
</aplication>