Broadcast-----------自定义Action , 两种方式 实现广播Broadcast
来源:互联网 发布:移动oa知乎 编辑:程序博客网 时间:2024/05/02 02:55
今天被怎么自定义注册广播弄混了, 现在贴出来与大家分享一下。
掌握Broadcast,要掌握一下三点
1:注册广播:(有两种方式)
一是动态方式使用Context.registerReceiver()方法来注册;
二是静态方式,即在AndroidManifest.xml中通过<receiver> 。
2:发送广播:
在需要广播的地方sendBroadcast(intent); 之前要给Intent的对象intent 设置Action (Action可以被系统的或自定义的)和 data。
3:接收广播:
就是在extends Broadcast的那个类中, onReceive(Context context, Intent intent)方法要做的事情。
***静态方式:
下面代码是用静态方式和自定义action实现的广播:
运行结果如下:
具体代码:
main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/b" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="发送" /> <Button android:id="@+id/cancle" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="exit" /></LinearLayout>
TestActivity.java
package m.m.m;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class TestActivity extends Activity {private Button b;private Button cancle;public static final String MY_ACTION = "mxp";@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.main);b = (Button) findViewById(R.id.b);cancle = (Button) findViewById(R.id.cancle);b.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent = new Intent();intent.setAction(MY_ACTION);intent.putExtra("msg", "asdsdas");sendBroadcast(intent);}});cancle.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {finish();}});}}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="m.m.m" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".TestActivity" 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=".BroadCastActivity"> <intent-filter > <action android:name="mxp"/> </intent-filter> </receiver> </application></manifest>
总结 :自定义Action,就是定义一个静态常量如:public static final String MY_ACTION = "mxp";但是不要和系统的重复哦!
对我而言,关键是注册,即
<receiver android:name=".BroadCastActivity"> 注册广播
<intent-filter >
<action android:name="mxp"/> 定义action
</intent-filter>
</receiver>
***动态方式:
还针对上面的例子进行说明:这回程序运行结果如下:
1)不要androidManifest.xml文件中注册 ,即删除刚才注册的部分
2) 在启动服务的地方,即发送按钮的监听器里注册,再启动服务
TestActivity.java 多了注册的代码:myReceiver = new MyReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(MY_ACTION);
TestActivity.java:
package m.m.m;import android.app.Activity;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class TestActivity extends Activity {private Button bind;private Button unbind;private Button cancle;protected MyReceiver myReceiver;public static final String MY_ACTION = "mxp";@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.main);bind = (Button) findViewById(R.id.bind);unbind = (Button) findViewById(R.id.unbind);cancle = (Button) findViewById(R.id.cancle);bind.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubmyReceiver = new BroadCastActivity();
IntentFilter filter = new IntentFilter();filter.addAction(MY_ACTION);TestActivity.this.registerReceiver(myReceiver, filter);System.out.println("bind");Intent intent = new Intent();intent.setAction(MY_ACTION);intent.putExtra("msg", "asdsdas");sendBroadcast(intent);}});unbind.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {TestActivity.this.unregisterReceiver(myReceiver);System.out.println("unbind");}});cancle.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {finish();}});}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();}}
main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/bind" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="绑定" /> <Button android:id="@+id/unbind" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="取消绑定" /> <Button android:id="@+id/cancle" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="exit" /></LinearLayout>
总结:我在测试时点击绑定怎么都不显示Toast的内容,原因是我只注册了广播,没有发送广播。要想广播响应,一定要注册还要发送!
- Broadcast-----------自定义Action , 两种方式 实现广播Broadcast
- Broadcast-----------自定义Action , 两种方式 实现广播Broadcast
- BroadCast两种实现方式
- Android BroadCast 广播的两种注册方式和粘性广播实现
- Broadcast--自定义广播
- 自定义广播(Broadcast)
- 简单的实现自定义广播(Broadcast)机制
- Broadcast 广播传输方式
- android之广播Broadcast实现方式
- Broadcast Receiver接收并处理自定义Action广播通知
- Broadcast广播的发送方式
- Broadcast的两种注册方式
- Android 实现广播(Broadcast)
- broadcast广播
- Broadcast广播
- broadcast 广播
- Broadcast广播
- broadcast广播
- 合并两个线性表的实现
- javascript前端XML格式正确性验证方法
- android入门学习策略
- JAVA中extends 与implements有啥区别?
- ArcGIS Server for linux 服务无法启动解决简记
- Broadcast-----------自定义Action , 两种方式 实现广播Broadcast
- windows shutdown 与 C# WinForm 的 FormClosing事件
- 排序法系列之四---合并排序法
- dhtml tree的使用
- java ObjectOutputStream 的用法详解
- swt 背景图片按大小自动填充
- Epoll(经典)
- maven使用基本参考
- List链表