Android 注册BroadcastReceiver的两种方法

来源:互联网 发布:国家宏观经济数据 编辑:程序博客网 时间:2024/06/05 20:48

//第一种,在AndroidManifest.xml文件之中注册

第一种:特点:即使你的应用程序已经关闭了,它依然还是会收到广播,执行操作。


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{@Overridepublic 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{@Overridepublic 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;@Overridepublic 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处于不可见的状态下,则删除掉当前已经注册了的广播@Overrideprotected 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{@Overridepublic 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{@Overridepublic 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);}}



原创粉丝点击