静态注册广播是针对整个手机,只要你安装了此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标签外设置。
mainactivity:
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,通过布局对象来设置颜色。