在这篇文章中,我们将为您详细介绍Android手机定位实例代码的内容,并且讨论关于安卓定位代码的相关问题。此外,我们还会涉及一些关于80%的Android手机有风险!幸运的是,可以给Android加密
在这篇文章中,我们将为您详细介绍Android手机定位实例代码的内容,并且讨论关于安卓定位代码的相关问题。此外,我们还会涉及一些关于80%的Android手机有风险!幸运的是,可以给Android加密、Android 13 免root修改手机定位信息(一)、Android App开发超实用实例 | OpenCV在Android手机实现在图像上添加文本、Android GPS定位详解及实例代码的知识,以帮助您更全面地了解这个主题。
本文目录一览:- Android手机定位实例代码(安卓定位代码)
- 80%的Android手机有风险!幸运的是,可以给Android加密
- Android 13 免root修改手机定位信息(一)
- Android App开发超实用实例 | OpenCV在Android手机实现在图像上添加文本
- Android GPS定位详解及实例代码
Android手机定位实例代码(安卓定位代码)
下面是小编 jb51.cc 通过网络收集整理的代码片段。
小编小编现在分享给大家,也给大家做个参考。
import com.itheima.gpsdemo.R; import android.app.Activity; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.widget.TextView; /** * 手机定位程序代码 * * @author xuliugen * */ public class MainActivity extends Activity { // 用到位置服务 private LocationManager lm; private MyLocationListener listener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lm = (LocationManager) getSystemService(LOCATION_SERVICE); // 获得定位的方式 // List<String> provider = lm.getAllProviders(); // for(String l: provider){ // System.out.println(l); // } listener = new MyLocationListener(); // 注册监听位置服务 // 给位置提供者设置条件 Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); // 设置参数细化: // criteria.setAccuracy(Criteria.ACCURACY_FINE);//设置为最大精度 // criteria.setAltituderequired(false);//不要求海拔信息 // criteria.setbearingrequired(false);//不要求方位信息 // criteria.setCostAllowed(true);//是否允许付费 // criteria.setPowerRequirement(Criteria.POWER_LOW);//对电量的要求 String proveder = lm.getBestProvider(criteria,true); lm.requestLocationUpdates(proveder,listener); } @Override protected void onDestroy() { // Todo Auto-generated method stub super.onDestroy(); // 取消监听位置服务 lm.removeUpdates(listener); listener = null; } class MyLocationListener implements LocationListener { /** * 当位置改变的时候回调 */ public void onLocationChanged(Location location) { String longitude = "经度:" + location.getLongitude(); String latitude = "纬度:" + location.getLatitude(); String accuracy = "精确度:" + location.getAccuracy(); TextView textview = new TextView(MainActivity.this); textview.setText(longitude + "\n" + latitude + "\n" + accuracy); setContentView(textview); } /** * 当状态发生改变的时候回调 开启--关闭 ;关闭--开启 */ public void onStatusChanged(String provider,int status,Bundle extras) { } /** * 某一个位置提供者可以使用了 */ public void onProviderEnabled(String provider) { } /** * 某一个位置提供者不可以使用了 */ public void onProviderdisabled(String provider) { } } }
以上是小编(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给程序员好友。
80%的Android手机有风险!幸运的是,可以给Android加密
让我们想象一下你在旅途中回到了时间,智能手机在口袋里。让我们说一个中世纪的农民看到你使用这个奇怪的设备。当然,他们好奇 你能解释一下它的工作原理吗?大多数人不会因为某种原因 - 智能手机被设计为易于使用。这可能会造成一个问题:技术精明的罪犯可能会将非技术性消费者视为中世纪农民,以欺骗为主。最近几天,似乎就是这样。网络骗子以一种称为Linux内核的Android手机的技术组件为基础,尝试了一种新的策略。
要理解这种方法,一些背景信息是按顺序的。软件是内置的。想想一个房子的建造。屋顶由墙壁支撑,由脚手架支撑,由基础支撑。操作系统(如Android)也是如此。具体来说,Linux内核是Android设备的基础层。它定义应用程序如何与设备的硬件交互。
因此,如果网络犯罪分子可以利用Linux内核,他们可以直接进入你的手机。这是传统攻击的一个举措,流氓黑客通常必须渗透网站来发送您的设备恶意指令。使用新的方法,这不是必需的 - 如果没有中间人,您的设备的行为可以改变。
这是什么意思?想象一下:你恰好落在一个不知道的网站上,没有保证。突然间,您的手机显示登录提示。输入您的用户名和密码后,该信息现在处于肇事者手中。犯罪分子从自己的软件中深深地控制了你的设备的行为。专家估计,Linux内核问题可能会影响高达80%的Android手机。那是14亿个设备!
现在,在任何人惊慌之前,还有一些重要的注意事项可以帮助您放心使用Android智能手机。骗子不能简单地远程访问您的手机。要拉扯这个诀窍,他们必须利用您的设备连接,如网站,消息或其新闻Feed中共享的链接。具体来说,他们需要知道IP地址和来源。即使这样,需要10秒钟来测试连接,然后45秒注入恶意代码。所以这个攻击不太可能被大量地用于你平均的Joe。
同时,重要的是让人们意识到大小小的Android加密和安全问题。受教育程度越高的用户越能保护自己。因为我们知道Linux内核黑客需要访问你的手机的连接,所以我们可以防范这个被利用的漏洞。通过使用加密通信,网络犯罪分子可以被拒绝进入。
这里有一些使用的提示,这解释了加密如何保护您的Android:
访问移动网站时,请在“https”中查找“s”。有流量的标准确保您的连接是安全的,但不是所有的网站都遵循。幸运的是,您可以在手机上找到您访问的保险箱。为此,只需检查网站地址是否以“https”开头。在某些浏览器的情况下,该部分是隐藏的,但通常会有内置的功能,让您知道网站是否安全。
使用有信誉的网络和移动应用程序。当大公司拥有很多用户和大量资源时,他们会努力保护他们的应用程序。例如,Gmail不仅加密消息的内容,还加密了传输连接。尝试避免神秘的第三方应用程序。
确保更新您的Android。随着安全问题的发现,公司更新其软件来实施新的防御措施。虽然这个Linux内核问题会影响Android的新版本,而不是旧的版本,但这实际上是例外。一般来说,更新设备总是很好,特别是Android加密技术的改进。
文章地址:http://www.kiwisec.com/news/detail/59a51596888d6c5f056d0ee4.shtml
Android 13 免root修改手机定位信息(一)
前言
定位信息是用户的重要隐私,一些情况下,用户不愿意将自己真实的定位信息泄露给某些有风险的APP,防止应用过度采集用户隐私信息。但是不授权某些功能又无法使用,本文将介绍如何解决这个问题,先讲一下大致实现思路。
实现思路
一般情况下,可以使用虚拟定位APP,其原理大致是应用多开,给多开的软件提供一个虚拟的运行环境,这样软件就获得了一个虚假的定位信息,就无法得到用户的真实位置。
当然,我们也可用使用注入技术,将提供定位信息的接口hook,这样也可以令风险应用无法获取真是位置信息。
但是,上面两种方案,都存在一个致命的问题,即很容易被检测,很难用于一些带有作弊检测机制的风险APP。所以为了解决这个问题,我们计划通过改造系统解决这个问题,因为应用层的软件很难监测到系统的问题。所以我们需要对Android系统代码进行改造,对系统进行定制化开发。
下图是Android系统结构图。
Android系统支持卫星定位、网络定位以及被动定位等定位方式,其中卫星定位使用到了传感器,网络定位以及被动定位的逻辑是在framwork层实现的。如果我们开发一个接口,控制其返回给应用层的信息,我们并不需要对定位模块整体进行二次开发,只需要了解其定位信息传递的路径,在关键路径上进行拦截,将被拦截的定位信息修改为我们设置的即可。
定位的请求过程贯穿整个Android,从应用层到framework,framework到jni,从jni到hal,再从hal到内核,然后再原路返回,framework是其必经之路,所以我们在framework层面上做改造,拦截真实定位信息将其替换即可。
在之后的章节里,我们将介绍如何一步步实现。
Android App开发超实用实例 | OpenCV在Android手机实现在图像上添加文本
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,它可以运行在Linux、Windows、Android和Mac OS等操作系统上。OpenCV原本由一系列 C 函数和少量 C++ 类构成,同时提供了Python等其他语言的接口,它实现了图像处理和计算机视觉方面的很多通用算法。下面这个实例演示了使用OpenCV在Android手机实现在图像上绘制文本。本文提供的OpenCV实例使用Java语言编写,并且运行在Android手机上。
01、实例功能
此实例主要通过使用Imgproc的putText()方法,实现在图像上绘制(添加)文本。Imgproc是Image和Processing这两个单词的缩写组合,它是OpenCV的图像处理模块,该模块包含如下内容:线性和非线性的图像滤波、图像的几何变换、图像转换、直方图相关、结构分析和形状描述、运动分析和对象跟踪、特征检测、目标检测等。
当实例运行之后,单击“显示原始图像”按钮,原始图像的效果如图1(a)所示。单击“在图像上添加文本”按钮,在图像上添加文本(OpenCV)之后的效果如图1(b)所示。
02、实现代码
public class MainActivity extends Activity {
ImageView myImageView;
Bitmap myBitmap;
static{ System.loadLibrary("opencv_java3");} //加载OpenCV库
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myImageView = (ImageView) findViewById(R.id.myImageView);
myBitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.myimage1);
}
public void onClickButton1(View v) { //响应单击按钮“显示原始图像”
myImageView.setimageBitmap(myBitmap);
}
public void onClickButton2(View v) { //响应单击按钮“在图像上添加文本”
Bitmap myNewBitmap=Bitmap.createBitmap(myBitmap.getWidth(),myBitmap.getHeight(),Bitmap.Config.RGB_565); //根据原始图像创建空Bitmap
Mat myMat=new Mat();
Utils.bitmapToMat(myBitmap,myMat); //将原始图像保存至myMat
Point myPoint=new Point(300,700); //定义绘制文本的起始位置
Scalar myScalar=new Scalar(255,255); //设置绘制文本的颜色
//在图像上添加文本(仅支持英文、符号等,中文暂不支持)
Imgproc.putText(myMat,"OpenCV",myPoint,Core.FONT_HERShey_COMPLEX,4,myScalar,3);
//将添加文本之后的图像输出至myNewBitmap
Utils.matToBitmap(myMat,myNewBitmap);
//通过ImageView控件显示叠加文本之后的图像
myImageView.setimageBitmap(myNewBitmap);
}
}
03、代码说明
上面这段代码在MyCode\MySampleK31\app\src\main\java\com\bin\luo\mysample\ MainActivity.java文件中。在这段代码中,Imgproc的putText()方法用于在图像上添加文字(字母),该方法的语法声明如下:
其中,参数Mat img表示待绘制的图像;参数String text表示待绘制的文字;参数Point org表示文字的起点坐标;参数int fontFace表示字体;参数double fontScale表示文字大小因子,值越大文字越大;参数Scalar color表示文字颜色;参数int thickness表示文字线条宽度。
Utils.bitmapToMat(myBitmap,myMat)用于将Bitmap输出到Mat,该方法的语法声明如下:
其中,参数Bitmap bmp表示源Bitmap,支持ARGB_8888和RGB_565像素类型;参数Mat mat表示目标Mat,默认类型是CV_8UC4类型,大小和Bitmap一样,通道顺序为RGBA。
Utils.matToBitmap(myMat,myNewBitmap)用于将Mat输出到Bitmap,该方法的语法声明如下:
其中,参数Mat mat表示源Mat,支持CV_8UC1,CV_8UC3或CV_8UC4类型;参数Bitmap bmp表示目标Bitmap,支持ARGB_8888或RGB_565类型。
static{ System.loadLibrary("opencv_java3");}表示加载OpenCV库。默认情况下,在Android中使用OpenCV需要导入相关的库文件,具体操作步骤如下。
(1) 从https://opencv.org/releases.html页面中单击Android pack超链接,稍等一会儿即可弹出“新建下载任务”对话框,然后在该对话框中单击“下载”按钮,执行下载操作,如图2所示。在下载完成之后解压文件即可。在此实例中,可以忽略此步骤,直接从源代码中复制openCVLibrary345copy文件夹到项目即可。
(2) 在Android Studio菜单上依次选择File\New\Import Module...,弹出Import Module from Source对话框。在该对话框中单击“Source directory:”右端的文件夹按钮,然后选择openCVLibrary345copy文件夹,会出现错误(重复)提示。直接在“Module name:”输入框中将openCVLibrary345copy修改为openCVLibrary345,错误提示消失,如图3所示。再单击Finish按钮即可。
(3) 按照如下粗体字所示修改MyCode\MySampleK31\app\build.gradle文件。完成之后同步(Sync Now)即可。
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsversion "29.0.2"
defaultConfig {
applicationId "com.bin.luo.mysample"
minSdkVersion 27
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro'
}
}
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
}
dependencies {
implementation filetree(dir: 'libs',include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
implementation project(':openCVLibrary345')
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
(4) 复制MyCode\MySampleK31\app\libs文件夹下的所有内容到(用户的)项目中即可。该文件夹及其子文件夹的文件与手机cpu的类型有关,缺少这些文件在编译或运行时会报错或无响应。
特别说明 /
在测试前必须从MyCode\MySampleK31\app\libs文件夹复制该文件夹中的所有子文件夹及其文件到(用户的)项目的libs文件夹。
04、补充说明
在测试代码时,必须保持网络畅通。
Android GPS定位详解及实例代码
GPS定位是智能手机上一个比较有意思的功能,LBS等服务都有效的利用了GPS定位功能。本文就跟大家分享下Android开发中的GPS定位知识。
一、Android基础知识准备
1、Activity类
每一种移动开发环境都有自己的基类。如J2ME应用程序的基类是midlets,BREW的基类是applets,而Android程序的基类是Activity。这个activity为我们提供了对移动操作系统的基本功能和事件的访问。这个类包含了基本的构造方法,键盘处理,挂起来恢复功能,以及其他底层的手持设备的访问。实质上,我们的应用程序将是一个Activity类的扩展。在本文中读者将会通过例子学习到如何使用Activity类来编写Android程序。下面是一个简单的继承Activity的例子。
Java代码
public class LocateMe extends Activity { public void onCreate(Bundle params) { super.onCreate(params); setContentView(R.layout.main); } public boolean onKeyDown(int keyCode,KeyEvent event) { return true; } }
在上面程序中的onCreate方法将在应用程序第一次开始时调用。Bundle对象包含了任何用于建立参数或环境数据所需要的基本信息。Activity 可以是全屏的,或是悬浮的。它们可以是嵌套的,但是每一部分基本是独立的。那么,也许有人会问,setContentView是做什么的呢?
2、View类
View类是Android的一个超类,这个类几乎包含了所有的屏幕类型。但它们之间有一些不同。每一个view都有一个用于绘画的画布。这个画布 可以用来进行任意扩展。本文为了方便起见,只涉及到了两个主要的View类型:定义View和Android的XML内容View。在上面的代码中,使用 的是“Hello World” XML View,它是以非常自然的方式开始的。
如果我们查看一下新的Android工程,就会发现一个叫main.xml的文件。在这个文件中,通过一个简单的XML文件,描述了一个屏幕的布局。这个简单的xml文件的内容如下:
XML/HTML代码
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:text="Press the center key to locate yourself" /> </RelativeLayout>
上面的内容的功能看起来非常明显。这个特殊文件定义了一个相关的布局,这就意味着通过一个元素到另一个元素的关系或是它们父元素的关系来描述。对于视图来说,有一些用于布局的方法,但是在本文中只关注于上述的xml文件。
RealtiveLayout中包含了一个填充整个屏幕的文本框(也就是我们的LocateMe activity)。这个LocateMe activity在默认情况下是全屏的,因此,文本框将继承这个属性,并且文本框将在屏幕的左上角显示。另外,必须为这个XML文件设置一个引用数,以便 Android可以在源代码中找到它。在默认情况下,这些引用数被保存在R.java中,代码如下:
Java代码
public final class R { public static final class layout { public static final int main=0x7f030001; } }
视图也可以被嵌套,但和J2ME不同,我们可以将定制的视图和Android团队发布的Widgets一起使用。在J2ME中,开发人员被迫选择 GameCanvas和J2ME应用程序画布。这就意味着如果我们想要一个定制的效果,就必须在GameCanvas上重新设计我们所有的widget。 Android还不仅仅是这些,视图类型也可以混合使用。Android还带了一个widget库,这个类库包括了滚动条,文本实体,进度条以及其他很多 控件。这些标准的widget可以被重载或被按着我们的习惯定制。现在让我们来进入我们的例子。
二、Android GPS定位实例
这个演示应用程序将演示了用户的当前的经度和纬度(在文本框中显示)。onCreate构造方法将和上面的例子基本相同,除了在其中加入了键盘处理,现在让我们看一下onKeyDown的代码。
Java代码
public boolean onKeyDown(int keyCode,KeyEvent event) { if(keyCode != KeyEvent.KEYCODE_DPAD_CENTER || m_bLoading) { return true; } m_bLoading = true; getLocation(); return true; }
下面让我们来解释一下这段代码,首先,这段代码检查了当前被按下的键,但还没有开始处理。而是在getLocation方法中处理这一切的。然后,将装载flag标志以及调用getLocation方法,下面是getLocation方法的代码。
Java代码
private void getLocation() { Location loc; LocationManager locMan; LocationProvider locPro; List<LocationProvider> proList; setContentView(R.layout.laoding); locMan = (LocationManager) getSystemService(LOCATION_SERVICE); proList = locMan.getProviders(); locPro = proList.get(0); loc = locMan.getCurrentLocation(locPro.getName()); Lat = (float)loc.getLatitude(); Lon = (float)loc.getLongitude(); CreateView(); setContentView(customView); }
到此为止,程序开始变得更有趣了。但是不幸的是,Google关于之方面的文档还是比较少了。在程序的变量声明之后,我们需要演示一些装载信息。R.layout.loading符合了另一个简单的XML布局视图。通过简单地调用setContentView方法可以使用转载信息重绘屏幕。
读者要注意的是:在编译时,Android会预先将所有的XML布局数据包装起来。如果我们想在编译后变化布局属性,按着规定,我们必须在源程序中做这些事。
获得LocationManager的唯一方法是通过getSystemService()方法的调用。通过使用LocationManager,我们可以获得一个位置提供者的列表。在一个真实的手持设备中,这个列表包含了一些GPS服务。实际上,我们希望选择更强大,更精确,最后不带有其他附加服务的GPS。现在,在模拟器中提供了一个用于测试的GPS,这个GPS来自San Francisco。定制的GPS文件可以可以被上传,并进行测试。如果我们要测试更复杂的应用,来自San Francisco的GPS可能并不适合。
目前我们可以使用位置管理器和位置提供者进行getCurrentLocation的调用。这个方法返回本机的当前位置的一个快照,这个快照将以 Location对象形式提供。在手持设备中,我们可以获得当前位置的经度和纬度。现在,使用这个虚拟的手持设备,我们可以获得这个例子程序的最终结果: 建立了显示一个定制的视图。
三、使用定制视图
在最简单的窗体中,一个Android中的视图仅仅需要重载一个onDraw方法。定制视图可以是复杂的3D实现或是非常简单的文本形式。下面的CreateView方法列出了上面看到的内容。
Java代码
public voidCreateView(){ customView = newCustomView(this); }
这个方法简单地调用了CustomView对象的构造方法。CustomView类的定义如下:
Java代码
public class CustomView extendsView{ LocateMe overlord; publicCustomView(LocateMe pCtx){ super(pCtx); overlord = pCtx; } public voidonDraw(Canvas cvs){ Paint p = newPaint(); String sLat = "Latitude: "+ overlord.getLat(); String sLon = "Longitude: "+ overlord.getLon(); cvs.drawText(sLat,32,p); cvs.drawText(sLon,44,p); } }
这个定制的Android视图获得了经度和违度的测试数据,并将这些数据显示在屏幕上。这要求一个指向LocateMe的指针,Activity类是整个应用程序的核心。它的两个方法是构造方法和onDraw方法。这个构造方法调用了超类的构造方法以及引起了Activity指针的中断。 onDraw方法将建立一个新的Paint对象(这个对象封装了颜色、透明度以及其他的主题信息),这个对象将会访问颜色主题。在本程序中,安装了用于显 示的字符串,并使用画布指针将它们画到屏幕上。这个和我们了解的J2ME游戏的画布看起来非常类似。
感谢阅读本文,希望能帮助到有需要的朋友,谢谢大家对本站的支持!
今天关于Android手机定位实例代码和安卓定位代码的分享就到这里,希望大家有所收获,若想了解更多关于80%的Android手机有风险!幸运的是,可以给Android加密、Android 13 免root修改手机定位信息(一)、Android App开发超实用实例 | OpenCV在Android手机实现在图像上添加文本、Android GPS定位详解及实例代码等相关知识,可以在本站进行查询。
本文标签: