广播BroadcastReceiver加(系统广播电话状态)

版权声明:本文为博主原创文章,大家可以一起学习,一起进步!

今天简单的了解了一下广播,在这里给大家简单的分享下我的收获!
据我简单的了解,广播分为静态广播与动态广播,黏性广播,在这里我给大家简单的说下吧!
1,优先级动态广播的优先级比静态广播高
2,动态广播无需在AndroidManifest.xml中声明即可直接使用,也即动态;而静态广播则需要,有时候还要在AndroidManifest.xml中加上一些权限的声明
3,静态广播在应用程序退后也能收到广播,动态广播在应用程序退出之后是收不到广播的。
4,粘性广播呢现在是属于过时的,但是还是可以用的,他可以解决动态广播在应用程序退出后不能收到广播的问题,启动应用程序后就会收到之前发的广播,但是粘性广播是要在配置文件中添加权限的

<!--添加发送黏性广播的权限-->
<uses-permission android:name="android.permission.BROADCAST_STICKY"></uses-permission>

废话不多说,下面来通过一个简单的例子看下静态广播:
首先,对于静态广播,我们需要在AndroidManifest.xml声明。

<receiver android:name=".MyReceived01">
<intent-filter>
<action android:name="com.zking.g150831_android20_sender.520"></action>
 </intent-filter>
 </receiver>



activity_main.xml(发送者布局文件中的代码):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.zking.g150831_android20_sender.MainActivity">

    <EditText
        android:id="@+id/et_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入广播的内容"
        />


    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="send"
        android:text="发送" />

</LinearLayout>

MainActivity发送者里的代码:

package com.zking.g150831_android20_sender;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    private EditText editText;
    private Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = (EditText) findViewById(R.id.et_content);
        intent = new Intent();
//设置广播的名字(设置action)
        intent.setAction("com.zking.g150831_android20_sender.520");


    }


    public void send(View view) {
        String content = editText.toString();


        //携带数据
        intent.putExtra("data", content);


        //发送广播

        sendBroadcast(intent);


        //发送粘性广播
        //   sendStickyBroadcast(intent);
    }
}

好了发送者写完了我们接下来写接受者
接收静态广播,首先要新建一个类继承BroadcastReceiver,实现它里面的onReceive方法

package com.zking.g150831_android20_received01;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

/**
 * Created by Administrator on 2017/2/7.
 */

public class MyReceived01 extends BroadcastReceiver {


    @Override
    public void onReceive(Context context, Intent intent) {

        if ("com.zking.g150831_android20_sender.520".equals(intent.getAction())) {
        }
        String data = intent.getStringExtra("data");
        Log.i("test", "01号接受者收到广播了" + data);


    }
}

可以看到,静态广播不需要在代码中注册,下面我们看下动态广播:
首先不需要在AndroidManifest.xml声明,直接在代码中注册,不过最后必须要在onDestroy里面注销

package com.zking.g150831_android20_received01;

import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    private MyReceived01 myReceived01;
    private IntentFilter intentFilter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myReceived01 = new MyReceived01();
        intentFilter = new IntentFilter();
        intentFilter.addAction("com.zking.g150831_android20_sender.520");
    }


    @Override
    protected void onResume() {
        super.onResume();
        //动态注册广播
        registerReceiver(myReceived01,intentFilter);
    }
    //销毁
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(myReceived01);
    }
}

发送粘性广播只要把sendBroadcast(intent)改成sendStickyBroadcast(intent)即可

 public void send(View view) {
        String content = editText.toString();
        //携带数据
        intent.putExtra("data", content);
        //发送广播
      //  sendBroadcast(intent);
        //发送粘性广播
          sendStickyBroadcast(intent);
    }

好了,简单的静态广播,动态广播,粘性广播就在上面了,下面我在给大家讲下系统广播,在这里我简单用系统广播之电话状态给大家举个例子

话不多说,我们直接上效果图
这里写图片描述效果图

当我们外部手机打电话过来的时候,当前的信息会自动的进行改变。好了下面我们直接上代码!

activity代码:
package com.zking.g150831_android20_phonestate;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;

/**
* Created by Administrator on 2017/2/7.
*/

public class MyPhone extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
    if("android.intent.action.PHONE_STATE".equals(intent.getAction())){
        //获取电话号码
        String number= intent.getStringExtra("incoming_number");
        Log.i("test","呼叫来电,"+number);

//获取电话状态电话管理者
TelephonyManager tm= (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE);
int state=tm.getCallState();
switch (state){
case TelephonyManager.CALL_STATE_RINGING:
Log.i(“test”,”来电话了”);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.i(“test”,”通话中”);
break;
case TelephonyManager.CALL_STATE_IDLE:
Log.i(“test”,”挂断了”);
break;

        }
    }
}

}

这里一定要注意,别忘记在配置清单文件中加权限:
这里写图片描述
同时在清单文件中配置广播接受者(即静态广播)

哈 哈
好了,全部代码就在这了,就这么简单!!很简单的,其实没有想象中那么复杂!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值