当前位置: 首页 > news >正文

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();//广播不再传递
    }

}
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/4948131.html,如需转载请自行联系原作者


相关文章:

  • mina之Iobuffer简单封装
  • Silverlight Navigation导航框架实例系列汇总
  • 自定义context自定义Dialog之Progress(二)
  • DELL服务器硬件信息采集SHELL脚本
  • hdu 2888 Check Corners
  • Android tabHost 刷新Activity
  • 测试在CENTOS X64 6.2 上安装ORACLE 11g client
  • function类html5游戏开发-零基础开发《圣诞老人送礼物》小游戏
  • 3G美餐:谁有红苹果?
  • .NET中 MVC 工厂模式浅析
  • Hyper-V 2节点集群高可用的限制
  • 记几个IOS工具网站
  • MIME邮件面面观
  • CentOS 6.3(x86_32)下安装Oracle 10g R2
  • lsof命令的使用
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Android组件 - 收藏集 - 掘金
  • CSS盒模型深入
  • JAVA多线程机制解析-volatilesynchronized
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Vim Clutch | 面向脚踏板编程……
  • webpack+react项目初体验——记录我的webpack环境配置
  • yii2权限控制rbac之rule详细讲解
  • 动态魔术使用DBMS_SQL
  • 七牛云假注销小指南
  • 前端面试之CSS3新特性
  • 使用agvtool更改app version/build
  • 手写一个CommonJS打包工具(一)
  • 我的业余项目总结
  • 无服务器化是企业 IT 架构的未来吗?
  • 小程序01:wepy框架整合iview webapp UI
  • 移动端 h5开发相关内容总结(三)
  • 责任链模式的两种实现
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • ​学习一下,什么是预包装食品?​
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (C++17) std算法之执行策略 execution
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (ZT)薛涌:谈贫说富
  • (第一天)包装对象、作用域、创建对象
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (四)模仿学习-完成后台管理页面查询
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • ***监测系统的构建(chkrootkit )
  • .htaccess 强制https 单独排除某个目录
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .Net程序帮助文档制作