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卡在手机上正常使用状态 // ...
随机推荐
- Codeforces Round #316 div2
一场充满血腥hack之战!!! Problem_A: 题意: n个候选人在m个城市进行投票,每个城市选出票数最多的一个候选人为城市候选人,如果票数相同,则取编号小的候选人. 再从这m个城市候选人中选出 ...
- [JavaScript] js 复制到剪切板
zeroclipboard官网:https://github.com/zeroclipboard/ZeroClipboard 下载压缩包,得到两个“ZeroClipboard.js”和“ZeroCli ...
- BZOJ 1828: [Usaco2010 Mar]balloc 农场分配
Description Input 第1行:两个用空格隔开的整数:N和M * 第2行到N+1行:第i+1行表示一个整数C_i * 第N+2到N+M+1行: 第i+N+1行表示2个整数 A_i和B_i ...
- 得到bundle seed id
- (NSString *)bundleSeedID { NSDictionary *query = [NSDictionary dictionaryWithObjectsAndKeys: (__br ...
- the apply of backbone
http://www.developer.com/print/lang/jscript/creating-a-javascript-driven-online-notebook-with-backbo ...
- MinGW中的头文件路径级环境变量设置
整理自 MinGW中的头文件路径 C头文件目录%MINGW_PATH%/include下有头文件,里面有strcpy等c函数的声明. C++头文件目录%MINGW_PATH%/lib/gcc/mi ...
- 【codeforce 219D】 Choosing Capital for Treeland (树形DP)
Choosing Capital for Treeland Description The country Treeland consists of n cities, some pairs of t ...
- [wikioi]乘积最大
http://wikioi.com/problem/1017/ 划分型动态规划1.转移方程是:f[i][j]=max(f[k][j-1]*t[k+1][i]),f[i][j]表示前面i个字符加上j个乘 ...
- awsomeplayer结构认识
把这个搞明白,算是顿悟的一个真实例子.怎么也搞不懂的架构,突然就想明白了.不过这其实是一个思维的过程. 当然如果你想明白这些东西,至少要非常清楚一个概念:接口. 我只是一个半路出家的开发者,我真正明白 ...
- 一个简单的DDraw应用程序2
//------------------------------------------------------------------------- // 文件名 : 6_1.cpp// 创建者 : ...