引言
- Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由 操作系统、中间件、用户界面和应用软件组成。中国大陆地区较多人使用“安卓”或“安致”。
-
Android旱期重大时间点
- 2003年10月,Andy Rubin等人创建Android公司,并组建Android团队。
- 2005年8月17日,Google低调收购了成立仅22个月的高科技企业Android及其团队。
- 2007年11月5日,开放手持设备联盟(Open Handset Alliance)成立。
- 2008年9月,谷歌正式发布了Android 1.0系统,这也是Android系统最早的版本。
- 2008年10月22日,第一款Android手机,HTC-G1上市。
安卓体系结构图
系统构架分为四层,从高到低分别是,(详见下图):
- Android应用层
- Android应用框架层
- Android系统运行层
- Linux内核层
- 应用程序层
该层提供一些核心应用程序包,例如电子邮件、短信、日历、地图、浏览器和联系人管理等。同时,开发者可以利用Java语言设计和编写属于自己的应用程序,而这些程序与那些核心应用程序彼此平等、友好共处。
- 应用程序框架层
该层是Android应用开发的基础,开发人员大部分情况是在和它打交道。应用程序框架层包括活动管理器、窗口管理器、内容提供者、视图系统、包管理器、电话管理器、资源管理器、位置管理器、通知管理器和XMPP服务十个部分。在Android平台上,开发人员可以完全访问核心应用程序所使用的API框架。并且,任何一个应用程序都可以发布自身的功能模块,而其他应用程序则可以使用这些已发布的功能模块。基于这样的重用机制,用户就可以方便地替换平台本身的各种应用程序组件。
- 系统库和安卓运行时
系统库包括九个子系统,分别是图层管理、媒体库、SQLite、OpenGLEState、FreeType、WebKit、SGL、SSL和libc。Android运行时包括核心库和Dalvik虚拟机,前者既兼容了大多数Java语言所需要调用的功能函数,又包括了Android的核心库,比如android.os、android.net、android.media等等。后者是一种基于寄存器的java虚拟机,Dalvik虚拟机主要是完成对生命周期的管理、堆栈的管理、线程的管理、安全和异常的管理以及垃圾回收等重要功能。
- Linux内核
Android核心系统服务依赖于Linux2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux内核也是作为硬件与软件栈的抽象层。驱动:显示驱动、摄像头驱动、键盘驱动、WiFi驱动、Audio驱动、flash内存驱动、Binder(IPC)驱动、电源管理等。
安卓版本命名
版本命名一览
API level | Android版本 | English Name | 中文名 | 发布日期 |
---|---|---|---|---|
1 | 1 | 2008/9/23 | ||
2 | 1.1 | 2009/2/9 | ||
3 | 1.5 | Cupcake | 纸杯蛋糕 | 2009/4/27 |
4 | 1.6 | Donut | 甜甜圈 | 2009/9/19 |
5 - 7 | 2.0 - 2.1 | Eclair | 闪电泡芙 | 2009/10/26 |
8 | 2.2 | Froyo | 冻酸奶 | 2010/5/20 |
9 - 10 | 2.3 - 2.3.7 | Gingerbread | 姜饼 | 2010/12/6 |
11 - 13 | 3.0 - 3.2.6 | Honeycomb | 蜂巢 | 2011/2/22 |
14 - 15 | 4.0 - 4.0.4 | Ice Cream Sandwich | 冰激凌三明治 | 2011/10/18 |
16 - 18 | 4.1 - 4.3.1 | Jelly Bean | 糖豆 | 2012/7/9 |
19 - 20 | 4.4 - 4.4.4 | KitKat | 奇巧巧克力棒 | 2013/10/31 |
21 - 22 | 5.0 - 5.1.1 | Lollipop | 棒棒糖 | 2014/11/12 |
23 | 6.0 - 6.0.1 | Marshmallow | 棉花糖 | 2015/10/5 |
24 - 25 | 7.0 - 7.1.2 | Nougat | 牛轧糖 | 2016/8/22 |
26 - 27 | 8.0 - 8.1 | Oreo | 奥利奥 | 2017/8/21 |
28 | 9 | Pie | 派 | |
甜点命名
彩蛋
在安卓系统中,有不少内部工程师放进去的彩蛋。设置->关于手机->连续点击"Android版本"
- 安卓9.0 彩蛋
Android开发编程语言
- Java : 官方开发语言
对于世界各地的移动应用开发人员来说,首选的、也是最受欢迎的编程语言莫过于Java。它是Android应用开发的官方语言,Google不但能完全支持它,而且Play Store中的大多数应用也都是用它来构建的。
- Kotlin :第二官方开发语言
和Java一样,Kotlin也运行在Java虚拟机之上。它与Java具有完全的互操作性,不会因为文件大小的增加,而造成障碍。
- C/C++ : 原生开发(Native Development)
Android Studio通过使用Android原生开发工具(Native Development)来支持C/C++。您不必编写在Java虚拟机上运行的代码,而能够将代码在设备上本地原生地运行,并且可以控制内存之类的部件。对于一些3D要求高的游戏应用,您可以使用C或C++编写的库,来获取Android设备上的特有性能。
- C# :Unity游戏引擎
C#是纯粹面向对象的C和C++版本。微软保留了C++的强大功能和Visual BASIC的简约性,它有点类似于Java的简化版。和Java相同,C#也具有垃圾回收功能,因此您不需要担心内存泄漏、或考虑自行释放内存等问题。同时相对于Java来说,C#的语法更为清晰。
Unity是一款“游戏引擎”,它提供诸如物理计算、3D图形渲染、以及类似Android Studio的IDE。它是一个开源的工具,您能很容易地创建出自己的游戏,并能获得其强大社区的支持。只需几行代码,您就可以在一小时之内搭建出一个基本的游戏平台。作为Google Play Store里大多数游戏工作室所使用的工具,它是跨平台的。由于一直使用的是对象,其开发模式还能提供学习面向对象编程的实战方法。 - HTML+CSS+JS : PhoneGap跨平台开发
由Apache Cordova带来的PhoneGap,允许您使用HTML、CSS和t这些常用于创建网站的编程语言。PhoneGap就像桥梁一样,允许开发者访问手机或平板电脑上的一些原生功能,如计算器或相机等。
PhoneGap实际上不是真正的“Android”开发,而只是用到了t进行编程。因此它所完成的只是一些基本的任务,而如果您想成为真正的Android应用开发者的话,还是请从前面的列表中选择语言吧。
开发环境搭建
Eclipse + ADT插件
-
Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。我们可以通过在Eclipse中添加ADT(Android Development Tools)安卓开发工具,来搭建安卓开发环境。
搭建步骤:
1.安装JDK
2.配置Windows上JDK的变量环境- 下载安装Eclipse
4.下载安装Android SDK
5.为Eclipse安装ADT插件
[Eclipse + ADT插件开发环境搭建教程](https://www.cnblogs.com/xiongwei/p/8042698.html)
Android studio
-
Android Studio 是谷歌推出的一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试。
在IDEA的基础上,Android Studio 提供 :
- 基于Gradle的构建支持
- Android 专属的重构和快速修复
- 提示工具以捕获性能、可用性、版本兼容性等问题
- 支持ProGuard 和应用签名
- 基于模板的向导来生成常用的 Android 应用设计和组件
- 功能强大的布局编辑器,可以让你拖拉 UI 控件并进行效果预览
- Android Studio 方式搭建安卓开发环境极其简单,无需配置环境变量,也不需要单独安装其它插件。首次启动根据引导安装安装Android SDK,即可开始安卓开发。
搭建步骤:
1. 下载 Android studio:通过上述链接,按照操作系统选择下载版本。
2. 运行android-studio\bin\studio.exe(64位系统运行studio64.exe)
3. 首次启动时,会有如下弹窗,如图选择不导入配置信息。
AIDE
- AIDE是一个Android/Java集成开发环境,可以在Android手机上进行Android软件和游戏的开发,而无需借助PC。
AIDE是一个集成开发环境(IDE),可直接在Android设备上进行Android应用开发。AIDE支持完整的编程操作:其代码编辑器功能丰富,如 一键 修补代码,实时错误检查,重构,智能搜索/跳转代码和运行编译好的应用程序。
AIDE将成为一个真正的支持Android平板电脑键盘的开发工具。AIDE使用Ice Cream Sandwich(ICS)的Code Helper来检查代码。AIDE将Android手机变成了一个小型开发计算机,随时随地浏览和编辑代码。
AIDE完全兼容Eclipse项目。只要将源码复制到Android设备,用AIDE打开源码目录,加载项目,就可以开始编程。
Hello world
创建HelloWorld应用程序
- 启动Android Studio
-
新建项目
- 新建项目中有多个项目模板,可以选择手机/平板、穿戴设备、安卓TV、车载设备,这里选择空项目。
+ 项目名称、包名、支持最小版本号、开发语言。
工程文件结构简述
-
Hello World项目文件如下,文件分为3类:
- java源码
- 资源文件
- 配置文件(Android Manifest.xml)
源码预览
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
- Activity是Android的核心类,也是安卓平台重要组件。Activity相当于C/S程序的窗体(Form)或Web中的页面。一个应用可以由一个或多个Activity组成,Activity的间关系,取决于应用程序业务逻辑。
Activity窗体都是继承Activity类,默认情况下Activity是独占整个屏幕的,Activity中可以有任意数量可视化组件(下文统称控件),控件由View及其子类组成,控件按xml布局文件控制外观表现。
activity_main.xml(布局文件)
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Android Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.hellowworld">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
程序运行调试
- 安卓应用运行调试有两种方式,分别是模拟器调试和实机调试。
模拟器调试
- 模拟器指的是安卓模拟上,并非真实的安卓设备上运行调试应用程序。Android SDK中有 AVD Manager(安卓虚拟设备管理器),可以配置模拟出不同版本,不同尺寸,不同配置的安卓设备,但虚拟设备会占用宿主主机资源,性能通常无法模拟真实设备,而且涉及硬件设备如相机、陀螺仪时,无法模拟真实情况。模拟器调试需要先创建安卓虚拟设备。
实机调试
- 在真实的安卓设备运行调试应用程序:通过USB连接安卓设备,并在测试安卓设备开启“开发者模式”,方可调试。
简单控件使用和事件响应
- 添加一个Button:在布局文件中根标签添加
<Button
android:id="@+id/my_button"
......
android:text="@string/app_name"
/>
- 在Activity中获取按钮:
Button myButton = findViewById(R.id.my_button);
- 添加监听器,响应监听:
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this,"Button点击",Toast.LENGTH_SHORT).show();
Log.i("onclick","点击");
}
});
基本布局方式
- Linear Layout(线性布局)
线性布局在开发中使用最多,具有垂直方向与水平方向的布局方式,通过设置属性“android:orientation”控制方向,属性值垂直(vertical)和水平(horizontal),默认水平方向。
- RelativeLayout(相对布局)
相对布局可以让子控件相对于兄弟控件或父控件进行布局,可以设置子控件相对于兄弟控件或父控件进行上下左右对齐。
RelativeLayout能替换一些嵌套视图,当我们用LinearLayout来实现一个简单的布局但又使用了过多的嵌套时,就可以考虑使用RelativeLayout重新布局。
相对布局就是一定要加Id才能管理。 - FrameLayout(帧布局)
帧布局或叫层布局,从屏幕左上角按照层次堆叠方式布局,后面的控件覆盖前面的控件。
该布局在开发中设计地图经常用到,因为是按层次方式布局,我们需要实现层面显示的样式时就可以
采用这种布局方式,比如我们要实现一个类似百度地图的布局,我们移动的标志是在一个图层的上面。
在普通功能的软件设计中用得也不多。层布局主要应用就是地图方面。
- AbsoluteLayout(绝对布局)
绝对布局中将所有的子元素通过设置android:layout_x 和 android:layout_y属性,将子元素的坐标位置固定下来。因为Android终端一般机型比较多,各自的屏幕大小。分辨率等可能都不一样,如果用绝对布局,可能导致在有的终端上显示不全等。
- TableLayout(表格布局)
表格布局,适用于多行多列的布局格式,每个TableLayout是由多个TableRow组成,一个TableRow就表示TableLayout中的每一行,这一行可以由多个子元素组成。
- GridLayout(网格布局)
android 4.0 后新增的一个布局,与前面介绍过的TableLayout(表格布局)其实有点大同小异,容器中的组件可以跨多行也可以跨多列。
- ConstraintLayout(约束布局)
现在取代RelativeLayout成了创建空Activity的默认布局,非常非常强大,操作非常简洁。
安卓应用四大组件
- Activity
- Service
- Broadcast Receiver
- Content Provider
Activity
Activity 生命周期
onCreate() 这是第一个回调,在活动第一次创建时调用
onStart() 这个回调在活动为用户可见时被调用
onResume() 这个回调在应用程序与用户开始可交互的时候调用
onPause() 被暂停的活动无法接受用户输入,不能执行任何代码。当当前活动将要被暂停,上一个活动将要被恢复是调用
onStop() 当活动不在可见时调用
onDestroy() 当活动被系统销毁之前调用
onRestart() 当活动被停止以后重新打开时调用
一个程序搞懂生命周期
MainActivity.java
public class MainActivity extends AppCompatActivity {
private static final String TAG = "LifeCycleActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "onCreate called.");
}
//Activity创建或者从后台重新回到前台时被调用
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "onStart called.");
}
//Activity从后台重新回到前台时被调用
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, "onRestart called.");
}
//Activity创建或者从被覆盖、后台重新回到前台时被调用
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume called.");
}
//Activity被覆盖到下面或者锁屏时被调用
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "onPause called.");
//有可能在执行完onPause或onStop后,系统资源紧张将Activity杀死,所以有必要在此保存持久数据
}
//退出当前Activity或者跳转到新Activity时被调用
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "onStop called.");
}
//退出当前Activity时被调用,调用之后Activity就结束了
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestory called.");
}
}
Service
Service(服务)是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件。服务可由其他应用组件启动(如Activity),服务一旦被启动将在后台一直运行,即使启动服务的组件(Activity)已销毁也不受影响。 此外,组件可以绑定到服务,以与之进行交互,甚至是执行进程间通信 (IPC)。 例如,服务可以处理网络事务、播放音乐,执行文件 I/O 或与内容提供程序交互,而所有这一切均可在后台进行。Service基本上分为两种形式:
- 启动状态
当应用组件(如 Activity)通过调用 startService() 启动服务时,服务即处于“启动”状态。一旦启动,服务即可在后台无限期运行,即使启动服务的组件已被销毁也不受影响,除非手动调用才能停止服务, 已启动的服务通常是执行单一操作,而且不会将结果返回给调用方。
- 绑定状态
当应用组件通过调用 bindService() 绑定到服务时,服务即处于“绑定”状态。绑定服务提供了一个客户端-服务器接口,允许组件与服务进行交互、发送请求、获取结果,甚至是利用进程间通信 (IPC) 跨进程执行这些操作。 仅当与另一个应用组件绑定时,绑定服务才会运行。 多个组件可以同时绑定到该服务,但全部取消绑定后,该服务即会被销毁。
Service 生命周期
Broadcast Receiver
在Android中,广播是一种广泛运用的在应用程序之间传输信息的机制。而广播接收器是对发送出来的广播进行过滤接受并响应的一类组件。可以使用广播接收器来让应用对一个外部时间做出响应。例如,当电话呼入这个外部事件到来时,可以利用广播接收器进行处理。当下载一个程序成功完成时,仍然可以利用广播接收器进行处理。广播接收器不NotificationManager来通知用户这些事情发生了。广播接收器既可以在AndroidManifest.xml中注册,也可以在运行时的代码中使用Context.registerReceive()进行注册。只要是注册了,当事件来临时,即使程序没有启动,系统也在需要的时候启动程序。各种应用还可以通过使用Context.sendBroadcast()将它们自己的Intent广播给其他应用程序。
- MyRecever.java
public class MyRecever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String msg=intent.getAction()+"\n";
Log.i("s", msg);
Toast.makeText(context, msg, Toast.LENGTH_LONG).show();
}
}
- AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xyk.brocastereg"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:targetSdkVersion="24" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".MyRecever">
<intent-filter>
<action android:name="android.intent.action.TIME_TICK" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
</receiver>
</application>
</manifest>
- MianActivity.java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new MyRecever();
}
}
Content Provider
内容提供者组件通过请求从一个应用程序向其他的应用程序提供数据。这些请求由类 ContentResolver 的方法来处理。内容提供者可以使用不同的方式来存储数据。数据可以被存放在数据库,文件,甚至是网络。有时候需要在应用程序之间共享数据。这时内容提供者变得非常有用。
Android 资源文件
资源文件列表
资源文件通常保存在res文件目录下,res目录下资源详解如下:
- res/animator : 属性动画的XML文件目录, 属性动画就是定义起始结束, 动做, 重复时间等参数齐全的动画;
- res/anim : 补间动画的XML文件目录, 补间动画是只定义 起始 结束帧, 中间的动作由系统进行计算获取动作过程;
- res/color : 颜色列表的XML文件目录;
- res/drawable : 存放真实的位图文件, 也可以存放Drawable对象及子类对象的XML文件;
- res/layout : 界面布局文件目录;
- res/menu : 程序中使用的菜单文件目录, 该文件下的XML文件可以应用与 选项菜单, 子菜单, 上下文菜单等;
- res/raw : 存放原生资源, 与assets目录作用相同, 可以通过调用openRawResource(int)方法获取二进制输入流, 与asstes相似, 使用AssetsManager访问这些资源;
- res/value : 存放 字符串. 整数, 颜色, 数组 信息的 XML文件的目录, 这些XML文件资源的根元素是resource;
- res/xml : 原生的XML文件, 可以使用 Resource.getXML()方法进行访问;
资源的使用
-
在java文件中引用资源
my_app.setText(R.string.app_name);
setContentView(R.layout.activity_main);
-
在xml文件中引用资源
android:text="@string/app_name"
Activity间通信和Intent
Android 数据存储
- SharedPreferences
- SQLite
- 文件存储 (SD卡存储)
SharedPreferences
-
SharedPreferences是Android平台上一个轻量级的存储辅助类,用来保存应用的一些常用配置,它提供了string,set,int,long,float,boolean六种数据类型。最终数据是以xml形式进行存储。在应用中通常做一些简单数据的持久化缓存。
实现SharedPreferences存储的步骤如下:
- 根据Context获取SharedPreferences对象
- 利用edit()方法获取Editor对象。
- 通过Editor对象存储key-value键值对数据。
- 通过commit()方法提交数据。
SQLite
- SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
Android提供了创建和是用SQLite数据库的API。SQLiteDatabase代表一个数据库对象,提供了操作数据库的一些方法。在Android的SDK目录下有sqlite3工具,我们可以利用它创建数据库、创建表和执行一些SQL语句。下面是SQLiteDatabase的常用方法。
文件存储
- 使用内部存储
Context提供了两个方法来打开数据文件里的文件IO流 FileInputStream openFileInput(String name); FileOutputStream(String name , int mode),这两个方法第一个参数 用于指定文件名,第二个参数指定打开文件的模式。该方式存储数据为私有,其它应用无法访问,当应用卸载时,数据一并被删除。
- 使用外部存储(sdcard)
访问外部存储文件,需要申请读/写外部存储权限通过IO访问文件.
安卓权限 Permission
我们在安装Android软件的时候,系统会提示该软件所需要的权限,相对于其他系统,android的权限非常多。我们在开发软件的时候,也需要声明相应的权限,比如希望软件能发短信,需要声明软件调用短信的权限,否则软件运行的时候就会报错。
Android的权限在AndroidManifest.xml文件里配置。AndroidManifest文件中有四个标签与permission有关,它们分别是 <permission>、 <permission-group> 、<permission-tree> 和 <uses-permission>。其中最常用的是 <uses-permission>,当我们需要获取某个权限的时候就必须在我们的manifest文件中声明<uses-permission>。
- 例如,短信和电话权限的定义:
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.SEND_SMS"/>
危险权限
权限组 | 权限列表 |
---|---|
android.permission-group.CALENDAR | android.permission.READ_CALENDAR |
(允许程序读取用户的日程信息) | |
android.permission-group.CAMERA | android.permission.CAMERA |
(允许访问摄像头进行拍照) | |
android.permission-group.CONTACTS | android.permission.READ_CONTACTS |
(允许应用访问联系人通讯录信息) | |
android.permission.WRITE_CONTACTS | |
(写入联系人,但不可读取) | |
android.permission.GET_ACCOUNTS | |
(访问GMail账户列表) | |
android.permission-group.LOCATION | android.permission.ACCESS_COARSE_LOCATION |
(通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米) | |
android.permission.ACCESS_FINE_LOCATION | |
(通过GPS芯片接收卫星的定位信息,定位精度达10米以内) | |
android.permission-group.MICROPHONE | android.permission.RECORD_AUDIO |
(录制声音通过手机或耳机的麦克) | |
android.permission-group.PHONE | android.permission.READ_PHONE_STATE |
(访问电话状态) | |
android.permission.CALL_PHONE | |
(允许程序从非系统拨号器里输入电话号码) | |
android.permission.READ_CALL_LOG | |
(允许应用程序读取用户的通话记录) | |
android.permission.WRITE_CALL_LOG | |
(允许一个程序写入(但不读取)用户的通话记录资料) | |
com.android.voicemail.permission.ADD_VOICEMAIL | |
(允许应用程序添加语音邮件进入系统) | |
android.permission.USE_SIP | |
(允许程序使用SIP视频服务) | |
android.permission.PROCESS_OUTGOING_CALLS | |
(允许程序监视,修改或放弃播出电话) | |
android.permission-group.SENSORS | android.permission.BODY_SENSORS |
(允许从传感器,用户使用来衡量什么是他/她的身体内发生的事情,如心脏速率访问数据的应用程序) | |
android.permission-group.SMS | android.permission.SEND_SMS |
(发送短信) | |
android.permission.RECEIVE_SMS | |
(接收短信) | |
android.permission.READ_SMS | |
(读取短信内容) | |
android.permission.RECEIVE_WAP_PUSH | |
(接收WAP PUSH信息) | |
android.permission.RECEIVE_MMS | |
(接收彩信) | |
android.permission.READ_CELL_BROADCASTS | |
() | |
android.permission-group.STORAGE | android.permission.READ_EXTERNAL_STORAGE |
(允许程序读取外部存储,如SD卡读文件) | |
android.permission.WRITE_EXTERNAL_STORAGE | |
(允许程序写入外部存储,如SD卡上写文件) | |
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。