安全卫士软件学习

21 篇文章 0 订阅
本文介绍了使用Android Studio开发安全卫士应用的过程,包括启动界面、短信拦截、GPS定位、音乐播放、卸载软件、获取联系人信息、来电去电监听、删除通话记录、获取手机应用和内存信息等。此外,还探讨了手机杀毒的基本原理,如通过文件的MD5校验码对比进行病毒检测。
摘要由CSDN通过智能技术生成

闲来无事,隧参考各种资料,做个小小的安全程序玩玩,技术知识记录如下

1、开发环境:

androidstudio
compileSdkVersion: 21
buildToolsVersion :21.1.0
minSdkVersion 14
targetSdkVersion 22
gradle:1.5.0

2、启动界面:

启动界面:加载数据,获取更新
获取软件本地版本号的方法:
PackageManager pm = getPackageManager();
//获取apk的清单文件
PackageInfo info = pm.getPackageInfo(getPackageName(),0);  
info.versionName;

3、拦截短信

android4.4以上必须成为默认系统短信应用才可以拦截短信

4、收取短信:

建立一个MySmsReceiver,继承自BroadcastReceiver,然后在AndroidManifest.xml中注册该广播接收者:

<receiver android:name=".security.receiver.MySmsReceiver">
            <intent-filter android:priority="1000">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
</receiver>

上面的priority代表进程优先级,数据越大优先级越高。
然后我们在MySmsReceiver中的onReceive()方法中可以得到短信内容

    @Override
    public void onReceive(Context context, Intent intent) {
        Object[] objs = (Object[])intent.getExtras().get("pdus");
        for(Object b : objs){
            SmsMessage smsMessage = SmsMessage.createFromPdu((byte[])b);
            //发送者
            smsSenter = smsMessage.getOriginatingAddress();
            //内容
            String body = smsMessage.getMessageBody();
        }


    }

5、获取GPS位置:

首先注册监听:

    LocationManager lm = (LocationManager)context.getSystemService(context.LOCATION_SERVICE);
    lm.requestLocationUpdates("gps",0,0,new MyLocationListener());

然后我们把这个MyLocationListener实现一下:

class MyLocationListener implements LocationListener {

    @Override
    public void onLocationChanged(Location location) {
            String longgitude = "经度:"  + location.getLongitude();
            String latitude = "纬度:" + location.getLatitude();
    }

    @Override
    public void onStatusChanged(String s, int i, Bundle bundle) {

    }

    @Override
    public void onProviderEnabled(String s) {

    }

