Android开发指南 框架主题 安全和许可
2010-06-17 03:18:00 来源:WEB开发网所有存储在应用程序中的数据都会赋予一个属性-该应用程序的用户ID,这使得其他package无法访问这些数据。当通过这些方法getSharedPreferences(String, int), openFileOutput(String, int), 或者openOrCreateDatabase(String, int, SQLiteDatabase.CursorFactory)来创建一个新文件时,你可以通过使用MODE_WORLD_READABLE与/或MODE_WORLD_WRITEABLE标志位来设置是否允许其他 package来访问读写这个文件。当设置这些标志位时,该文件仍然属于该应用程序,但是它的全局读写权限已经被设置,使得它对于其他任何应用程序都是可见的。
使用许可Using Permissions
一个基本的Android程序通常是没有任何许可与之关联的,这就是说它不能做任何扰乱用户或破坏数据的勾当。那么为了使用设备被保护的特性,我们就必须在AndroidManifest.xml添加一个或多个< uses-permission >标签,用以声明你的应用程序需要的许可。
例如,一个想要监控接收短消息的应用程序需要指定:
< manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.app.myapp" >
< uses-permission android:name="android.permission.RECEIVE_SMS" / >
< /manifest >
在应用程序安装时,该应用程序请求的权限许可是通过package installer来授予的。package installer是通过检查该应用程序的签名和/或用户的交换结果来确定是否给予该程序request的权限。在用户使用过程中不会去检查权限,也就是说要么在安装的时候就批准该权限,使其按照设计可以使用该权限;要么就不批准,这样用户也就根本无法使用该feature,也不会有任何提示告知用户尝试失败。
很多时候, 一个许可失败会导致一个SecurityException被抛回该应用程序. 但是Android并不保证这种情况会处处发生。例如,当数据被deliver到每一个receiver的时候,sendBroadcast(Intent) 方法会去检查permissions,在这个方法调用返回之后,你也不会收到任何exception。几乎绝大多数情况,一个permission failure都会打印到log当中。(注意查看Logcat)
Android系统定义的权限可以在Manifest.permission类中找到。任何一个程序都可以定义并强制执行自己独有的permissions,因此Manifest.permission中定义的permissions并不是一个完整的列表(即有肯能有自定义的permissions)。
更多精彩
赞助商链接