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中的其他類型的組件。
|