TShopping

 找回密碼
 註冊
搜索
查看: 1662|回復: 0
打印 上一主題 下一主題

[教學] android 自定義權限 permission

[複製鏈接]
跳轉到指定樓層
1#
發表於 2014-9-21 00:27:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
 
Push to Facebook
Android支持為應用程序自定義權限。如果希望自己的程序組件(如Activity,BroacastReceiver)等被任意用戶隨意啟動執行。要使用自定義權限,首先在AndroidManifest.xml文件中聲明它們,定義了權限之後,可以將它作為組件定義的一部分進行引用。

下面列舉一個demo,詳述自定義權限的過程:
首先創建一個工程CustomMadePermisson:


主Activity(啟動Activity):
import android.app.Activity;
import android.os.Bundle;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       LinearLayout layout = new LinearLayout(this);
       layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
              LayoutParams.WRAP_CONTENT));
       layout.setOrientation(LinearLayout.HORIZONTAL);
       TextView textView = new TextView(this);
       textView.setText("歡迎來到徐志奇的博客!");
       layout.addView(textView);
       setContentView(layout);
    }
}

新建另外一個Activity,名稱為Another,該Activity只是一個空Activity,用來驗證添加啟動權限後的啟動效果:
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class Another extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       Toast.makeText(this,"歡迎來到新的界面",Toast.LENGTH_LONG).show();
    }
}

添加權限:
    雙擊AndroidManifest.xml文件,打開permissions選項卡,在Permissions窗口中單擊Add按鈕,選擇Permission,然後單擊ok按鈕,添加一個新的Permission:

權限的特性:
Android:name
    權限的名稱,必填屬性,通常應該遵循Android的命名方案(*.permission.*)但非必須。
android:protectionLevel
    定義與權限相關的保護級別,必填屬性。必須選擇一下四項之一:normal、dangerous、signature、signatureOrSystem。
android:permissionGroup
    非必填屬性,可以將權限放在一個組中,但對於自定義權限,盡量不要設置此屬性了。
android:label
    非必填屬性,含義你應該明白。
android:description
    非必填屬性,含義你應該明白。
android:icon
    非必填屬性,含義你應該明白。
現在已經定義好了權限,接下來就是設置啟動Activity的權限了。要在活動上設置權限,可以將android:permission特性添加到AndroidManifest.xml文件中:


AndroidManifest.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xzq.custompermission" android:versionCode="1"
    android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />
    <permission android:protectionLevel="normal"
       android:name="com.xzq.permission.zhongnantest"></permission>

    <application android:icon="@drawable/icon" android:label="@string/app_name">
       <activity android:name=".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>
        <activity android:name=".Another" android:label="@string/app_name"
           android:permission="com.xzq.permission.zhongnantest">
           <intent-filter>
              <action android:name="android.intent.action.MAIN" />
              <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
    </application>
</manifest>


新建測試工程Clint:

在該工程中創建一個Activity,用來測試上面添加了啟動權限的Activity的啟動情況。


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       ((Button) findViewById(R.id.button1))
              .setOnClickListener(new View.OnClickListener() {

                  @Override
                  public void onClick(View v) {
                     Intent intent = new Intent();
                     intent.setClassName("com.xzq.custompermission",
                            "com.xzq.custompermission.Another");
                     startActivity(intent);
                  }
              });
    }
}


界面佈局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView android:layout_width="fill_parent"
       android:layout_height="wrap_content" android:text="@string/hello" />
    <Button android:text="啟動新Activity" android:id="@+id/button1"
       android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</LinearLayout>


AndroidManifest.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xzq.client" android:versionCode="1" android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="com.xzq.permission.zhongnantest" />
    <application android:icon="@drawable/icon" android:label="@string/app_name">
       <activity android:name=".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>

    </application>
</manifest>
重點是在該文件中添加了相應的權限,才可以啟動上面的界面。

自定義權限不僅適用於活動,實際上,也可以同樣應用於Android中的其他類型的組件。


 

臉書網友討論
*滑块验证:
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2024-4-26 07:28 , Processed in 0.084282 second(s), 22 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表