写点什么

Android - 定位方式,火星坐标系统,一键锁屏,字节 Android 高工面试

用户头像
Android架构
关注
发布于: 2 小时前

private class MyLocationListener implements LocationListener{


//位置发生变化的时候


@Override


public void onLocationChanged(Location location) {


// TODO Auto-generated method stub


location.getLatitude(); //维度


location.getLongitude(); //经度


}


//当位置提供者状态发生变化的时候,可用-->不可用,不可用-->可用


@Override


public void onStatusChanged(String provider, int status, Bundle extras) {


// TODO Auto-generated method stub


}


//当位置提供者可用的时候


@Override


public void onProviderEnabled(String provider) {


// TODO Auto-generated method stub


}


//当位置提供者不可用的时候


@Override


public void onProviderDisabled(String provider) {


// TODO Auto-generated method stub


}


}

4.火星坐标系统

  1. 是一种国家保密插件,其实就是对真实坐标系统进行人为的加偏处理,按照特殊的算法,将真实的坐标加密成虚假的坐标,而这个加偏并不是线性的加偏,所以各地的偏移情况都会有所不同。而加密后的坐标也常被人称为火星坐标系统。

  2. 火星坐标的转化


//1.获取数据输入流


File file = new File("axisoffset.dat");


FileInputStream is = new FileInputStream(file);


//2.获取 ModifyOffset 实例


ModifyOffset mo = ModifyOffset.getInstance(is);


//3.转化为火星坐标,standard-->China


PointDouble result = mo.s2c(new PointDouble(113.9083f, 22.5854f));

5.获取手机位置功能所需知识点

1.获取手机经纬度


2.转化为火星坐标


3.由于获取经纬度是耗时任务,在 Service 中来获取

6.在服务中停掉自己

1.调用 stopSelf()方法

7.创建设备管理员的步骤

1.新建一个类,继承 DeviceAdminReceiver


public class MyAdmin extends DeviceAdminReceiver {


}


2.在清单文件中进行配置


<receiver


android:n


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


ame="com.mythmayor.project.ui.receiver.MyAdmin" //广播接收者的全类名


android:description="@string/sample_device_admin_description" //描述


android:label="@string/sample_device_admin" //标签


android:permission="android.permission.BIND_DEVICE_ADMIN" >


<meta-data


android:name="android.app.device_admin"


android:resource="@xml/device_admin_sample" /> //要使用到的权限


<intent-filter>


<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />


</intent-filter>


</receiver>


3.android:name 处填入广播接收者的全类名


4.新建 label 和 description 对应的字符串,声明标签和描述的内容


5.新建 device_admin_sample.xml 文件,声明要使用的管理员权限


<device-admin xmlns:android="http://schemas.android.com/apk/res/android">


<uses-policies>


<limit-password /> //设置密码规则


<watch-login /> //监视屏幕解锁尝试次数


<reset-password /> //更改屏幕解锁密码


<force-lock /> //锁定屏幕


<wipe-data /> //清除所有数据


<expire-password /> //设置锁定屏幕密码的有效期


<encrypted-storage /> //设置存储设备加密


<disable-camera /> //停用相机


</uses-policies>


</device-admin>

8.清除数据

1.拿到设备策略管理器


DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);


2.调用 wipeData 方法


dpm.wipeData(DevicePolicyManager.WIPE_EXTERNAL_STORAGE);

9.设置密码并锁屏

1.拿到设备策略管理器


DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);


2.设置密码调用 resetPassword 方法


dpm.resetPassword("123", 0);


3.锁屏调用 lockNow 方法


dpm.lockNow();

10.一键锁屏应用的问题

1.没有激活设备管理员,导致锁屏功能不能用


2.激活了设备管理员,导致不能卸载

10.一键锁屏的优化

1.如果未激活设备管理员权限,用代码打开设备管理员激活界面


DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);


ComponentName who = new ComponentName(this, MyAdmin.class);


if (dpm.isAdminActive(who)) {


dpm.lockNow();


} else {


Toast.makeText(this, "请先激活超级管理员", 0).show();


Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);


intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,who);


intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,


"请开启管理员权限,开启后可以锁屏,不装扣 500 块钱");


startActivity(intent);


}


2.要卸载具有设备管理员权限的应用,要首先将其设别管理员权限取消,然后在进行卸载


//取消设备管理员权限


DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);


ComponentName who = new ComponentName(this, MyAdmin.class);


dpm.removeActiveAdmin(who);


//卸载当前应用


Intent intent = new Intent();


intent.setAction("android.intent.action.DELETE");


intent.addCategory("android.intent.category.DEFAULT");


intent.setData(Uri.parse("package:"+getPackageName()));


startActivity(intent);

11.MD5 加密

1.获取 MessageDigest 实例


MessageDigest digest = MessageDigest.getInstance("md5");


2.使用 digest 获取加密后的 byte 数组


byte[] result = digest.digest(password.getBytes());


3.将加密后的 byte 数组转化为定长的 16 进制字符串


StringBuilder sb = new StringBuilder();


for(byte b : result){


int number = b&0xff-3;//加盐


String str = Integer.toHexString(number);


if(str.length()==1){


sb.append("0");


}


sb.append(str);


}


return sb.toString();


  • MD5 的全称是 Message-Digest Algorithm 5(信息-摘要算法),在 90 年代初由 MIT Laboratory for Computer Science 和 RSA Data Security Inc 的 Ronald L. Rivest 开发出来,经 MD2、MD3 和 MD4 发展而来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被”压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。

  • MD5 是哈希散列算法,对于 MD5 而言,有两个特性是很重要的,第一:明文数据经过散列以后的值是定长的;第二:是任意一段明文数据,经过散列以后,其结果必须永远是不变的。前者的意思是可能存在有两段明文散列以后得到相同的结果,后者的意思是如果我们散列特定的数据,得到的结果一定是相同的。

12.骚扰拦截需求分析

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android - 定位方式,火星坐标系统,一键锁屏,字节Android高工面试