无需言 做自己 业 ,精于勤 荒于嬉.
- PHP杂项 PHP中的魔术方法总结 :__construct, __destruct等..
-
发表日期:2015-10-22 16:26:22 | 来源: | 分类:PHP杂项
-
1、__get、__set
这两个方法是为在类和他们的父类中没有声明的属性而设计的
__get( $property ) 当调用一个未定义的属性时访问此方法
__set( $property, $value ) 给一个未定义的属性赋值时调用
这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)
2、__isset、__unset
__isset( $property ) 当在一个未定义的属性上调用isset()函数时调用此方法
__unset( $property ) 当在一个未定义的属性上调用unset()函数时调用此方法
与__get方法和__set方法相同,这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)
3、__call
__call( $method, $arg_array ) 当调用一个未定义的方法是调用此访求
这里的未定义的方法包括没有权限访问的方法
4、__autoload
__autoload 函数,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。
注意: 在 __autoload 函数中抛出的异常不能被 catch 语句块捕获并导致致命错误。
5、__construct、__destruct
__construct 构造方法,当一个对象创建时调用此方法,使用此方法的好处是:可以使构造方法有一个独一无二的名称,无论它所在的类的名称是什么.这样你在改变类的名称时,就不需要改变构造方法的名称__destruct 析构方法,PHP将在对象被销毁前(即从内存中清除前)调用这个方法默认情况下,PHP仅仅释放对象属性所占用的内存并销毁对象相关的资源.析构函数允许你在使用一个对象之后执行任意代码来清除内存.当PHP决定你的脚本不再与对象相关时,析构函数将被调用.在一个函数的命名空间内,这会发生在函数return的时候.对于全局变量,这发生于脚本结束的时候.如果你想明确地销毁一个对象,你可以给指向该对象的变量分配任何其它值.通常将变量赋值勤为NULL或者调用unset.
6、__clone
PHP5中的对象赋值是使用的引用赋值,如果想复制一个对象则需要使用clone方法,在调用此方法是对象会自动调用__clone魔术方法
如果在对象复制需要执行某些初始化操作,可以在__clone方法实现
7、__toString
__toString方法在将一个对象转化成字符串时自动调用,比如使用echo打印对象时如果类没有实现此方法,则无法通过echo打印对象,否则会显示:Catchable fatal error: Object of class test could not be converted to string in此方法必须返回一个字符串
在PHP 5.2.0之前,__toString方法只有结合使用echo() 或 print()时 才能生效。PHP 5.2.0之后,则可以在任何字符串环境生效(例如通过printf(),使用%s修饰符),但 不能用于非字符串环境(如使用%d修饰符)。从PHP 5.2.0,如果将一个未定义__toString方法的对象 转换为字符串,会报出一个E_RECOVERABLE_ERROR错误。
8、__sleep、__wakeup
__sleep 串行化的时候用
__wakeup 反串行化的时候调用
serialize() 检查类中是否有魔术名称 __sleep 的函数。如果这样,该函数将在任何序列化之前运行。它可以清除对象并应该返回一个包含有该对象中应被序列化的所有变量名的数组。
使用 __sleep 的目的是关闭对象可能具有的任何数据库连接,提交等待中的数据或进行类似的清除任务。此外,如果有非常大的对象而并不需要完全储存下来时此函数也很有用。
相反地,unserialize() 检查具有魔术名称 __wakeup 的函数的存在。如果存在,此函数可以重建对象可能具有的任何资源。
使用 __wakeup 的目的是重建在序列化中可能丢失的任何数据库连接以及处理其它重新初始化的任务。
9、__set_state
当调用var_export()时,这个静态 方法会被调用(自PHP 5.1.0起有效)。
本方法的唯一参数是一个数组,其中包含按array(’property’ => value, …)格式排列的类属性。
10、__invoke
当尝试以调用函数的方式调用一个对象时,__invoke 方法会被自动调用。
PHP5.3.0以上版本有效
11、__callStatic
它的工作方式类似于 __call() 魔术方法,__callStatic() 是为了处理静态方法调用,
PHP5.3.0以上版本有效
PHP 确实加强了对 __callStatic() 方法的定义;它必须是公共的,并且必须被声明为静态的。同样,__call() 魔术方法必须被定义为公共的,所有其他魔术方法都必须如此。
- Android杂项 013.statusBar-通知栏(Notification)
-
发表日期:2015-09-26 10:32:09 | 来源: | 分类:Android杂项
-
示例1
protected void onStart() { Toast.makeText(MainActivity.this, "onStart", Toast.LENGTH_SHORT).show(); super.onStart(); NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); //取消通知栏 manager.cancel(R.layout.activity_main); }
示例2
package com.example.StatusBar; import android.app.IntentService; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Intent; public class StatusService extends IntentService { //private static final int KUKA = 0; public StatusService() { super("StatusService"); // TODO Auto-generated constructor stub } @Override protected void onHandleIntent(Intent intent) { showNotification(false); //模拟耗时操作 try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO: handle exception e.printStackTrace(); } showNotification(true); } @SuppressWarnings({ "deprecation" }) private void showNotification(boolean finish) { //通知栏消息 Notification notification; //消息管理器 NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); //当用户点击消息的时候显示那个activity Intent intent = new Intent(this, MainActivity.class); //将要发生的意图 PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); if (finish) { notification = new Notification(R.drawable.ic_launcher, "文件下载完成", System.currentTimeMillis()); notification.setLatestEventInfo(this, "文件下载完成", "没有新任务", contentIntent); }else { notification = new Notification(R.drawable.ic_launcher, "文件开始下载", System.currentTimeMillis()); notification.setLatestEventInfo(this, "文件正在下载中", "请稍候...", contentIntent); } manager.notify(R.layout.activity_main, notification); } }
- Android杂项 001.android开发-Activity(活动)
-
发表日期:2015-09-23 22:19:52 | 来源: | 分类:Android杂项
-
Activity是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器)之一。
每一个可见的页面视图都是一个activity,activity可以绑定一个布局xml显示,和service的最大不同是service是没有界面在后台运行的。
生命周期:
- Android杂项 android studio 快捷键
-
发表日期:2015-09-23 21:51:27 | 来源: | 分类:Android杂项
-
----常用快捷键
1.Ctrl+E,可以显示最近编辑的文件列表
2.Shift+Click可以关闭文件
3.Ctrl+[或]可以跳到大括号的开头结尾
4.Ctrl+Shift+Backspace可以跳转到上次编辑的地方
5.Ctrl+F12,可以显示当前文件的结构
6.Ctrl+F7可以查询当前元素在当前文件中的引用,然后按F3可以选择
7.Ctrl+N,可以快速打开类
8.Ctrl+Shift+N,可以快速打开文件
9.Alt+Q可以看到当前方法的声明
10.Ctrl+W可以选择单词继而语句继而行继而函数
11.Alt+F1可以将正在编辑的元素在各个面板中定位
12.Ctrl+P,可以显示参数信息
13.Ctrl+Shift+Insert可以选择剪贴板内容并插入
14.Alt+Insert可以生成构造器/Getter/Setter等
15.Ctrl+Alt+V 可以引入变量。例如把括号内的SQL赋成一个变量
16.Ctrl+Alt+T可以把代码包在一块内,例如try/catch
17.Alt+Up and Alt+Down可在方法间快速移动
----不常用快捷键
18.在一些地方按Alt+Enter可以得到一些Intention Action,例如将”==”改为”equals()”
19.Ctrl+Shift+Alt+N可以快速打开符号
20.Ctrl+Shift+Space在很多时候都能够给出Smart提示
21.Alt+F3可以快速寻找
22.Ctrl+/和Ctrl+Shift+/可以注释代码
23.Ctrl+Alt+B可以跳转到抽象方法的实现
24.Ctrl+O可以选择父类的方法进行重写
25.Ctrl+Q可以看JavaDoc
26.Ctrl+Alt+Space是类名自动完成
27.快速打开类/文件/符号时,可以使用通配符,也可以使用缩写
28.Live Templates! Ctrl+J
29.Ctrl+Shift+F7可以高亮当前元素在当前文件中的使用
30.Ctrl+Alt+Up /Ctrl+Alt+Down可以快速跳转搜索结果
31.Ctrl+Shift+J可以整合两行
32.Alt+F8是计算变量值
- Android杂项 android 常用代码集锦
-
发表日期:2015-08-05 23:27:35 | 来源: | 分类:Android杂项
-
super.requestWindowFeature(Window.FEATURE_NO_TITLE); // 设置不显示标题
//必须写在super.setContentView(R.layout.activity_main);之前,否则会出错!
this.gridView.setSelector(new ColorDrawable(Color.TRANSPARENT));// 给gridview设置选中时的颜色(透明色)默认点击的时候黄色背景。。
this.content = (LinearLayout) super.findViewById(R.id.content); // 取得组件
this.content.removeAllViews(); // 先清除容器中所有View
super.getWindowManager().getDefaultDisplay().getWidth()//获取屏幕宽度
super.getWindowManager().getDefaultDisplay().getHeight()//获取屏幕高度
- Android杂项 ADB 指令大全
-
发表日期:2015-07-08 22:06:10 | 来源: | 分类:Android杂项
-
ADB是什么?
ADB的全称为Android Debug Bridge,就是起到调试桥的作用。
通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具。adb的工作方式比较特殊,采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯,默认情况下adb会daemon相关的网络端口,所以当我们运行Eclipse时adb进程就会自动运行。
ADB有什么用?
借助ADB工具,我们可以管理设备或手机模拟器的状态。还可以进行很多手机操作,如安装软件、系统升级、运行shell命令等等。其实简而言说,adb就是连接Android手机与PC端的桥梁,可以让用户在电脑上对手机进行全面的操作。
1. 显示系统中全部Android平台:
android list targets
2. 显示系统中全部AVD(模拟器):
android list avd
3. 创建AVD(模拟器):
android create avd --name 名称 --target 平台编号
4. 启动模拟器:
emulator -avd 名称 -sdcard ~/名称.img (-skin 1280x800)
5. 删除AVD(模拟器):
android delete avd --name 名称
6. 创建SDCard:
mksdcard 1024M ~/名称.img
7. AVD(模拟器)所在位置:
Linux(~/.android/avd)
8. 启动DDMS:
ddms
9. 显示当前运行的全部模拟器:
adb devices
10. 对某一模拟器执行命令:
abd -s 模拟器编号 命令
11. 安装应用程序:
adb install -r 应用程序.apk
12. 获取模拟器中的文件:
adb pull <remote> <local>
13. 向模拟器中写文件:
adb push <local> <remote>
14. 进入模拟器的shell模式:
adb shell
15. 启动SDK,文档,实例下载管理器:
android
16. 卸载apk包:
adb shell
17. 查看adb命令帮助信息:
adb help
18. 在命令行中查看LOG信息:
adb logcat -s 标签名
19. adb shell后面跟的命令主要来自:
源码\system\core\toolbox目录和源码\frameworks\base\cmds目录。
20. 删除系统应用:
adb remount (重新挂载系统分区,使系统分区重新可写)。
21. 获取管理 员权限:
adb root
22. 启动Activity:
adb shell am start -n 包名/包名+类名
(-n 类名,-a action,-d date,-m MIME-TYPE,-c category,-e 扩展数据,等)。
23、发布端口:
你可以设置任意的端口号,做为主机向模拟器或设备的请求端口。如:
adb forward tcp:5555 tcp:8000
24、复制文件:
你可向一个设备或从一个设备中复制文件,复制一个文件或目录到设备或模拟器上:
adb push <source> <destination></destination></source>
25、搜索模拟器/设备的实例:
取得当前运行的模拟器/设备的实例的列表及每个实例的状态:
adb devices
26、查看bug报告:
adb bugreport
27、记录无线通讯日志:
一般来说,无线通讯的日志非常多,在运行时没必要去记录,但我们还是可以通过命令,设置记录:
adb shell
28、获取设备的ID和序列号:
adb get-product
29、访问数据库SQLite3
adb shell
cd system/sd/data //进入系统内指定文件夹
ls //列表显示当前文件夹内容
rm -r xxx //删除名字为xxx的文件夹及其里面的所有文件
rm xxx //删除文件xxx
rmdir xxx //删除xxx的文件夹
【操作命令】
1. 查看设备
adb devices
这个命令是查看当前连接的设备,连接到计算机的android设备或者模拟器将会列出显示。
2.安装软件
adb install
3. 卸载软件
adb uninstall <软件名>
如果加 -k 参数,为卸载软件但是保留配置和缓存文件.
4. 进入设备或模拟器的shell:
adb shell
通过上面的命令,就可以进入设备或模拟器的shell环境中,在这个Linux Shell中,你可以执行各种Linux的命令,另外如果只想执行一条shell命令,可以采用以下的方式:
adb shell [command]
5. 发布端口
可以设置任意的端口号,做为主机向模拟器或设备的请求端口。如:
adb forward tcp:5555 tcp:8000
6. 从电脑上发送文件到设备
adb push <本地路径> <远程路径>
用push命令可以把本机电脑上的文件或者文件夹复制到设备(手机)
7. 从设备上下载文件到电脑
adb pull <远程路径> <本地路径>
用pull命令可以把设备(手机)上的文件或者文件夹复制到本机电脑
- Android杂项 Android manifest.xml 中元素含义
-
发表日期:2015-07-08 22:04:08 | 来源: | 分类:Android杂项
-
这些都是manifest.XML里的代码。每一段代码都有它的意思,这些资料主要就是让新手们知道每一段代码都是干什么的。什么地方出错了,先看看manifest.xml里有没有缺少权限。
android:allowTaskReparenting
这句话的意思就是(是否允许activity更换从属的任务,比如从短信息任务 切换到浏览器任务。)
android:alwaysRetainTaskState
是否保留状态不变, 比如切换回home, 再从新打开, activity处于最后的状态
android:clearTaskOnLanunch
这句话的意思就是(比方说 A 是 activity, eoe 是被A 触发的 activity, 然后返回 Home, 从新启动A,是否显示 eoe)
android:configChanges
在我们配置list发生修改时, 是否调用 onConfigurationChanged() 方法
android:enabled
activity 是否可以被实例化。 上面的这句话是必须有的。而且和重要。
android:excludeFromRecents
这据主要的意思就就(是否可被显示在最近打开的activity列表里)
android:exported
是否允许activity被其它程序调用
android:finishOnTaskLaunch
是否关闭已打开的activity当用户重新启动这个任务的时候。我感觉就是你个提醒的意思。
android:launchMode
activity启动方式, ("standard" "singleTop")( "singleTask" "singleInstance")其中前两个为一组, 后两个为一组
android:multiprocess
这句话是非常主要的,因为没有一个应用是用单线程来完成的,这句话的意思是(允许多进程)
android:name
这个是必须有的,意思是activity的类名, 必须指定
android:onHistory
是否需要移除这个activity当用户切换到其他屏幕时。 这个属性是 API level 3 中引入的
android:process
一个activity运行时所在的进程名,所有程序组件运行在应用程序默认的进程中,这个进程名跟应用程序的包名一致。中的元素process属性能够为所有组件设定一个新的默认值。但是任何组件都可以覆盖这个默认值,允许你将你的程序放在多进程中运行。 如果这个属性被分配的名字以:开头,当这个activity运行时, 一个新的专属于这个程序的进程将会被创建。如果这个进程名以小写字母开头,这个activity将会运行在全局的进程中,被它的许可所提供。
- Android杂项 Android 动态关闭Manifest中的Receiver的方法
-
发表日期:2015-07-08 22:03:07 | 来源: | 分类:Android杂项
-
为什么要关闭组件?
在用到组件时,有时候我们可能暂时性的不使用组件,但又不想把组件kill 掉,比如创建了一个broadcastReceiver广播监听器,用来想监听第一次开机启动后获得系统的许多相关信息,并保存在文件中,这样以后每次开机启动就不需要再去启动该服务了,也就是说如果没有把receiver关闭掉,就算是不做数据处理,但程序却还一直在后台运行会消耗电量和内存,这时候就需要把这个receiver给关闭掉。
如何关闭组件?
关闭组件其实并不难,只要创建packageManager对象和ComponentName对象,并调用packageManager对象的setComponentEnabledSetting方法。方法描述如下:
setComponentEnabledSetting(ComponentName componentName, int newState, int flags)
componentName:组件名称
newState:组件新的状态,可以设置三个值,分别是如下:
不可用状态:COMPONENT_ENABLED_STATE_DISABLED
上个小例子。manifest文件中的配置:
< receiver android:name=".ToggleReceiver">
在对应的Receiver中的处理:
final ComponentName receiver = new ComponentName(context,ToggleReceiver.class);
- Android杂项 AndroidManifest.xml文件综合详解
-
发表日期:2015-07-08 22:02:05 | 来源: | 分类:Android杂项
-
一,重要性AndroidManifest.xml是Android应用程序中最重要的文件之一。它是Android程序的全局配置文件,是每个android程序中必须的文件。它位于我们开发的应用程序的根目录下,描述了package中的全局数据,包括package中暴露的组件(activities,services,等等),以及他们各自的实现类,各种能被处理的数据和启动位置等重要信息。
因此,该文件提供了Android系统所需要的关于该应用程序的必要信息,即在该应用程序的任何代码运行之前系统所必须拥有的信息。一个典型的Android应用程序的结构如下图所示:
二,主要功能它指定了该应用程序的Java包:该包名作为应用程序的一个独特标识。
它描述了应用程序组件:该应用程序由哪些activity,service,broadcast receiver和content provider组成。它指定了实现每个组件的类以及公开发布它们的能力(例如,它们能持有哪个Intent信息)。这些声明使Android系统知道这儿有什么组件以及在什么条件下它们可以被载入。
它决定那些进程将容纳应用程序组件。
它声明了本应用程序必须拥有哪些许可,以便访问API的被保护部分,以及与其他应用程序交互。
它也声明了其他应用程序在和该应用程序交互时需要持有的许可。
它列出了Instrumentation类,可以在应用程序运行时提供简档和其他信息。这些声明仅当应用程序在开发和测试过程中被提供;它们将在应用程序正式发布之前被移除。
它声明了该应用程序所需的Android API的最小化水平。
它列出了该应用程序必须链接的库。
三,主要结构及规则下面列表显示了manifest文件的通常的结构以及它可以含有的元素。每个元素,连同它的所有属性,会在各个单独的文档里进行充分的描绘。
<?xml version="1.0" encoding="utf-8"?>
下面是按照字母顺序排列的所有可以出现在manifest文件里的元素。它们是唯一合法的元素;你不能加入你自己的元素或属性。
<action>
说明:AndroidManifest.xml文件的结构、元素,以及元素的属性,可以在Android SDK文档中查看详细说明。而在看这些众多的元素以及元素的属性前,需要先了解一下这些元素在命名、结构等方面的规则:
1、元素:在所有的元素中只有<manifest>和<application>是必需的,且只能出现一次。如果一个元素包含有其他子元素,必须通过子元素的属性来设置其值。处于同一层次的元素,这些元素的说明是没有顺序的。
2、属性:按照常理,所有的属性都是可选的,但是有些属性是必须设置的。那些真正可选的属性,即使不存在,其也有默认的数值项说明。除了根元素<manifest>的属性,所有其他元素属性的名字都是以android:前缀的;
3、定义类名:所有的元素名都对应其在SDK中的类名,如果你自己定义类名,必须包含类的数据包名,如果类与application处于同一数据包中,可以直接简写为“.”;
4、多数值项:如果某个元素有超过一个数值,这个元素必须通过重复的方式来说明其某个属性具有多个数值项,且不能将多个数值项一次性说明在一个属性中;
5、资源项说明:当需要引用某个资源时,其采用如下格式:@[package :]type :name 。 例如 <activity android:icon=”@drawable/icon ” . . . >
6、字符串值:类似于其他语言,如果字符中包含有字符“\”,则必须使用转义字符“\\”;
四,详细说明值得一提一些常用之处:
1,几乎所有的AndroidManifest.xml(以及许多其他Android的xml的文件)在第一个元素中包含了命名空间的声明xmlns:android="http://schemas.android.com/apk/res/android"。这样使得Android中各种标准属性能在文件中使用,提供了大部分元素中的数据。
2,大部分manifests包含了单个<application>的元素,它定义了所有的application级别组件和属性,并能在package中使用。
3,任何被用户看作顶层应用程序,并能被程序启动器所用的package,需要包含至少一个Activity组件来支持MAIN操作和LAUNCHER种类。动作android.intent.action.MAIN指示这是应用程序的入口点。类别 android.intent.category.LAUNCHER将此Activity放在启动器窗口中。
在最外层的<manifest>中包含了包名如package="cn.androidlover.demo"、软件的版本号android:versionCode="1"以及android:versionName="1.0"的属性,而里面一层的<application>分支中将可能包含Android程序的四种对象 Activity、Service、Content Provider以及Receiver。我们每添加上面四个类型中的任一种新对象都需要在androidmanifest.xml文件中添加相应节点,否则运行时将会产生异常。每一个activity必须要一个<activity>标记对应,无论它给外部使用或是只用于自己的package 中。如果一个activity没有对应的标记,你将不能运行它。
此文件一个重要的地方就是它所包含的intent-filters。这些filters描述了activity启动的位置和时间。每当一个 activity(或者操作系统)要执行一个操作,例如:打开网页或联系簿时,它创建出一个intent的对象。它能承载一些信息描述了你想做什么,你想处理什么数据,数据的类型,和一些其他信息。Android比较了intent对象中和每个application所暴露的intent-filter中的信息,来找到最合适的activity来处理调用者所指定的数据和操作。关于intent的更多信息请访问Intent参考页面。
application属性介绍:
有关AndroidManifest.xml文件的application分支我们有必要了解一些常见的属性,这里可以看到一些我们实用的选项,比如允许调试android:debuggable、任务关系android:taskAffinity,比如我们常见的方式创建一个新的任务实用标记 FLAG_ACTIVITY_NEW_TASK,为程序制定一个主题,可以使用android:theme指向一个主题文件。平时我们创建的程序使用一些安全敏感项,会需要请求系统许可权限,这里可以使用android:permission来制定相关的许可,每个程序的service、 activity、content provider、receiver都需要在application的节点内实现。有关完整的属性可以查看:
<application android:allowClearUserData=["true" | "false"]
另外:Activity的属性常用的可能为android:name和android:label两个,但我们需要了解所有的属性以帮助解决复杂的问题,完整的如下:
android:allowTaskReparenting=["true" | "false"]
从Provider节点中用到的定义,可以看到包含了权限控制、排序方式完整的如下:
<provider android:authorities="list"
而对于服务相关定义如下:
<service android:enabled=["true" | "false"]
最后是Broadcast使用的Receiver定义,一般配合和隐式处理。
<receiver android:enabled=["true" | "false"]
- Android杂项 AndroidManifest.xml元素含义介绍
-
发表日期:2015-07-08 21:59:45 | 来源: | 分类:Android杂项
-
每一个Android项目都包含一个清单(Manifest)文件--AndroidManifest.xml,它存储在项目层次中的最底层。清单可以定义应用程序及其组件的结构和元数据。
它包含了组成应用程序的每一个组件(活动、服务、内容提供器和广播接收器)的节点,并使用Intent过滤器和权限来确定这些组件之间以及这些组件和其他应用程序是如何交互的。
它还提供了各种属性来详细地说明应用程序的元数据(如它的图标或者主题)以及额外的可用来进行安全设置和单元测试顶级节点,如下所述。
清单由一个根manifest标签构成,该标签带有一个设置项目包的package属性。它通常包含一个xmlns:android属性来提供文件内使用的某些系统属性。下面的XML代码段展示了一个典型的声明节点:
<manifest xmlns:android=http://schemas.android.com/apk/res/android
manifest标签包含了一些节点(node),它们定义了应用程序组件、安全设置和组成应用程序的测试类。下面列出了一些常用的manifest节点标签,并用一些XML代码段说明了它们是如何使用的。
application
一个清单只能包含一个application节点。它使用各种属性来指定应用程序的各种元数据(包括标题、图标和主题)。它还可以作为一个包含了活动、服务、内容提供器和广播接收器标签的容器,用来指定应用程序组件。
<application android:icon="@drawable/icon"
Activity应用程序显示的每一个Activity都要求有一个activity标签,并使用android:name属性来指定类的名称。这必须包含核心的启动Activity和其他所有可以显示的屏幕或者对话框。启动任何一个没有在清单中定义的Activity时都会抛出一个运行时异常。每一个Activity节点都允许使用intent-filter子标签来指定哪个Intent启动该活动。
<activity android:name=".MyActivity"
service和activity标签一样,应用程序中使用的每一个Service类都要创建一个新的service标签。(Service标签也支持使用intent-filter子标签来允许后面的运行时绑定。
<service androidandroid:enabled="true"android:name=".MyService"></service>
provider
provider标签用来说明应用程序中的每一个内容提供器。内容提供器是用来管理数据库访问以及程序内和程序间共享的。
<provider
receiver
通过添加receiver标签,可以注册一个广播接收器(Broadcast Receiver),而不用事先启动应用程序。广播接收器就像全局事件监听器一样,一旦注册了之后,无论何时,只要与它相匹配的intent被应用程序广播出来,它就会立即执行。通过在声明中注册一个广播接收器,可以使这个进程实现完全自动化。如果一个匹配的Intent被广播了,则应用程序就会自动启动,并且你注册的广播接收器也会开始运行。
<receiver
uses-permission
作为安全模型的一部分,uses-permission标签声明了那些由你定义的权限,而这些权限是应用程序正常执行所必需的。在安装程序的时候,你设定的所有权限将会告诉给用户,由他们来决定同意与否。对很多本地Android服务来说,权限都是必需的,特别是那些需要付费或者有安全问题的服务(例如,拨号、接收SMS或者使用基于位置的服务)。如下所示,第三方应用程序,包括你自己的应用程序,也可以在提供对共享的程序组件进行访问之前指定权限。
<uses-permission android:name="android.permission.ACCESS_LOCATION"> </uses-permission>
permission
在可以限制访问某个应用程序组件之前,需要在清单中定义一个permission。可以使用permission标签来创建这些权限定义。然后,应用程序组件就可以通过添加android:permission属性来要求这些权限。再后,其他的应用程序就需要在它们的清单中包含uses-permission标签(并且通过授权),之后才能使用这些受保护的组件。
在permission标签内,可以详细指定允许的访问权限的级别(normal、dangerous、signature,signatureOrSystem)、一个 label属性和一个外部资源,这个外部资源应该包含了对授予这种权限的风险的描述。
<permission
instrumentation
instrumentation类提供一个框架,用来在应用程序运行时在活动或者服务上运行测试。它们提供了一些方法来监控应用程序及其与系统资源的交互。对于为自己的应用程序所创建的每一个测试类,都需要创建一个新的节点。
<instrumentation
- Android杂项 Android的AndroidManifest.xml文件介绍
-
发表日期:2015-07-08 21:59:05 | 来源: | 分类:Android杂项
-
AndroidManifest.xml是每一个应用都需要的文件,位于应用根目录下,它描述了程序包的全局变量,包括暴露的应用组件(activities,services等等)和为每个组件的实现类,什么样的数据可以操作,以及在什么地方运行。
主要包括以下各个元素。
A.包名(package):指定本应用内java主程序包的包名。当没有指定apk的文件名时,编译后产生程序包将以此命名。本包名应当在Android系统运行时唯一。
B.认证(certificate):指定本应用程序所授予的信任级别,目前有的认证级别有platform(system)、shared、media以及应用自定义的认证。不同的认证可以享受不同的权限。
C.权限组(permission-group):权限组的定义是为了描述一组具有共同特性的权限。
D.权限(permission):权限用来描述是否拥有做某件事的权力。Android系统中权限是分级的,前分为普通级别(Normal),危险级别(dangerous),签名级别(signature)和系统/签名级别(signature or system)。系统中所有预定义的权限根据作用的不同,分别属于不同的级别。对于普通和危险级别的权限,我们称之为低级权限,应用申请即授予。其他两级权限,我们称之为高级权限或系统权限,应用拥有platform级别的认证才能申请。当应用试图在没有权限的情况下做受限操作,应用将被系统杀掉以警示。系统应用可以使用任何权限。权限的声明者可无条件使用该权限。
E.权限树(permission-tree)权限树的设置是为了统一管理一组权限,声明于该树下的权限所有者归属该应用。系统提供了API,应用可以在运行时动态添加。 PackageManager.addPermission()
F.使用权限(uses-permission):应用需要的权限应当在此处申请,所申请的权限应当被系统或某个应用所定义,否则视为无效申请。同时,使用权限的申请需要遵循权限授予条件,非platform认证的应用无法申请高级权限。
G:SDK(uses-sdk):标识本应用运行的SDK版本。高兼容性的应用可以忽略此项。
H.application:application是Android应用内最高级别(top level)的模块,每个应用内最多只能有一个application,如果应用没有指定该模块,一个默认的application将被启用。application将在应用启动时最先被加载,并存活在应用的整个运行时生命周期。因此一些初始化的工作适合在本模块完成. Application元素有许多属性,其中:“persistent”表示本应用是否为常驻内存,“enable”表示本应用当前是否应当被加载。
<application android:icon="@drawable/icon" android:label="@string/app_name">
在AndroidManifest.xml文件中,运行时模块的定义都作为本模块的子元素。当运行时模块被调度时,如果应用没有启动,将首先启动应用进行初始化,然后调度对应模块。
I.activity:activity是application模块的运行时子元素,标识了一个UI。除了application,一个应用可以声明并实现零至多个其它运行时模块,activity也同样。activity也包含了许多定义它工作状态的属性,其中:“name”是必须的,它指定了该activity所在的文件名,如果该文件所属包不同于该应用的包名(即本描述文件的最开始处),那么名字前面需要加入所在包名。activity通过增加intent-fliter来标识哪些intent可以被处理,同时intent也是调度activity的主要参数。
J.receiver:receiver也是application的运行时子元素。receiver通过增加intent-fliter来标识它需要接受哪些intent。当收到intent后,receiver将根据不同的intent进行不同的处理。当一个Intent发出后,所有注册了该intent的receiver都将会收到,系统会根据receiver在系统中的注册次序顺序发送。当一个receiver处理完该Intent后,系统才会向下一个receiver发送。当一个receiver有多个未接收的intent时,将按照intent发送的次序顺序接收。
在本实例中,intent-filter如下:
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
K.service:service也是application的运行时子元素。Service属于后台模块,启动后将长时间运行,除非停止该service或所在应用进程被杀死。
L.provider:provider也是application的运行时子元素。它继承于ContentProvider,是对该应用管理的用户数据的结构化接入,是基于数据库操作方式的封装。如果应用允许外部应用访问/管理它的用户数据,provider是Android平台提供的最佳方式。
M.activity-alias:顾名思义,是已有activity的别名。
N:uses-library:标识应用启动所必须的共享库。
- Android杂项 Android 文件类型和MIME的匹配表
-
发表日期:2015-07-08 21:57:31 | 来源: | 分类:Android杂项
-
在Android中通过文件的MIME类型来判断有哪些应用程序可以处理这些文件,并使用其中的某一个应用程序(如果有多个可选的应用程序,则用户必须指定一个)处理之。
我在写android资源管理器(文件浏览器)的时候,希望能在资源管理器的中实现打开文件的操作,此时就需要用到文件的MIME类型。
实现方法:
/**
* 根据文件后缀名获得对应的MIME类型。
* @param file
*/
private String getMIMEType(File file) {
String type = "*/*";
String fName = file.getName();
// 获取后缀名前的分隔符"."在fName中的位置。
int dotIndex = fName.lastIndexOf(".");
if (dotIndex < 0) {
return type;
}
/* 获取文件的后缀名 */
String end = fName.substring(dotIndex, fName.length()).toLowerCase();
if (end == "")
return type;
// 在MIME和文件类型的匹配表中找到对应的MIME类型。
for (int i = 0; i < p; i++) {
if (end.equals(MIME_MapTable[i][0]))
type = MIME_MapTable[i][1];
}
return type;
}
/**
* 打开文件
* @param file
*/
private void openFile(File file) {
// Uri uri = Uri.parse("file://"+file.getAbsolutePath());
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// 设置intent的Action属性
intent.setAction(Intent.ACTION_VIEW);
// 获取文件file的MIME类型
String type = getMIMEType(file);
// 设置intent的data和Type属性。
intent.setDataAndType(/* uri */Uri.fromFile(file), type);
// 跳转
startActivity(intent);
}
现在就差一个MIME类型和文件类型的匹配表了。
"文件类型——MIME类型"的匹配表:
建立一个MIME类型与文件后缀名的匹配表
java代码:
private final String[][] MIME_MapTable = {
// {后缀名, MIME类型}
{ ".3gp", "video/3gpp" },
{ ".apk", "application/vnd.android.package-archive" },
{ ".asf", "video/x-ms-asf" }, { ".avi", "video/x-msvideo" },
{ ".bin", "application/octet-stream" }, { ".bmp", "image/bmp" },
{ ".c", "text/plain" }, { ".class", "application/octet-stream" },
{ ".conf", "text/plain" }, { ".cpp", "text/plain" },
{ ".doc", "application/msword" },
{ ".exe", "application/octet-stream" }, { ".gif", "image/gif" },
{ ".gtar", "application/x-gtar" }, { ".gz", "application/x-gzip" },
{ ".h", "text/plain" }, { ".htm", "text/html" },
{ ".html", "text/html" }, { ".jar", "application/java-archive" },
{ ".java", "text/plain" }, { ".jpeg", "image/jpeg" },
{ ".jpg", "image/jpeg" }, { ".js", "application/x-javascript" },
{ ".log", "text/plain" }, { ".m3u", "audio/x-mpegurl" },
{ ".m4a", "audio/mp4a-latm" }, { ".m4b", "audio/mp4a-latm" },
{ ".m4p", "audio/mp4a-latm" }, { ".m4u", "video/vnd.mpegurl" },
{ ".m4v", "video/x-m4v" }, { ".mov", "video/quicktime" },
{ ".mp2", "audio/x-mpeg" }, { ".mp3", "audio/x-mpeg" },
{ ".mp4", "video/mp4" },
{ ".mpc", "application/vnd.mpohun.certificate" },
{ ".mpe", "video/mpeg" }, { ".mpeg", "video/mpeg" },
{ ".mpg", "video/mpeg" }, { ".mpg4", "video/mp4" },
{ ".mpga", "audio/mpeg" },
{ ".msg", "application/vnd.ms-outlook" }, { ".ogg", "audio/ogg" },
{ ".pdf", "application/pdf" }, { ".png", "image/png" },
{ ".pps", "application/vnd.ms-powerpoint" },
{ ".ppt", "application/vnd.ms-powerpoint" },
{ ".prop", "text/plain" },
{ ".rar", "application/x-rar-compressed" },
{ ".rc", "text/plain" }, { ".rmvb", "audio/x-pn-realaudio" },
{ ".rtf", "application/rtf" }, { ".sh", "text/plain" },
{ ".tar", "application/x-tar" },
{ ".tgz", "application/x-compressed" }, { ".txt", "text/plain" },
{ ".wav", "audio/x-wav" }, { ".wma", "audio/x-ms-wma" },
{ ".wmv", "audio/x-ms-wmv" },
{ ".wps", "application/vnd.ms-works" },
// {".xml", "text/xml"},
{ ".xml", "text/plain" }, { ".z", "application/x-compress" },
{ ".zip", "application/zip" }, { "", "*/*" }
};
- Android杂项 Android SDK中tools详解
-
发表日期:2015-07-08 21:55:32 | 来源: | 分类:Android杂项
-
Android SDK包含了各种各样的定制工具,简介如下:
Android模拟器(Android Emulator)
它是在你的计算机上运行的一个虚拟移动设备。你可以使用模拟器来在一个实际的Android运行环境下设计,调试和测试你的应用程序。
Android调试桥(Android Debug Bridge (adb) )
Adb
工具可以让你在模拟器或设备上安装应用程序的.apk文件,并从命令行访问模拟器或设备。你也可以用它把Android模拟器或设备上的应用程序代码和一个标准的调试器连接在一起。
层级观察器 (Hierarchy Viewer)
层级观察器工具允许你调试和优化你的用户界面。它用可视的方法把你的视图(view)的布局层次展现出来,此外还给当前界面提供了一个具有像素栅格(grid)的放大镜观察器,这样你就可以正确地布局了。
9-patch
Draw 9-patch工具允许你使用所见即所得(WYSIWYG)的编辑器轻松地创建NinePatch图形。它也可以预览经过拉伸的图像,高亮显示内容区域。
Eclipse IDE Android 开发工具插件(Android Development Tools Plugin for the Eclipse IDE)
ADT插件大大扩展了Eclipse集成环境功能,使得生成和调试你的Android应用程序既容易又迅速。如果你使用Eclipse,ADT插件可以让你难以置信地加快开发Android应用程序的 速度。
你可以从Eclipse IDE内部访问其它Android开发工具。例如,ADT可以让你直接从Eclipse访问DDMS工具的很多功能—屏幕截图,管理端口转发(port-forwarding),设置断点,观察线程和进程信息。
它提供了一个新的项目向导(New Project Wizard),帮助你快速生成和建立起新Android应用程序所需的最基本的文件。
它使得构建Android应用程序的过程变得自动化以及简单易行。
它提供了一个android代码编辑器,可以帮助你为Android manifest和资源文件编写有效的XML。
有关ADT插件的更多详细信息,包括安装指令,可参考Android 开发环境安装。如果你想看一个用法范例的屏幕截图,可参考Hello Android。
Dalvik 调试监视器服务(Dalvik Debug Monitor Service (ddms))
这个工具集成了Dalvik(为Android平台定制的虚拟机(VM)),能够让你在模拟器或者设备上管理进程并协助调试。你可以使用它杀死进程,选择某个特定的进程来调试,产生跟踪数据,观察堆(heap)和线程信息,截取模拟器或设备的屏幕画面,还有更多的功能。
Android Asset Packaging Tool (aapt)
Aapt工具可以让你创建包含Android应用程序二进制文件和资源文件的.apk文件。
Android接口描述语言(Android Interface Description Language (aidl))
可以让你生成进程间的接口的代码,诸如service可能使用的接口。
sqlite3
这个工具能够让你方便地访问SQLite 数据文件。这些数据文件是由Android 应用程序创建并使用的。
Traceview
这个工具可以将你的Android 应用程序产生的跟踪日志(trace log)转换为图形化的分析视图。
mksdcard
帮助你创建磁盘映像(disk image),你可以在模拟器环境下使用磁盘映像来模拟外部存储卡(例如SD 卡)。
dx
Dx gongju 将.class字节码(bytecode)转换为Android字节码(保存在.dex文件中) 。
UI/Application Exerciser Monkey
Monkey是在模拟器上或设备上运行的一个小程序,它能够产生为随机的用户事件流,例如点击(click),触摸(touch),挥手(gestures),还有一系列的系统级事件。你可以使用Monkey来给你正在开发的程序做随机的,但可重复的压力测试。
activitycreator
一个可以产生Ant build 文件的脚本,你可以使用它编译你的android 应用程序。如果你正在Eclipse上开发,并使用ADT插件,你不必使用这个脚本。
- Android杂项 Android SDK 目录和作用详解
-
发表日期:2015-07-08 21:54:57 | 来源: | 分类:Android杂项
-
1、add-ons
这里面保存着附加库,比如GoogleMaps,当然你如果安装了OphoneSDK,这里也会有一些类库在里面。
2、docs
这里面是Android SDKAPI参考文档,所有的API都可以在这里查到。
3、market_licensing
作为AndroidMarket版权保护组件,一般发布付费应用到电子市场可以用它来反盗版。
4、platforms
是每个平台的SDK真正的文件,里面会根据APILevel划分的SDK版本,这里就以Android2.2来说,进入后有一个android-8的文件夹,android-8进入后是Android2.2SDK的主要文件,其中ant为ant编译脚本,data保存着一些系统资源,images是模拟器映像文件,skins则是Android模拟器的皮肤,templates是工程创建的默认模板,android.jar则是该版本的主要framework文件,tools目录里面包含了重要的编译工具,比如aapt、aidl、逆向调试工具dexdump和编译脚本dx。
5、platform-tools
保存着一些通用工具,比如adb、和aapt、aidl、dx等文件,Android123提示,这里和platforms目录中tools文件夹有些重复,主要是从android2.3开始这些工具被划分为通用了。
6、samples是Android
SDK自带的默认示例工程,里面的apidemos强烈推荐初学者运行学习,对于SQLite数据库操作可以查看NotePad这个例子,对于游戏开发Snake、LunarLander都是不错的例子,对于Android主题开发Home则是android m5时代的主题设计原理。
7、tools
作为SDK根目录下的tools文件夹,这里包含了重要的工具,比如ddms用于启动Android调试工具,比如logcat、屏幕截图和文件管理器,而draw9patch则是绘制android平台的可缩放png图片的工具,sqlite3可以在PC上操作SQLite数据库,而monkeyrunner则是一个不错的压力测试应用,模拟用户随机按键,mksdcard则是模拟器SD映像的创建工具,emulator是Android SDK模拟器主程序,不过从android 1.5开始,需要输入合适的参数才能启动模拟器,traceview作为android平台上重要的调试工具。
8、usb_driver
顾名思义,保存着android平台google官方机型的驱动如nexusone、nexuss,同时也有一些老机型驱动的支持,比如说htcdream、htcmagic和motorola的droid。
- Android杂项 Android Apk文件结构简介
-
发表日期:2015-07-08 21:54:27 | 来源: | 分类:Android杂项
-
Manifest 文件
AndroidManifest.xml是每个应用都必须定义和包含的,它描述了应用的名字、版本、权限、引用的库文件等等信息,如要把apk上传到Google Market上,也要对这个xml做一些配置。
META-INF目录
META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。在eclipse编译生成一个api包时,会对所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下。而在Android平台上安装apk包时,应用管理器会按照同样的算法对包里的文件做校验,如果校验结果与META-INF下的内容不一致,系统就不会安装这个apk。这就保证了apk包里的文件不能被随意替换。比如拿到一个apk包后,如果想要替换里面的一幅图片,一段代码,或一段版权信息,想直接解压缩、替换再重新打包,基本是不可能的。如此一来就给病毒感染和恶意修改增加了难度,有助于保护系 统的安全。
classes.dex文件
classes.dex是java源码编译后生成的java字节码文件。但由于Android使用的dalvik虚拟机与标准的java虚拟机是不兼容的,dex文件与class文件相比,不论是文件结构还是opcode都不一样。目前常见的java反编译工具都不能处理dex文件。
Android模拟器中提供了一个dex文件的反编译工具dexdump。用法为首先启动Android模拟器,把要查看的dex文件用adb push上传的模拟器中,然后通过adb shell登录,找到要查看的dex文件,执行dexdump xxx.dex。
目前在网上能找到的另一个dex文件的反编译工具是Dedexer。Dedexer可以读取dex格式的文件,生成一种类似于汇编语言的输出。这种输出与jasmin[]的输出相似,但包含的是Dalvik的字节码。
res 目录
res目录存放资源文件。
resources.arsc
编译后的二进制资源文件
- Android杂项 Android中的库
-
发表日期:2015-07-08 21:53:14 | 来源: | 分类:Android杂项
-
Android中的类库:
1、Android.util 核心使用包(看名字就知道啦),包括了低级类,例如,专用的容器、字符串格式化和XML解析程序。
2、Android.os 操作系统包,提供了基本操作系统服务的访问时间,例如,消息传递、进程间通信、始终函数和调试。
3、Android.graphic 图形API提供了支持画布、颜色和绘画原语的低级图行类,让你可以在画布上画画。
4、Android.text 用来显示和解析文本的文本处理工具。
5、Android.database 当使用数据库的时候,提供处理游标(cursor)所要求的低级类。
6、Android.content 内容API通过处理资源、内容提供器和包的服务,来管理数据访问和发布。
7、Android.view View是核心用户界面类。所有的用户界面元素都是使用一系列View来构造的,用来提供交互组件。
8、Android.widget 构建在View包的基础上,Widget类是已经创建好的用户界面元素,可以直接在应用程序中使用,他们包含列表、按键和布局。
9、Com.google.android.maps 一个高级API,提供了对本地地图控件的访问,可以再应用程序中使用这些控件,它包括MapView控件以及用来对嵌入的地图进行注释和控制的Overlay和MapController类。
10、Android.app 一个提供了对应用程序模型进行访问的高级包。应用程序包包含活动(Acitivity)和服务(Service)API,它形成所有应用程序的基础。
11、Android.provider 为了方便开发人员对某些标注的内容提供器进行访问,provider包提供了一些类,从而提供了对所有的android发行版中包含的标准数据库的访问。
12、Android.telephony telephony Api允许直接与蛇鞭的电话栈进行交互,让你可以直接打电话、监控电话状态以及收发SMS消息。
13、Android.webkit webKit 包提供了与基于Web的内容相关的API,包括一个WebView控件,可以再活动或许cookie管理器重嵌入一个浏览器。
除了Android API之外,android栈还包含了一些可以提供程序框架使用的c/c++库集合:
1、OpenGL 基于O喷GL ES ApI 的用来支持3D图形的库。
2、Free Type 支持位图和矢量字体渲染。
3、SGL 用来提供2D图形引擎的核心库。
4、Libc 为基于Linux的嵌入式设备而优化的标注C库。
5、SQLite 用来存储数据的轻量级关系数据库引擎
6、SSL 用来支持使用安全套接字层(Secure Sockets Layer)加密协议的安全Internet通信。
7、Android.location 基于位置的服务API让应用程序可以访问到设备当前的物理位置,不管使用什么样硬件或技术来确定位置,基于位置的服务都提供了对位置信息的通用访问。
8、Android.media 媒体API提供了对音频和视频文件的回收和录制的支持,包括留媒体。
9、Android.opengl android使用OpenGL ES API提供了强大的3d渲染引擎,这种酒可以使用它来创建动态的3D用户界面。
10、Android.hardware 当可用的时候,硬件API就会提供传感器硬件,包括摄像头、加速计和罗盘传感器。
11、Android.buetooth, android.net.wifi和android.telephony android也提供了对硬件平台的低级访问,包括蓝牙,wifi和电话硬件。
- Android杂项 Manifest.permission_group android所有授权常量2
-
发表日期:2015-07-08 21:49:05 | 来源: | 分类:Android杂项
-
常量
ACCOUNTS
直接通过统计管理器访问管理的统计
COST_MONEY
可以用来让用户花钱但不需要通过与他们直接牵涉的权限
DEVELOPMENT_TOOLS
与开发联盟特征相连的权限组
HARDWARE_CONTROLS
被用来提供直接访问硬件设备的权限
LOCATION
用来允许访问用户的当前位置的权限
MESSAGES
用来允许应用发送用户收到的被拦截的信息
NETWORK
用来提供访问网络服务的权限
PERSONAL_INFO
用于提供访问用户私人数据如联系人、日历、电子邮件等的权限
PHONE_CALLS
用于跟访问和修改拨号状态如截取去话信息、读取和修改电话状态等的权限
STORAGE
与SD卡访问相关联的权限组
SYSTEM_TOOLS
与系统API有关联的权限组
- Android杂项 Manifest.permission android所有授权常量
-
发表日期:2015-07-08 21:47:45 | 来源: | 分类:Android杂项
-
常量
<td style="border-color: windowtext;border-width: 1px;height: 36px;width: 237px;padding: 0 7px" wi
ACCESS_CHECKIN_PROPERTIES
允许在登入数据库的时候读写其中的属性表,并上传改变的值
ACCESS_COARSE_LOCATION
允许应用访问范围(如WIFI)性的定位
ACCESS_FINE_LOCATION
允许应用访问精确(如GPS)性的定位
ACCESS_LOCATION_EXTRA_COMMANDS
允许应访问额外的提供定位的指令
ACCESS_MOCK_LOCATION
允许应用创建用于测试的模拟定位提供者
ACCESS_NETWORK_STATE
允许应用访问网络上的信息
ACCESS_SURFACE_FLINGER
允许应用使用低版本视图的特征
ACCESS_WIFI_STATE
允许应用访问关羽Wi-Fi网络的信息
ACCOUNT_MANAGER
允许应用进入帐户认证
AUTHENTICATE_ACCOUNTS
允许应用为ACCOUNT_MANAGER扮演一个帐户认证系统
BATTERY_STATS
允许应用去统计电源信息
BIND_APPWIDGET
允许应用告诉AppWidget哪个应用能够访问该AppWidget的数据
BIND_DEVICE_ADMIN
必须通过关机接收者的请求来确保只有系统能够与之交互
BIND_INPUT_METHOD
必须通过InputMethodService的请求来确保只有系统能够与之绑定
BIND_WALLPAPER
必须通过WallpaperService的请求来确保只有系统能够与之绑定
BLUETOOTH
允许应用去连接蓝牙设备
BLUETOOTH_ADMIN
允许应用找到与之连接的蓝牙设备
BRICK
被请求废止设备(非常危险)
BROADCAST_PACKAGE_REMOVED
允许应用发出一个程序包被移除的广播消息
BROADCAST_SMS
允许应用发出一个收到短信的消息
BROADCAST_STICKY
允许应用发出一个与intent相连的消息
BROADCAST_WAP_PUSH
允许应用发出一个收到WAP PUSH的广播消息
CALL_PHONE
允许应用启动一个用户确认电话被拨打而不通过拨打电话的用户界面的的拨打程序
CALL_PRIVILEGED
允许应用启动一个用户确认电话被拨打而不通过拨打电话的用户界面的的任意号码的拨打,包括紧急号码.
CAMERA
能够启动照相机设备的请求
CHANGE_COMPONENT_ENABLED_STATE
允许应用去改变一个应用是否是激活状态
CHANGE_CONFIGURATION
允许应用修改当前的配置,如本地设置
CHANGE_NETWORK_STATE
允许应用改变网络的连接状态
CHANGE_WIFI_MULTICAST_STATE
允许应用进入Wi-Fi的组播方式
CHANGE_WIFI_STATE
允许应用改变Wi-Fi的连接状态
CLEAR_APP_CACHE
允许应用清除所有安装在设备上的应用的缓存
CLEAR_APP_USER_DATA
允许应用清除使用者的信息资料
CONTROL_LOCATION_UPDATES
允许从广播设备来更新或不更新本地的消息
DELETE_CACHE_FILES
允许应用删除掉缓存文件
DELETE_PACKAGES
允许应用删除掉程序包
DEVICE_POWER
允许低权限的访问电源管理项
DIAGNOSTIC
允许应用诊断程序资源
DISABLE_KEYGUARD
允许应用禁用键盘锁
DUMP
允许应用从系统服务中恢复转储的信息
EXPAND_STATUS_BAR
允许应用扩大或缩小状态栏
FACTORY_TEST
如制造商测试的应用一样用终极权限用户运行
FLASHLIGHT
允许访问手电筒
FORCE_BACK
允许应用强制的返回操作而不论是不是最终的activity
GET_ACCOUNTS
允许应用访问账目服务中的统计清单
GET_PACKAGE_SIZE
允许应用查找出任何程序包使用的空间
GET_TASKS
允许应用找到关于当前或最近运行的任务和在哪些acitivities里运行
GLOBAL_SEARCH
这个权限可以被内容提供者用来允许使用全程搜索他们的数据
HARDWARE_TEST
允许访问硬件及周边设备.
INJECT_EVENTS
允许应用注入用户事件(键盘、触摸)到事件中然后提供给任意的窗口
INSTALL_LOCATION_PROVIDER
允许应用安装一个位置提供商到位置管理器中
INSTALL_PACKAGES
允许应用安装程序包.
INTERNAL_SYSTEM_WINDOW
允许应用打开被部分系统用户接口使用的窗口
INTERNET
允许应用打开网络套接口
KILL_BACKGROUND_PROCESSES
允许应用去呼叫killBackgroundProcesses(String).方法
MANAGE_ACCOUNTS
允许应用去管理帐户管理者中的重要清单
MANAGE_APP_TOKENS
允许应用去管理(创建、销毁、顺序)在窗口管理者中的应用
MASTER_CLEAR
MODIFY_AUDIO_SETTINGS
允许应用修改全局音频设定
MODIFY_PHONE_STATE
允许改变拨打电话的状态-电源等
MOUNT_FORMAT_FILESYSTEMS
允许格式化可移除的存储仓库的文件系统
MOUNT_UNMOUNT_FILESYSTEMS
允许装备或解除可移除的存储仓库的文件系统
PERSISTENT_ACTIVITY
允许应用使它的activities更持久稳固
PROCESS_OUTGOING_CALLS
允许应用监督、限定或终止呼出的电话
READ_CALENDAR
允许应用读取用户的日历数据
READ_CONTACTS
允许应用读取用户的联系人数据
READ_FRAME_BUFFER
允许应用抓取屏幕和更多可获得的缓冲数据
READ_HISTORY_BOOKMARKS
允许应用去读取(非写)用户浏览历史和书签
READ_INPUT_STATE
允许应用去的当前键盘和控制的状态
READ_LOGS
允许应用读取低级别的系统日志文件
READ_OWNER_DATA
允许应用读取所有者的数据
READ_PHONE_STATE
允许读取电话的状态
READ_SMS
允许应用读取短信息.
READ_SYNC_SETTINGS
允许应用读取同步的设置
READ_SYNC_STATS
允许应用读取同步的统计数据
REBOOT
重新启动设备的请求
RECEIVE_BOOT_COMPLETED
允许应用接收在系统完成启动后发出的ACTION_BOOT_COMPLETED广播信息
RECEIVE_MMS
允许应用去监听多媒体信息并记录和对起进行处理
RECEIVE_SMS
允许应用去监听短消息并记录和对起进行处理
RECEIVE_WAP_PUSH
允许应用监听WAP push信息
RECORD_AUDIO
允许应用记录音频信息
REORDER_TASKS
允许应用改变任务的关系位置
RESTART_PACKAGES
已废弃使用
SEND_SMS
允许应用发送短消息.
- JAVA基础 5.String 和 StringBuffer类常用方法
-
发表日期:2015-07-07 23:16:51 | 来源: | 分类:JAVA基础
-
示例1
public class StringDemo { public static void main(String[] args) { // TODO 自动生成的方法存根 String name1 = "eniac"; String name2 = new String("eniac"); String name3 = "eniac"; String name4 = new String("eniac"); System.out.println(name1);//eniac System.out.println(name2);//eniac System.out.println(name3);//eniac System.out.println(name4);//eniac //那么比较一下呢? System.out.println(name1==name2);//false System.out.println(name1==name3);//true System.out.println(name2==name4);//false /* 值都是eniac,为什么会不同呢?这就要内存分析了, * JAVA这个语言 A==B 和其他语言不同,它不是比较内容的值是否相同,而是比较内存地址是否相同 * new String() 会每次都开辟一个新空间,所以内存地址会不同, * 而 String name1 = "eniac",会开辟一次 而 String name3 = "eniac" 会引用上一次name1的内存地址 * 所以,从性能而言,尽量使用 String name3 = xxx 的 */ //如果一定要比较值是否相同,我们不在意内存地址是否相同的话,可以这样 System.out.println(name1.equals(name2));//true //字符串换成字符数组 String str1 = "canquick"; char[] Cstr1 = str1.toCharArray(); System.out.println(Cstr1);//canquick for (int i = 0; i < Cstr1.length; i++) { char c = Cstr1[i]; System.out.println(c);//c、a、n、q、u、i、c、k } //字符数组换成字符串 String str2 = new String(Cstr1); String str3 = new String(Cstr1,3,5); System.out.println(str2);//canquick System.out.println(str3);//quick //从字符串中取出指定位置的字符 char str4 = str1.charAt(3); System.out.println(str4);//q //字符串与byte数组转换 byte[] byte1 = str1.getBytes(); System.out.println(byte1); System.out.println(new String(byte1));//canquick System.out.println(new String(byte1,3,5));//canquick //取得一个字符串的长度 System.out.println(str1.length());//8 //查找指定字符串是否存在 System.out.println(str1.indexOf("i"));//5 System.out.println(str1.indexOf("i",3));//从第四个位置开始查找 //去掉空格 System.out.println(" hello !".trim());//hello ! //字符截取 System.out.println(str1.substring(1, 3));//an //拆分字符串 String str5[] = str1.split("i"); for (String string : str5) { System.out.println(string);//canqu、ck } //大小写转换 System.out.println(str1.toUpperCase());//CANQUICK (toLowerCase:转小写) //判断字符串是否以指定字符开头或结尾 System.out.println(str1.startsWith("can"));//true System.out.println(str1.endsWith("ck"));//true //不区分大小写比较 System.out.println(str1.equalsIgnoreCase("CANQUICK"));//true //字符串替换 System.out.println(str1.replaceAll("quick", "like"));//canlike } }
示例2
public class StringBufferDemo01 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub StringBuffer buffer = new StringBuffer(); buffer.append("Hello");//Hello buffer.append("world").append("!!!");//Helloworld!!!//字符串插入 buffer.insert(5," ");//Hello world!!! buffer.reverse();//!!!dlrow olleH//字符串反转 buffer.reverse();//Hello world!!! buffer.replace(6, 11, "ENIAC");//Hello ENIAC!!!//字符串替换 System.out.println(buffer.substring(6, 11));//ENIAC 字符串截取 buffer.delete(6, 11);//Hello !!!//字符串删除 System.out.println(buffer.indexOf("llo"));//2 //查找字符串(-1为无) System.out.println(buffer); } }
- JAVA基础 6.Math类
-
发表日期:2015-07-07 21:12:26 | 来源: | 分类:JAVA基础
-
示例1
import java.util.Random; public class MathDemo { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("求平方根:"+Math.sqrt(9.0));//求平方根:3.0 System.out.println("求最大值:"+Math.max(57, 35));//求最大值:57 System.out.println("求最小值:"+Math.min(57, 35));//求最小值:35 System.out.println("2的3次方:"+Math.pow(2, 3));//2的3次方:8.0 System.out.println("四舍五入:"+Math.round(3.14));//四舍五入:3 Random random = new Random(); for (int i = 0; i < 10; i++) { System.out.println(random.nextInt(100));//小于100的随机数 } } }
- 前端开发(1)
- 数据库(0)
- PHP(0)
- PHP杂项(34)
- PHP基础-李炎恢系列课程(20)
- 中文函数手册(0)
- 错误处理 函数(13)
- OPcache 函数(6)
- PHP 选项/信息 函数(54)
- Zip 函数(10)
- Hash 函数(15)
- OpenSSL 函数(63)
- Date/Time 函数(51)
- 目录函数(9)
- Fileinfo 函数(6)
- iconv 函数(11)
- 文件系统函数(81)
- 多字节字符串 函数(57)
- GD 和图像处理 函数(114)
- 可交换图像信息(5)
- Math 函数(50)
- 程序执行函数(11)
- PCNTL 函数(23)
- JSON 函数(4)
- SPL 函数(15)
- URL 函数(10)
- cURL 函数(32)
- 网络 函数(33)
- FTP 函数(36)
- Session 函数(23)
- PCRE 函数(11)
- PCRE 正则语法(19)
- 数组 函数(81)
- 类/对象 函数(18)
- 函数处理 函数(13)
- 变量处理 函数(37)
- SimpleXML 函数(3)
- 杂项 函数(31)
- 字符串 函数(101)
- JAVA(0)
- Android(0)
- Linux(0)
- 其他(0)