Android 注册BroadcastReceiver的两种方法
2012-02-05 19:50
267 查看
//第一种,在AndroidManifest.xml文件之中注册
第一种:特点:即使你的应用程序已经关闭了,它依然还是会收到广播,执行操作。
//接收代码
第二种,特点:根据你程序的生命周期来做取相应的操作
看,一样可以得到,当我们按HOME键,或打开别的Activity的时候,那么根据Activity的生命则会执行onStop()那么我们可以删除掉当前的已经注册的广播,这样也就减少了系统资源的开支和浪费。
最后在加些东西:删除应用程序
<activity android:name="com.erdo.mm.android.broadcast.UninstallReceiver"
android:exported="true">
这里的意思是接收外部的消息(其它App发过来的消息)
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="package" />
</intent-filter>
</activity>
第一种:特点:即使你的应用程序已经关闭了,它依然还是会收到广播,执行操作。
package sn.len.broad; 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 BroadCastActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button_sendBroad=(Button) findViewById(R.id.sendmsg); button_sendBroad.setOnClickListener(new broad()); } class broad implements OnClickListener { public void onClick(View v) { //第一种 Intent intent=new Intent("sn.len.testsend.broad"); sendBroadcast(intent); } } }在AndroidManifest.xml中注册
//接收代码
package sn.len.broad; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class TestReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //可以根据得到的Action来控制自己的程序 //但在receiver里面最好不写什么太多的业务逻辑 String action=intent.getAction(); if("sn.len.testsend.broad".equals(action)) { System.out.println("已经接收到广播1,执行流程如下:sendBroadcast->manifext.xml->.TestReceiver->onReceiver()"); } else if("sn.len.testsend.broad2".equals(action)) { System.out.println("已经接收到广播2,执行流程如下:sendBroadcast->manifext.xml->.TestReceiver->onReceiver()"); } } }//第二种,在自己的应用程序中注册,不用在到Manifest.xml文件中注册了
第二种,特点:根据你程序的生命周期来做取相应的操作
看,一样可以得到,当我们按HOME键,或打开别的Activity的时候,那么根据Activity的生命则会执行onStop()那么我们可以删除掉当前的已经注册的广播,这样也就减少了系统资源的开支和浪费。
package sn.len.broad; 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 BroadCastActivity extends Activity { private TestReceiver testReceiver; private Button button_sendBroad; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //第二种 //当程序创建的时候就应该注册,当然你想什么注册都可以,根据情况而定 testReceiver=new TestReceiver(); IntentFilter intentFilter=new IntentFilter(); intentFilter.addAction("sn.len.testsend.broad2"); BroadCastActivity.this.registerReceiver(testReceiver, intentFilter); button_sendBroad=(Button) findViewById(R.id.sendmsg); button_sendBroad.setOnClickListener(new broad()); } class broad implements OnClickListener { public void onClick(View v) { Intent intent=new Intent(); intent.setAction("sn.len.testsend.broad2"); sendBroadcast(intent); } } //当这个Activity处于不可见的状态下,则删除掉当前已经注册了的广播 @Override protected void onStop() { BroadCastActivity.this.unregisterReceiver(testReceiver); super.onStop(); } }//接收代码
package sn.len.broad; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class TestReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //可以根据得到的Action来控制自己的程序 //但在receiver里面最好不写什么太多的业务逻辑 String action=intent.getAction(); System.out.println(action); if("sn.len.testsend.broad".equals(action)) { System.out.println("已经接收到广播1,执行流程如下:sendBroadcast->manifext.xml->.TestReceiver->onReceiver()"); } else if("sn.len.testsend.broad2".equals(action)) { System.out.println("已经接收到广播2,执行流程如下:sendBroadcast->manifext.xml->.TestReceiver->onReceiver()"); } } }
最后在加些东西:删除应用程序
<activity android:name="com.erdo.mm.android.broadcast.UninstallReceiver"
android:exported="true">
这里的意思是接收外部的消息(其它App发过来的消息)
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="package" />
</intent-filter>
</activity>
package com.erdo.mm.android.broadcast; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.net.Uri; public class UninstallReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Uri packageURI = Uri.parse("package:com.erdo.mm.cartoonplayer"); Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI); context.startActivity(uninstallIntent); } }
相关文章推荐
- Android注册广播的两种方法分析
- Android 广播机制(两种注册方法)与中断广播
- Android中为Button注册监听器最常用的两种方法
- Android中Broadcast Receiver的两种注册方法和区别
- Android:Android广播机制(两种注册方法)与 中断广播
- [Android]获得Andriod手机屏幕分辨率的两种方法
- Android之Handler在新线程中读取网络的两种方法
- Android 线程 thread 两种实现方法
- android通过两种方法开启一个线程
- android悬浮按钮(Floating action button)的两种实现方法
- 【Android代码片段之七】判断sdCard是否已安装的两种方法
- Android的语言设置两种方法
- Android:将数字画在图片上合成一张图的两种实现方法(一)
- 方法返回在android手机开机后,在工程模式下的短信自注册开关默认开启
- Android去除系统自带动画的两种方法
- Android中存取文件的两种方法
- Android中Intent传递对象的两种方法(Serializable,Parcelable)!
- Android实时打印kernel和App log(两种方法)
- Android_获取屏幕大小的两种方法
- Android 更新UI的两种方法——handler和runOnUiThread()