首页 > 学院 > 开发设计 > 正文

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

2019-11-11 01:51:25
字体:
来源:转载
供稿:网友

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

今天简单的了解了一下广播,在这里给大家简单的分享下我的收获! 据我简单的了解,广播分为静态广播与动态广播,黏性广播,在这里我给大家简单的说下吧! 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{

@Overridepublic 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;

} }}

}

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

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


上一篇:专题五-内存管理的艺术

下一篇:1084

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表