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

Android——接收广播(静态注册)

2017-03-15 11:15 288 查看
静态注册广播是针对整个手机,只要你安装了此app,它都可以接收到发来的广播,并

不是仅仅局限于一个Activity,一个应用内部。

静态注册需要将发送方和接收方各自创建一个Android项目:

发送方:

只需要发送广播sendBroadcast(Intent),通过参数intent设置广播的action标识就好

啦。

接收方:

1.一个类继承broadcastreceiver

2.mainifest中注册

MyReceiver类继承broadcastreceiver:

public class MyReceiver extends BroadcastReceiver{
/*
* 1.在receiver app中创建继承broadcastreceiver类
* 2.在mainifest文件中注册register标签注册该类,设置intentfilter的action与另一个send app的setaction相对应
*
* 3.创建send类  发送广播
*
*/
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
//context 整个app  不局限于Activity

}

}


Manifest中注册:

<receiver android:name="com.example.receivertest.MyReceiver">

<intent-filter >
<action android:name="lpl"/>
</intent-filter>
</receiver>


这里action就是“lpl”。在这里就不用像动态注册那样解注册了。

简单介绍之后,来试着做这样一个项目:

发广播的app发送一个广播,接广播的app收到此广播以后改变自己的背景颜色。

大致流程就是send广播的app——>收广播的app的receiver类(MyReceiver的

onreceive方法)——>该app的mainactivity。

这里需要注意一个问题:

需要先运行接收的app,再运行发送广播的app,虽然说静态注册的广播,是针对整个手

机的,接收的app是肯定能够接收到的,但是改变它Activity的背景颜色,必须在它的

Activity创建出来以后才可以设置有效,不然颜色肯定是改不了的。

效果图看一下:

未发送广播时的接收广播的app:



收到广播后的此app:



附代码:

SendBoradcast的app:

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void myclick(View v)
{
Intent intent = new Intent("lpl");
intent.putExtra("color", Color.RED);
sendBroadcast(intent);
}

}


通过按钮来发送广播。

接收方app:

MyReceive类:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.widget.Toast;

public class MyReceiver extends BroadcastReceiver{
/*
* 1.在receiver app中创建继承broadcastreceiver类
* 2.在mainifest文件中注册register标签注册该类,设置intentfilter的action和另一个send
*   app的setaction相对应
* 3.创建send类  发送广播
*
*/
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
//context 整个app  不局限于Activity

int color=intent.getIntExtra("color", Color.RED);
Intent intent1=new Intent("ll");
intent1.putExtra("color", color);
context.sendBroadcast(intent1);

Toast.makeText(context, "收到广播", 0).show();
}

}


在Manifest中设置注册:

<receiver android:name="com.example.receivertest.MyReceiver">

<intent-filter >
<action android:name="lpl"/>
</intent-filter>
</receiver>


在application标签内,activity标签外设置。

mainactivi
4000
ty:


import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.RelativeLayout;

public class MainActivity extends Activity {
private RelativeLayout layout;
private BroadcastReceiver receiver=new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
layout.setBackgroundColor(intent.getIntExtra("color", Color.RED));
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
layout=(RelativeLayout) findViewById(R.id.layout);
IntentFilter filter=new  IntentFilter();
filter.addAction("ll");
registerReceiver(receiver, filter);

}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
unregisterReceiver(receiver);

}

}


将布局设置一个id,通过布局对象来设置颜色。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息