android自定義權限的實現

jopen 8年前發布 | 8K 次閱讀 Android開發 移動開發

在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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!