本文共 4679 字,大约阅读时间需要 15 分钟。
* 添加权限* 4.0以后广播接收者安装以后必须手动启动一次,否则不生效* 4.0以后广播接收者如果被手动关闭,就不会再启动了------------------------------------------------------------------------#监听SD卡状态* 清单文件中定义广播接收者接收的类型,监听SD卡常见的三种状态,所以广播接收者需要接收三种广播 * 广播接收者的定义 public class SDCardReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 区分接收到的是哪个广播 String action = intent.getAction(); if(action.equals("android.intent.action.MEDIA_MOUNTED")){ System.out.println("sd卡就绪"); } else if(action.equals("android.intent.action.MEDIA_UNMOUNTED")){ System.out.println("sd卡被移除"); } else if(action.equals("android.intent.action.MEDIA_REMOVED")){ System.out.println("sd卡被拔出"); } } }------------------------------------------------------------------------#勒索软件* 接收开机广播,在广播接收者中启动勒索的Activity* 清单文件中配置接收开机广播 SD卡就绪广播 SD卡移除广播 SD卡拔出广播 系统发送广播的时候带了数据 * 权限 接收开机成功广播的权限* 定义广播接收者 @Override public void onReceive(Context context, Intent intent) { //开机的时候就启动勒索软件 Intent it = new Intent(context, MainActivity.class); context.startActivity(it); }* 以上代码还不能启动MainActivity,因为广播接收者的启动,并不会创建任务栈,那么没有任务栈,就无法启动activity* 手动设置创建新任务栈的flag it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);------------------------------------------------------------------------#监听应用的安装、卸载、更新> 原理:应用在安装卸载更新时,系统会发送广播,广播里会携带应用的包名* 清单文件定义广播接收者接收的类型,因为要监听应用的三个动作,所以需要接收三种广播 * 广播接收者的定义 public void onReceive(Context context, Intent intent) { //区分接收到的是哪种广播 String action = intent.getAction(); //获取广播中包含的data,应用软件的包名 Uri uri = intent.getData(); if(action.equals("android.intent.action.PACKAGE_ADDED")){ System.out.println(uri + "被安装了"); } else if(action.equals("android.intent.action.PACKAGE_REPLACED")){ System.out.println(uri + "被更新了"); } else if(action.equals("android.intent.action.PACKAGE_REMOVED")){ System.out.println(uri + "被卸载了"); } }-----------------------------------------------------------------------#广播的两种类型(广播可以跨应用进行)* 无序广播:所有跟广播的intent匹配的广播接收者都可以收到该广播,并且是没有先后顺序(同时收到,不能修改广播数据并且不可以截断广播)* 有序广播:所有跟广播的intent匹配的广播接收者都可以收到该广播,但是会按照广播接收者的优先级来决定接收的先后顺序(可以截断广播) * 优先级的定义:-1000~1000 * 最终接收者:所有广播接收者都接收到广播之后,它才接收,并且一定会接收 * abortBroadCast:阻止其他接收者接收这条广播,类似拦截,只有有序广播可以被拦截package com.itheima.center;import android.os.Bundle;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.view.Menu;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 click(View v){ Intent intent = new Intent(); intent.setAction("com.itheima.fdm"); //发送有序广播 //new MyReceiver()这个resultReceiver:不需要在清单文件中配置,这个广播接收者只接受该条有序广播,并且是最后一个收到该广播,并且一定可以收到该广播(即使被截断了也能够收到) sendOrderedBroadcast(intent, null, new MyReceiver(), null, 0, "每人发100斤大米", null); } // class MyReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { String text = getResultData(); System.out.println("反贪局收到文件:" + text); } }}/*清单文件: 应用安装消息 应用更新消息 应用卸载消息 发送广播时携带的data是安装删除软件的包名 */package com.itheima.local;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;public class ShengZF extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub String text = getResultData(); System.out.println("省政府收到文件:" + text); setResultData("每人发80斤大米"); abortBroadcast();//广播不再传递 }}
本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/4948131.html,如需转载请自行联系原作者