    @Override
    public void onProviderDisabled(String s) {

    }

6、播放音乐:最简单的方式

MediaPlayer player = MediaPlayer.create(context, R.raw.ylzs);//在res目录下新建一个raw的文件夹,把音乐文件放进去即可引用

player.setLooping(true);
player.setVolume(1.0f,1.0f);//设置最大声音
player.start();

7、卸载软件

Intent intent = new Intent();
intent.setAction(Intent.ACTION_DELETE);
intent.setData(Uri.parse("package:"+getPackageName()));
startActivity(intent);

8、获取手机联系人:

这里利用ContentResolver:

private ArrayList<Map<String,String>> getContactsData(){
        ArrayList<Map<String,String>> contactsData = new ArrayList<Map<String,String>>();
    ContentResolver contentResolver = getContentResolver();
    String[] str = {Phone.CONTACT_ID, Phone.DISPLAY_NAME, Phone.NUMBER,
    Phone.PHOTO_ID};
    Cursor cur = contentResolver.query(Phone.CONTENT_URI, str, null, null, null);
    while (cur.moveToNext()){
        Map<String,String> data = new HashMap<String,String>();
        data.put("name",cur.getString(cur.getColumnIndex(Phone.DISPLAY_NAME)));
        data.put("number",cur.getString(cur.getColumnIndex(Phone.NUMBER)));
        contactsData.add(data);
    }
    cur.close();
    return contactsData;
}
/**
Phone.CONTENT_URI = content://com.android.contacts/data/phones
这就是一个ContentProvider的地址;
Phone.CONTACT_ID = contact_id
Phone.DISPLAY_NAME = display_name
Phone.NUMBER = data
Phone.PHOTO_ID = photo_id*/
号码归属地查询

利用网络查询或者使用本地数据库查询
本地数据库可以上淘宝搜“手机号码数据库”,随便买一个就行。

9、来电监听:

首先申请权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

然后监听:

TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
tm.Listen(new OnePhoneStateListener(),PhoneStateListener.LISTEN_CALL_STATE);

接着我们实现OnePhoneStateListener这个监听者:

class OnePhoneStateListener extends PhoneStateListener{  
        @Override  
        public void onCallStateChanged(int state, String incomingNumber) {  
            Log.i(TAG, "[Listener]电话号码:"+incomingNumber);  
            switch(state){  
            case TelephonyManager.CALL_STATE_RINGING:  
                Log.i(TAG, "[Listener]等待接电话:"+incomingNumber);  
                break;  
            case TelephonyManager.CALL_STATE_IDLE:  
                Log.i(TAG, "[Listener]电话挂断:"+incomingNumber);  
                break;  
            case TelephonyManager.CALL_STATE_OFFHOOK:  
                Log.i(TAG, "[Listener]通话中:"+incomingNumber);  
                break;  
            }  
            super.onCallStateChanged(state, incomingNumber);  
        }  
    }  
//当你在服务里面做来电监听时候,记得在服务被销毁时候要取消监听,否则即使你把服务杀死了,还是可以监听到来电。
public void onDestory(){
    tm.Listen(myCallListener,PhoneStateListener.LISTEN_NONE);//这句话可以注销监听
}

注意:android6.0、7.0要动态申请权限

10、去电监听:

权限:

<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />

这里采用java动态注册广播接收者来监听去电

class MyCallOutReceiver extends BroadcastReceiver{
    public void onReceiver(Context context,Intent intent){
        String callPhoneNumber = getResultData();
        Toast.makeText().show();
    }
}
MyCallOutReceiver myCallOutReceiver = new MyCallOutReceiver();
IntentFilter filter = new IntentFilter("android.intent.action.NEW_OUTGOING_CALL");//设置动作响应
registerReceiver(myCallOutReceiver,filter);//注册广播接收者当然,最后是要取消广播接收者的。
unregisterReceiver(myCallOutReceiver);
//把广播接收者写在服务里面,就可以获得和服务一样的生命周期!!

==可以采用自定义土司来长时间显示一个Toast。
Toast实际上是通过WindowsManager对象添加进入而显示的。windowsManager.addView();
然后通过windowsManager.removeView();移除掉的。
中间可能通过一些队列或者任务来设定一定时间后消失Toast的==。

11、删除通话记录

在联系人的数据库里面有个叫calls的表,里面存放了通话记录的内容。
删除通话记录就是删除这个表里面的数据,可以利用内容提供者来进行操作。

12、获取手机所有app信息

public static List<AppInfo> getAppInfo(Context context){
    List<AppInfo> myAppInfos = new ArrayList<AppInfo>();
PackageManager pm = context.getPackageManager();
List<PackageInfo> appInfos = pm.getInstalledPackages(0);
    for(PackageInfo info : appInfos){
        AppInfo appInfo = new AppInfo();
appInfo.pkgName = info.packageName;
appInfo.name = info.applicationInfo.loadLabel(pm).toString();
appInfo.icon = info.applicationInfo.loadIcon(pm);
//判断一个程序是用户程序还是系统程序,安装在手机内存还是外存储设备中
int flags = info.applicationInfo.flags;
if((flags & ApplicationInfo.FLAG_SYSTEM) == 0){
                //用户程序
                appInfo.userApp = true;
            }else{
                //系统程序
                appInfo.userApp = false;
            }
            if((flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) == 0){
                //手机内存中
                appInfo.inRom = true;
            }else{
                //外存储设备中
                appInfo.inRom = false;
            }
myAppInfos.add(appInfo);
}
return myAppInfos;
}

13、获取手机内存信息

获取正在运行的进程:
 public static int getRunningAppCount(Context context){
        ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfoList = activityManager.getRunningAppProcesses();
        return runningAppProcessInfoList.size();
    }
获取当前正在运行的Service
List<ActivityManager.RunningServiceInfo> appList2 = mActivityManager.getRunningServices(100);
for (ActivityManager.RunningServiceInfo running : appList2) {
    System.out.println(running.service.getClassName());
}
获取正已运行的内存:
public static long getAvailMemSize(Context context){
        ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
        activityManager.getMemoryInfo(memoryInfo);
        return memoryInfo.availMem;
    }
获取总的内存:
public static long getTotalMemSize(Context context){
        ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
        activityManager.getMemoryInfo(memoryInfo);
        return memoryInfo.totalMem;
    }
获取最近运行的应用
List<ActivityManager.RecentTaskInfo> appList4 = mActivityManager.getRecentTasks(100, 1);
for (ActivityManager.RecentTaskInfo running : appList4) {
    System.out.println(running.origActivity.getClassName());
}

14、手机杀毒原理

一般手机杀毒就是通过提取文件的MD5校验码来检验,或者提取sha1校验码来验证。一个文件一旦被改动,则它的校验码就会改变;
杀毒软件提取文件的MD5校验码后就去病毒库里面查找该文件的MD5码,如果存在,则该文件就是一个病毒;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值