android自定义权限的实现

jopen 8年前

在android开发中,有时需要利用自定义权限来保证android应用的安全,今天写一个自定义权限的小案例。包含了访问activity,service,以及发送广播可广播接受者,和自定义权限。

首先,新建两个工程,一个叫做security,另一个叫做securitytest

在seurity中定义,声明,并利用自定义的几个权限,在securitytest中就像用普通的权限一样,利用即可

security中声明权限如下:

<?xml version="1.0" encoding="utf-8"?>  <manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="com.example.security"      android:versionCode="1"      android:versionName="1.0" >        <uses-sdk          android:minSdkVersion="11"          android:targetSdkVersion="18" />        <permission android:name="com.tct.permission.READ_PROVIDER"  android:protectionLevel="dangerous">      </permission>      <permission android:name="com.tct.apermission.WRITE_PROVIDER" android:protectionLevel="dangerous">      </permission>      <permission          android:name="com.tct.attach.start_activity"          android:protectionLevel="normal" >      </permission>      <permission          android:name="com.tct.attach.service.permission"          android:protectionLevel="normal" >      </permission>      <permission          android:name="com.tct.attach.broadcastreceiver"          android:protectionLevel="dangerous" >      </permission>        <uses-permission android:name="com.tct.attach.service.permission" />      <uses-permission android:name="com.tct.attach.start_activity" />      <uses-permission android:name="com.tct.attach.broadcastreceiver" />        <application          android:allowBackup="true"          android:icon="@drawable/ic_launcher"          android:label="@string/app_name"          android:theme="@style/AppTheme" >          <activity              android:name="com.example.security.MainActivity"              android:label="@string/app_name" >              <intent-filter>                  <action android:name="android.intent.action.MAIN" />                    <category android:name="android.intent.category.LAUNCHER" />              </intent-filter>          </activity>            <service              android:name="com.example.security.MyService"              android:permission="com.tct.attach.service.permission" >              <intent-filter>                  <action android:name="com.test.action.service" >                  </action>                    <category android:name="android.intent.category.DEFAULT" >                  </category>              </intent-filter>          </service>            <activity              android:name="com.example.security.MyActivity"              android:permission="com.tct.attach.start_activity" >              <intent-filter>                  <action android:name="android.intent.action.MAIN" >                  </action>                    <category android:name="android.intent.category.DEFAULT" >                  </category>              </intent-filter>          </activity>            <receiver              android:name="com.example.security.MyBroadcaseReceiver"              android:permission="com.tct.attach.broadcastreceiver" >              <intent-filter>                  <action android:name="com.tct.receiver.action" >                  </action>              </intent-filter>          </receiver>            <activity android:name="com.example.security.ShowReceiverActivity" >          </activity>          <activity android:name="com.example.security.MyBroadCast" >          </activity>            <provider              android:name="com.example.contentprovider.MyContentProvider"              android:authorities="com.liuhang.urlcontent"              android:exported="true" >  <!--             android:path="content://com.liuhang.urlcontent/person/3" -->              <path-permission                  android:pathPrefix="/person"                  android:readPermission="com.tct.apermission.WRITE_PROVIDER"                  android:writePermission="com.tct.apermission.WRITE_PROVIDER"                  ></path-permission>                            <grant-uri-permission android:pathPrefix="/person"/>          </provider>      </application>    </manifest>
securitytest中的AndroidManifest.xml文件如下:

<?xml version="1.0" encoding="utf-8"?>  <manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="com.example.securitytest"      android:versionCode="1"      android:versionName="1.0" >        <uses-sdk          android:minSdkVersion="12"          android:targetSdkVersion="18" />              <uses-permission android:name="com.tct.attach.service.permission"/>      <uses-permission android:name="com.tct.attach.start_activity"/>      <uses-permission android:name="com.tct.attach.broadcastreceiver"/>      <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>      <uses-permission android:name="com.tct.permission.READ_PROVIDER"/>      <uses-permission android:name="com.tct.apermission.WRITE_PROVIDER"/>      <application          android:allowBackup="true"          android:icon="@drawable/ic_launcher"          android:label="@string/app_name"          android:theme="@style/AppTheme" >          <activity              android:name="com.example.securitytest.MainActivity"              android:label="@string/app_name" >              <intent-filter>                  <action android:name="android.intent.action.MAIN" />                    <category android:name="android.intent.category.LAUNCHER" />              </intent-filter>          </activity>                    <receiver android:name="com.example.securitytest.MyTestReceiver">              <intent-filter>                  <action android:name="com.test.permission.sendbroadcast"></action>              </intent-filter>          </receiver>      </application>    </manifest>
只有当在securitytest中利用了这些权限才可以访问对应的activity,service,contentprovider以及接受和发送对应的广播。


源码如下:http://download.csdn.net/detail/mockingbirds/8109057


来自: http://blog.csdn.net//mockingbirds/article/details/40682679