2021@SDUSC
AndroidManifest.xml配置文件
每一个 Android 项目都包含一个单(Manifest)文件夹。其下有整个应用主配置清单文件 AndroidManifest.xml,它是 XML 格式的 Android 程序声明文件, 在其中包含 Android 系统运行程序前所必须掌握的重要信息,这些信息包含应用程序名称、图标、包名称、模块组成、授权和 SDK 最低版本等。在其中可包含较多的标签元素,其中<manifest> 、<application> 不可省略。
manifest 标签
其中,<manifest> 标签用于设置与项目相关的一些属性,比如用于唯一标识应用程序的 package 属性,是一个应用进程的默认名称,例如所分析代码中的"com.example.mymap" ;用于记录应用程序版本的 Android:versionName 属性,用户根据该属性查看应用程序版本信息,需要具备一定的可读性;android:versionCode属性设备程序可识别程序版本,必须是一个整数值代表APP更新次数。其中的 xmlns:Android 属性默认为“http://schemas.Android.com/apk/res/Android”,该标签指定了Android的命名空间。<manifest> 标签使用各种属性来指定应用程序的各种元数据,包括标题、图标和主题等。它还可以作为一个包含活动(Activity)、服务(Service)、内容提供器(Provider)和广播接收器(Broadcast Receiver)标签的容器,用来指定应用程序组件。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mymap">
</manifest>
application 标签
<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/Theme.MyMap">
位于<manifest> 标签下层,<manifest> 标签仅能包含一个<application> 标签。但是,<application> 标签有很多子标签,其属性可以作为子标签的默认属性,常用的属性包括:应用名android:label,应用图标android:icon,应用主题android:theme等。常用的子标签介绍如下: <activity> 标签:应用程序显示的每一个 Activity 都要求有一个 <activity> 标签,并使用 Android:name 属性指定类的名称。需要包含核心的启动 Activity 和其他所有可以显示的屏幕或者对话框。Android应用中的每一个Activity都必须在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity。每一个 Activity 节点都允许使用 intent-filter 子标签来指定哪个 Intent 启动该活动。
<activity android:name=".DescriptionActivity"></activity>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<intent-filter> 标签用于Intent消息过滤器的声明,<intent-filter> 标签可以放在<activity> 、<activity-alias> 、<service> 和<receiver> 元素标签中,来区分可用于处理消息的Activity控制器、Service服务和广播接收器Broadcast Receiver。Intent消息包含有名称、动作、数据、类别等几个重要属性。<intent-filter> 中必须包含有<action> ,用于描述具体消息的名称,上述代码中"android.intent.action.MAIN" 决定应用程序最先启动的Activity;<category> 用于表示能处理消息组件的类别,即该Action所符合的类别,"android.intent.category.LAUNCHER" 决定应用程序是否显示在程序列表里;而<data> 用于描述消息需要处理的数据格式,可以使用正则表达式来限定数据来源。 <service> 标签:和<activity> 标签一样,应用程序中使用的每一个 Service 类都要创建一个新的 service 标签。Service 标签也支持使用 intent-filter 子标签来允许后面的运行时绑定。 <provider> 标签:<provider> 标签用来说明应用程序中的每一个内容提供器。内容提供器是用来管理数据库访问以及程序内和程序间共享的。所分析代码中未涉及。 <receiver> 标签:通过添加 <receiver> 标签,可注册一个广播接收器,不需要事先启动应用程序。通过在声明中注册一个广播接收器,可以使这个进程实现完全自动化,就像全局事件监听器一样。注册后,只要相匹配的Intent被应用程序广播,应用程序会立即启动,注册的广播接收器也会立即运行。
显示定位
uses-permission
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
为了访问用户定位,需要在AndroidManifest.xml中的<uses-permissio> 标签进行配置权限。在安装程序时,设定的所有权限将会告诉用户,由他们来决定是否应用程序可以使用这些权限。 开发人员在开发软件的时候,也需要声明相应的权限。android:name的值可以是其他app通过<permission> 声明的,也可以是系统的权限名称,比如希望软件能发短信,需要声明软件调用短信的权限,否则软件运行的时候就会报错。 Android的权限在AndroidManifest.xml文件里配置。AndroidManifest文件中有四个标签与permission有关,它们分别是 permission、 permission-group、permission-tree 和 uses-permission。其中最常用的是 uses-permission,当程序中需要获取某个权限的时候就必须在manifest文件中声明uses-permission。 android.permission.INTERNET:获取网络访问权限,可能产生GPRS流量,开启网络可以使用网络定位;android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,比如当前的网络连接是否有效;android.permission.READ_EXTERNAL_STORAGE:读取外置存储权限,如果开发者使用了so动态加载功能并且把so文件放在了外置存储区域,则需要申请该权限,否则不需要;android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件android.permission.ACCESS_COARSE_LOCATION:允许一个程序访问CellID或WiFi热点来获取粗略的位置;android.permission.ACCESS_FINE_LOCATION:该权限可以获取精确位置,通过GPS芯片接收卫星的定位信息,定位精度达10米以内; 自定义权限方法如下:
<permission android:label=”自定义权限”
android:description=”@string/hello”
android:name=”com.example.project.PERMITTED_ACTION”
android:protectionLevel=”normal”
android:icon=”@drawable/ic_launcher”>
</permission>
android:label :定义权限介绍,将会显示给用户,值可以用String数据。 android:description :比label更长的对权限的描述。值是通过R文件中获取的,一般不要直接写string值,例如这里的”@string/hello”。 android:name :权限名字,如果其他应用软件引用该权限需要填写这个名字。 android:protectionLevel:权限级别,分为4个级别:normal :低风险权限,在安装的时候,系统会自动授予权限给该应用程序。dangerous :高风险权限,系统不会自动授予权限给app,在用到的时候,会给用户提示。signature :签名权限,在其他app引用声明的权限的时候,需要保证两个app的签名一致。这样系统就会自动授予权限给第三方app,而不提示给用户。signatureOrSystem :这个权限是引用该权限的app需要有和系统同样的签名才能授予的权限,一般不推荐使用。
Application中的service声明
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" />
声明一个service(Service的子类)作为应用程序的组件。 与activities不同,services没有用户界面。它们被用来实现了后台长期运行操作或者提供一个丰富的交互API供其它应用程序使用。所有的service在manifest文件中用如上附代码service标签代表。android系统不能发现没有声明在manifest文件中的service,service将不能运行。 android:name:服务类名,发布应用程序后,不应更改此名称,除非设置 android:exported=“false”。;android:enabled:服务开关,指示这个service是否能被android系统实例化。android:process:要运行服务的进程的名称。通常,应用程序的所有组件都在为应用程序创建的默认进程中运行,它与应用程序包同名。如果分配给此属性的名称以冒号 (’:’) 开头,如上附代码,则会在需要时创建应用程序私有的新进程,并且服务在该进程中运行。
meta-data 标签
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="pFIaHasC5YakU2s2irvyhd0LWaUQ7jQf"></meta-data>
<meta-data> 标签用于存储预定义数据,与<intent-filter> 类似,也可以放在activity、activity-alias、service和receiver这四个标签中。Meta数据一般会以键值对的形式出现,个数没有限制,而这些数据都将被放到一个Bundle对象中,程序中我们则可以使用ActivityInfo、ServiceInfo甚至ApplicationInfo对象的metaData属性中读取。上述代码是百度地图SDK的API_Key,即开发密钥,然后才可以使用各种功能。
|