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

本文介绍了Android静态注册广播的基本原理和使用方法,静态注册的广播在整个手机范围内有效。内容包括发送方如何发送广播,接收方如何创建BroadcastReceiver并在Manifest中注册。通过一个实例展示了发送广播的app改变接收广播app背景颜色的过程,强调了接收方Activity需先创建才能有效设置颜色。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值