Android中的广播


  系统在运行过程中会产生很多事件,某些事件产生的时候,比如:电量的改变,收发短信、拨打电话、屏幕解锁、开机等等,系统会发送广播。只要应用程序接受到这条广播就知道系统发生了相应的事件,从而执行相应的代码。只要在我们的应用中开启的广播接收器就能接收到系统的广播。

ip拨号器


通过一个小案例还简述广播接收者的使用方式,功能就是在拨打电话时自动在号码前加特定的数字

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:hint="请输入号码前缀"
android:id="@+id/num"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="保存"
android:onClick="click"/>
</LinearLayout>

Activity代码

将号码前缀保存到本地的xml文件中

package xidian.dy.com.chujia;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText; public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); } public void click(View v) {
EditText et = (EditText) findViewById(R.id.num);
//将数据保存到本地的ip.xml中
SharedPreferences sp = getSharedPreferences("ip", MODE_PRIVATE);
if(et != null)
sp.edit().putString("ipNumber", et.getText().toString()).commit();
}
}

广播接受者

在广播接受者中通过getResultData来接收广播中的数据,数据是以字符串的形式保存的。

通过setResultData来将新的数据写回

package xidian.dy.com.chujia;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.util.Log; /**
* Created by dy on 2016/7/9.
*/
public class CallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String num = getResultData();
if(num.startsWith("1")) {
SharedPreferences sp = context.getSharedPreferences("ip", Context.MODE_PRIVATE);
String number = sp.getString("ipNumber", "");
Log.e(this.getClass().getName(), number);
num = number + num;
setResultData(num);
}
}
}

布局文件

在布局文件中需要过去打电话权限,并且需要注册广播接受者并指定接收那种类型的广播(这里接受打电话应用的广播)。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="xidian.dy.com.chujia">
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="主界面">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".CallReceiver">
<intent-filter >
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
</intent-filter>
</receiver>
</application>
</manifest>

注意

  当拨号器应用拨完号码后会发出一条广播,这时系统会自动的启动我们的app(这里不启动Activity),然后调用我们的广播接收器。等我们的广播接收器处理完数据后将该广播信息继续交给打电话应用来处理。

我们的IP拨号器并未启动

拨打电话(设置的前缀为19751)

系统自动启动我们的ip拨号器应用

最新文章

  1. iOS学习23之事件处理
  2. android Camera 如何判断当前使用的摄像头是前置还是后置
  3. 2015寒假ACM训练计划
  4. 使用IE10登录,URL出现SessionId的解决办法
  5. Table嵌套去掉子table的外边框
  6. ASP.NET MVC3使用Unity2.0实现依赖注入(转载和扩展)
  7. POJ 1037 DP
  8. Android网络:开发浏览器(五)——功能完善之保存图片实现
  9. STL algorithm算法minmax,minmax_element(36)
  10. linux下telnet mysql的3306断口,提示Can&#39;t connect to MySQL server on localhost (110)
  11. PS 图像调整算法——阈值
  12. 如何在 Docker 容器中运行 Kali Linux 2.0
  13. R语言学习——因子
  14. Spring MVC 使用介绍(八)—— 类型转换
  15. LA3490 Generator(KMP + 高斯消元)
  16. 饮冰三年-人工智能-linux-01通过VM虚拟机安装contes系统
  17. 完整的一次 HTTP 请求响应过程(一)
  18. 一些jquery特效收集
  19. TensorFlow数据读取方式:Dataset API
  20. RecyclerView 下拉刷新和加载更多

热门文章

  1. Java Dom解析的三个实例
  2. php cli方式下获取服务器ip
  3. 成为 Linux 终端高手的七种武器 之七 条件执行&&
  4. 定时器的应用---中断方式---让8个LED灯,左右各4个来回亮
  5. @RestController注解下返回到jsp视图页面
  6. 零拷贝传输(zero-copy transfer)——sendfile()
  7. 30 algorithm questions study
  8. cvBox2D和RotatedRect中返回的角度angle详解
  9. WinCE项目应用之RM905a+活度计远程检定方法研究
  10. android代码优化----ListView中自定义adapter的封装(ListView的模板写法)