android86 监听SD卡状态,勒索软件,监听应用的安装、卸载、更新,无序广播有序广播
* 添加权限
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
* 4.0以后广播接收者安装以后必须手动启动一次,否则不生效
* 4.0以后广播接收者如果被手动关闭,就不会再启动了 ------------------------------------------------------------------------
#监听SD卡状态
* 清单文件中定义广播接收者接收的类型,监听SD卡常见的三种状态,所以广播接收者需要接收三种广播 <receiver android:name="com.itheima.sdlistener.SDStatusReceiver">
<intent-filter >
<action android:name="android.intent.action.MEDIA_MOUNTED"/> SD卡就绪广播
<action android:name="android.intent.action.MEDIA_REMOVED"/> SD卡移除广播
<action android:name="android.intent.action.MEDIA_UNMOUNTED"/> SD卡拔出广播
<data android:scheme="file"/> 系统发送广播的时候带了数据
</intent-filter>
</receiver>
* 广播接收者的定义 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
* 清单文件中配置接收开机广播 <receiver android:name="com.itheima.lesuo.BootReceiver">
<intent-filter >
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
* 权限 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 接收开机成功广播的权限 * 定义广播接收者 @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); ------------------------------------------------------------------------
#监听应用的安装、卸载、更新
> 原理:应用在安装卸载更新时,系统会发送广播,广播里会携带应用的包名
* 清单文件定义广播接收者接收的类型,因为要监听应用的三个动作,所以需要接收三种广播 <receiver android:name="com.itheima.applistener.APPStatusReceiver">
<intent-filter >
<action android:name="android.intent.action.PACKAGE_ADDED"/> 应用安装消息
<action android:name="android.intent.action.PACKAGE_REPLACED"/>应用更新消息
<action android:name="android.intent.action.PACKAGE_REMOVED"/>应用卸载消息
<data android:scheme="package"/>发送广播时携带的data是安装删除软件的包名
</intent-filter>
</receiver>
* 广播接收者的定义 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); } }
}
/*清单文件:
<receiver android:name="com.itheima.local.ShengZF">
<intent-filter android:priority="1000">
<action android:name="com.itheima.fdm"/>
</intent-filter>
</receiver>
<receiver android:name="com.itheima.local.ShiZF">
<intent-filter android:priority="800">
<action android:name="com.itheima.fdm"/>
</intent-filter>
</receiver>
<receiver android:name="com.itheima.local.XianZF">
<intent-filter android:priority="600">
<action android:name="com.itheima.fdm"/>
</intent-filter>
</receiver>*/ 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();//广播不再传递
} }
android86 监听SD卡状态,勒索软件,监听应用的安装、卸载、更新,无序广播有序广播的更多相关文章
- 监听SD卡状态
最近在做项目时遇到需要处理SD卡拔出时的监听,在网上找了很多资料.总结了一下, 用接收广播处理最有效率 sd卡拔插时会发送广播,具体如下(摘自一位大虾的博客 来自:http://blog. ...
- Android USB大容量存储时SD卡状态监听(转)
对SD卡状态监听,到现在为止我知道的有两种方式: 1.注册StorageEventListener来监听sd卡状态 StorageEventListener中有onStorageStateChange ...
- Android(java)学习笔记183:判断SD卡状态和存储空间大小
当我们在使用SD卡时候,如果我们想往SD卡里读写数据,我们必须在这之前进行一个逻辑判断,那就是判断SD卡状态和SD存储空间大小: 核心代码: String status = Environment.g ...
- Android(java)学习笔记126:判断SD卡状态和SD卡容量
1. 判断SD卡状态和SD卡存储空间大小 当我们在使用SD卡时候,如果我们想往SD卡里读写数据,我们必须在这之前进行一个逻辑判断,那就是判断SD卡状态和SD存储空间大小: 核心代码: String s ...
- SD卡状态监听(无序广播)
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Int ...
- SD卡状态广播
SD状态发生改变的时候会对外发送广播.SD卡的状态一般有挂载.未挂载和无SD卡. 清单文件 一个广播接受者可以接受多条广播.这里在意图过滤器中添加是data属性是因为广播也需要进行匹配的.对方发送的广 ...
- android之读取SD卡状态
package xidian.dy.com.chujia; import android.os.Build; import android.os.Environment; import android ...
- android中广播接收SD卡状态
mReceiver = new BroadcastReceiver() { //add by mengmeng.chen begin public void onReceive(Context con ...
- Android 检测SD卡应用
Android 检测SD卡应用 // Environment.MEDIA_MOUNTED // sd卡在手机上正常使用状态 // ...
随机推荐
- linux线程(一)基本应用
有感而发(可以直接忽略~):每次要用到线程,都要在网上重新学下基础,例子倒是不少:一种是排版好,讲的不全又不是自己想要的:一种是排版不好,直接略过了.两者兼有的又要苦苦寻找,所以还是自己总结了,觉得每 ...
- 力控ADO组件数据源设置
1.mysql的ODBC驱动如何下载及安装 地址:http://dev.mysql.com/downloads/connector/odbc/5.1.html Mysql跟力控ado进行交互 第一步: ...
- delphi中EmbeddedWB网页html相互调用(二)
我们可以通过控件 EmbeddedWB_D5-D2010_Version_14.69.1 来响应html事件,还可以自定义html响应哪些html元素. 控件下载 点击下载 里面有demos文件夹大家 ...
- 在服务 ObtainData 实现的协定列表中找不到协定名称 "IMetadataExchange"。将 ServiceMetadataBehavior 添加到配置文件或直接添加到 ServiceHost,以启用对该协定的支持。
第一种解决方法:最暴力的 配置去掉<endpoint address="mex" binding="mexHttpBinding" contract=&q ...
- bzoj1023
研究了一下仙人掌首先,仙人掌虽然不是树,但却有很强的树的既视感如果把每个环都看做一个点,那么他就是一棵树当然这不能直接缩环,因为环和环可以有一个交点如果是树,求直径都会做,令f[i]表示i到子树的最长 ...
- WordPress Videowall插件‘page_id’参数跨站脚本漏洞
漏洞名称: WordPress Videowall插件‘page_id’参数跨站脚本漏洞 CNNVD编号: CNNVD-201310-502 发布时间: 2013-10-23 更新时间: 2013-1 ...
- App架构经验总结(转)
原文链接: http://keeganlee.me/post/architecture/20160303 架构因人而异,不同的架构师大多会有不同的看法:架构也因项目而异,不同的项目需求不同,相应的架构 ...
- 【转】c++重载、覆盖、隐藏——理不清的区别
原文网址:http://blog.sina.com.cn/s/blog_492d601f0100jqqm.html 再次把林锐博士的<高质量c++编程指南>翻出来看的时候,再一次的觉得这是 ...
- SharePoint 2010中使用Visual Studio 2010进行方便快速的Web Part开发
转:http://www.cnblogs.com/fatwhale/archive/2010/02/24/1672633.html 在Visual Studio 2010中, 已经集成了用于Shar ...
- Tag file directory /struts-tags does not start with "/WEB-INF/tags"
使用自定义标签,记得引用路径 <%@taglib prefix="s" uri="/struts-tags" %>