Google Android API guide learning(a)

来源:互联网 发布:媒体播放器软件下载 编辑:程序博客网 时间:2024/05/23 20:00

简介(Introduction)

初识Android

Android是移动操作系统,它通过intent(类似于OO中的消息)进行四大组件(activity,BroadCastReciever, ContentProvider, service)之间的相互配合与协作。

应用基础

安卓应用是使用java语言来进行编写的。Android SDK tools 能够将你的数据和源文件编译成.apk文件,.apk文件是一个安卓包,它涵盖了一个安卓应用的所有内容,并且当支持安卓app的装置下载app时需要下载该安装包。

一旦下载app到装置之后,每个app都运行在不同的线程中,而每个线程都有自己独特的VM(virtual machine),而且都有着Linux下不同的ID,因此一般情况下不同app不会有关联。
但是当我们需要不同的app进行交互时,则需要发送申请获取permission。
(安卓系统 实现了“最低权限原则”,也就是它仅仅获取该app所需要的权限。)

应用构成

四大组件:
1. Activity
2. Service
3. Content provider
4. Broadcast receiver

Activity: UI界面;
Service: 在后台运行,执行长期运行操作或者远程工作;
Broadcast receiver:相应系统的broadcast(电池电量低等);
Content provider:管理数据库中数据的共享

激活组件

前三者都是可以通过intent被激活的的,而content provider是通过ContentResolver被激活的。

Manifest文件

manifest文件(AndroidManinfest.xml)声明了该应用所需要的所有成分,而且它必须在该app的根路径之下。任何没有被其声明的组件都不会被调用(除broadcast receiver可以在程序运行时进行动态调用外)
以下是manifest文件能够定义的主要功能:

声明组件

<?xml version="1.0" encoding="utf-8"?><manifest ... >    <application android:icon="@drawable/app_icon.png" ... >        <activity android:name="com.example.project.ExampleActivity"                  android:label="@string/example_label" ... >        </activity>        ...    </application></manifest>

声明组件的功能

组件的激活一般是通过intent来进行的,而且intent激活可以分为显式和隐式的两种方式进行激活,隐式激活更能体现intent的强大功能特性,其需要在intent-filter标签中使用:

<manifest ... >    ...    <application ... >        <activity android:name="com.example.project.ComposeEmailActivity">            <intent-filter>                <action android:name="android.intent.action.SEND" />                <data android:type="*/*" />                <category android:name="android.intent.category.DEFAULT" />            </intent-filter>        </activity>    </application></manifest>

当一个app创建了一个ACTION_SEND的intent并且传递给了startActivity()之后,系统就能够开始当前activity,执行递交邮件等功能了。

声明应用需求

<manifest ... >    <uses-feature android:name="android.hardware.camera.any"                  android:required="true" />    <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="19" />    ...</manifest>

应用源文件

应用源文件就是一个Android Studio工程的基本构成,在之后会进行更为详细的介绍。

设备兼容性

对于安卓应用开发而言,兼容性有两个方面,一个是设备兼容性,一个是应用兼容性。设备兼容性是指通过了CTS(Compatibility Test Suite)并且是为安卓执行环境编写的应用,一般而言安卓应用不存在设备兼容性的问题;应用兼容性是指该应用可否在当前版本下正常使用相关功能,并且能否适应不同的屏幕大小等,一般应用兼容性是我们考虑的重点。

对设备控制你的应用的可得性

我们对应用可得性的控制主要有两种方式,一种是在androidmanifest文件中进行所需插件以及版本的控制,另外一种是在程序运行的过程中,通过判断来决定是否执行相关的功能。
主要有三个大的方面:
1. 设备特性
2. 平台版本
3. 屏幕配置

设备特性

<manifest ... >    <uses-feature android:name="android.hardware.sensor.compass"                  android:required="true" />    ...</manifest>

上述文件的内容就需要用户在下载该app的apk包是需要有罗盘传感器,没有该传感器的设备一律不运行进行该app的下载。这是可得性的第一种控制方法,以下是可得性的第二种控制方法(通过程序运行时的条件判断进行控制,注意其需要将上述manifest文件中的required改为false):

PackageManager pm = getPackageManager();if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {    // This device does not have a compass, turn off the compass feature    disableCompassFeature();}

平台版本

<manifest ... >    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />    ...</manifest>

minSdkVersion是该应用所能够兼容的最低API版本,targetSdkVersion是该应用能兼容的最高API版本,注意是最高API版本,不是API越高越好,具体原因会在后续的学习中阐述。
以下是上述功能实现的第二种方式:

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {    // Running on something older than API level 11, so disable    // the drag/drop features that use ClipboardManager APIs    disableDragAndDrop();}

屏幕配置

一般而言,android应用是可以兼容所有大小屏幕的设备的,但是考虑到照片清晰度等原因需要进行屏幕的相关配置。

为商业原因控制应用的可行性

例如我需要做A地区的城市导航,但是我如果在B地区,那么该应用就无法进行使用了。

系统权限

最后一个部分,未完待续….

1 0
原创粉丝点击