在android中为了安全性起见,对于一些系统的相关操作定义了很多权限,比如打电话,短信,文件写入等等。为了确保应用程序安全,稳定性,我们可以自定义一些权限机制来阻止其他应用程序对本应用程序的相关操作。下面举个例子;
在A项目的AndroidManifest.xml配置如下;
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.scanfile" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".ScanFileActivity" android:label="@string/app_name" android:permission="com.scanfile.permission.allow.access" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <permission android:protectionLevel="normal" android:name="com.scanfile.permission.allow.access"/> </manifest>
在B项目里添加修改权限即可启动A项目里的Activity
<permission android:protectionLevel="normal" android:name="com.scanfile.permission.allow.access"/>
对于Service,BroadcastReceiver而言,除了权限限制访问外,我们还可以设置android:exported="false"的方法,来控制该组件是否接受外来应用程序的访问。
对于Content
Provider的处理权限,在Android中可以直接显示的声明,比如在androidmanifest.xml中声明读或写权限,在Provider节点中,声明android:writePermission或android:readPermission属性,当然其他程序声明了这些权限也可以访问,这时我们可以通过 android:authorities属性限制一个类的访问,比如;
<provider android:name=".myProvider" android:authorities="com.scanfile.myProvider.author" android:writePermission="com.scanfile.permission.WRITE_DATABASE" android:readPermission="com.scanfile.permission.READ_DATABASE" />
以上就是自定义权限的简单设置,如有不足还请指出。