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

Android 注册BroadcastReceiver的两种方法

2012-02-05 19:50 267 查看
//第一种,在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
{
@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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: