Android權(quán)限控制權(quán)限監(jiān)控_第1頁
Android權(quán)限控制權(quán)限監(jiān)控_第2頁
Android權(quán)限控制權(quán)限監(jiān)控_第3頁
Android權(quán)限控制權(quán)限監(jiān)控_第4頁
Android權(quán)限控制權(quán)限監(jiān)控_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

實(shí)用標(biāo)準(zhǔn)文案Android 權(quán)限管理機(jī)制1.Android 權(quán)限管理。Android 權(quán)限來限制一些有限制的特性在應(yīng)用程序之間以及應(yīng)用組件訪問功能的訪問。在 Android 的發(fā)展,我們將滿足網(wǎng)絡(luò)的需要,我們需要添加所需的網(wǎng)絡(luò)權(quán)限:在開發(fā)中如果我們使用了某個(gè)權(quán)限,如果沒有在 AndroidManifest.xml 文件中相應(yīng)申明,那么程序會(huì)運(yùn)行有錯(cuò)誤且提示: 我們可以根據(jù)這個(gè)錯(cuò)誤提示,一般情況下,在 AndroidManifest.xml 中通過增加相應(yīng)的uses-permissionAndroid 權(quán)限列表:在Android 官方文檔中查尋我們需要使用的權(quán)限。 不同的api有著不同的權(quán)限,會(huì)出現(xiàn)兼容性問題。2.Android 自定義權(quán)限:在有些場(chǎng)合我們或許會(huì)碰到如下的場(chǎng)景: 用戶在應(yīng)用程序中進(jìn)行操作時(shí)候, 要啟動(dòng)另外一個(gè)應(yīng)用程序的時(shí)候,我們一般是打開一個(gè)應(yīng)用程序。并且進(jìn)入 Activity 。有些情況,程序處于安全需要,這些操作就需要加上訪問權(quán)限。 Android 提供了自定義權(quán)限功能。有時(shí)候,我們可能遇到如下需求場(chǎng)景: 當(dāng)用戶在一個(gè)應(yīng)用程序中進(jìn)行某項(xiàng)操作時(shí), 會(huì)啟動(dòng)另精彩文檔實(shí)用標(biāo)準(zhǔn)文案假設(shè)應(yīng)用程序。在 A中有MainActivity ,應(yīng)用程序 B中有AActivity 和BActivity ?,F(xiàn)在想通過A中的MainActivity 直接打開 B中的BActivity 。那么,如果不考慮權(quán)限, A中的MainActivity 如何直接打開 B中的BActivity 呢?一般,可以通過如下方式:1publicclassMainActivityextendsActivity{2privateButtonbutton;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){7super.onCreate(savedInstanceState);8setContentView(R.layout.activity_main);910button=(Button)findViewById(R.id.button);11button.setOnClickListener(newView.OnClickListener(){12@Override13publicvoidonClick(Viewv){14Intentintent=newIntent();15intent.setClassName("com.example.testandroid","com.example.testandroid.BActivity");16startActivity(intent);精彩文檔實(shí)用標(biāo)準(zhǔn)文案17 }18 });}}我們?cè)贗ntent 中的setClass(StringpackageName,StringclassName) 方法,需要注意的是此時(shí)需要寫上包的全名。與此同時(shí)我們?cè)?B中的BActivity 的AndroidManifest.xml 文件中進(jìn)行如下配置:<activityandroid:exported="true"></activity>一定要為Activity 中的屬性android:exported 設(shè)置值為 true,以表示可以被其他應(yīng)用程序打開。或者,也可以進(jìn)行如下配置:<activity<intent-filter>4 <actionandroid:name=""/></intent-filter></activity>為Activity 設(shè)置一個(gè)空的 action android:name 屬性。那么我們使用自定義權(quán)限具體步驟如下:精彩文檔實(shí)用標(biāo)準(zhǔn)文案1.既然是自定權(quán)限,那么首先得申明此權(quán)限:在B中的AndroidManifest.xml 中,一般是緊跟 uses-sdk 標(biāo)簽后,通過permission 標(biāo)簽進(jìn)行申明。1<permissionandroid:description="stringresource"2android:icon="drawableresource"3android:label="stringresource"android:name="string"android:permissionGroup="string"6 android:protectionLevel=["normal" | "dangerous" | "signature" |"signatureOrSystem"]/>Android 的自定義權(quán)限流程,總的來說,定義了權(quán)限訪問的控制,其他應(yīng)用必須要有權(quán)限才能夠訪問到這個(gè) ActivityReceiver 。Android 軟件權(quán)限控制實(shí)現(xiàn)精彩文檔實(shí)用標(biāo)準(zhǔn)文案1.Android 廣播機(jī)制Android 廣播分為發(fā)送者和接收者兩種類型。 用于Android 系統(tǒng)在某些情況下與 App之間通信。從開發(fā)模式上來說,廣播使用了觀察者模式,是一種基于消息的發(fā)布訂閱模式。所以從開發(fā)的角度, Android 中的廣播極大的程度解耦合,使得系統(tǒng)更加的輕便易于管理。1.廣播接收者 BroadcastReceiver 通過Binder 機(jī)制向AMS(ActivityManagerService) 進(jìn)行注冊(cè);2.廣播發(fā)送者通過 binder 進(jìn)行廣播的發(fā)布;3.AMS 查找符合相應(yīng)條件( IntentFilter/Permission 等)的 BroadcastReceiver ,將廣播發(fā)送到BroadcastReceiver (一般情況下是 Activity )相應(yīng)的消息循環(huán)隊(duì)列中;4.消息循環(huán)執(zhí)行拿到此廣播,回調(diào) BroadcastReceiver 中的onReceive() 方法。由此看來,廣播的發(fā)送和接收是觀察者模式的訂閱和發(fā)布。 AMS 是處理中心。而且發(fā)布消息和消息的接收異步完成的。廣播的發(fā)布不在關(guān)心是否有接收者接受消息。自定義廣播接收器需要繼承基類 BroadcastReceivre ,并實(shí)現(xiàn)抽象方法 onReceive(context,intent)方法。1publicclassMyBroadcastReceiverextendsBroadcastReceiver{publicstaticfinalStringTAG="MyBroadcastReceiver";publicstaticintm=1;4@OverridepublicvoidonReceive(Contextcontext,Intentintent){精彩文檔實(shí)用標(biāo)準(zhǔn)文案7Log.w(TAG,"intent:"+intent);8Stringname=intent.getStringExtra("name");9Log.w(TAG,"name:"+name+"m="+m);10m++;1112Bundlebundle=intent.getExtras();13}}BroadcastReceiver 注冊(cè)類型BroadcastReceiver 總體上可以分為兩種注冊(cè)類型:靜態(tài)注冊(cè)和動(dòng)態(tài)注冊(cè)。1).靜態(tài)注冊(cè):直接在AndroidManifest.xml 文件中進(jìn)行注冊(cè)。規(guī)則如下:<receiverandroid:enabled=["true"|"false"]android:exported=["true"|"false"]android:icon="drawableresource"android:label="stringresource"android:name="string"android:permission="string"精彩文檔實(shí)用標(biāo)準(zhǔn)文案android:process="string">...</receiver>android:process ——broadcastReceiver 運(yùn)行所處的進(jìn)程。 默認(rèn)為app的進(jìn)程??梢灾付í?dú)立的進(jìn)程( Android 四大基本組件都可以通過此屬性指定自己的獨(dú)立進(jìn)程)常見的注冊(cè)形式有:<receiverandroid:name=".MyBroadcastReceiver"><intent-filter></intent-filter><intent-filter></intent-filter></receiver>1.廣播發(fā)送及廣播類型我們通常認(rèn)為的廣播發(fā)送和廣播接收,表面上是 Android 廣播機(jī)制的實(shí)際體現(xiàn),實(shí)際上這個(gè)并不是以廣播對(duì)象存在。 定義廣播的過程實(shí)際就是廣播意圖的實(shí)現(xiàn)過程。 通過廣播發(fā)送的實(shí)體將這些題圖傳達(dá)出去。廣播分為系統(tǒng)廣播、有序廣播、普通廣播、粘性廣播、 App內(nèi)廣播。普通廣播主要是開發(fā)者自己定義 intent,普通廣播會(huì)被有興趣的接收者接受。系精彩文檔實(shí)用標(biāo)準(zhǔn)文案統(tǒng)廣播是Android 系統(tǒng)中內(nèi)置的廣播,在 android 系統(tǒng)中系統(tǒng)啟動(dòng),屏幕點(diǎn)亮多會(huì)發(fā)出廣播通知。有序廣播是針對(duì)廣播接收者而言的主要區(qū)別是在廣播的發(fā)送過程調(diào)用了sendOrderedBroadcast() 進(jìn)行廣播的發(fā)送。App 應(yīng)用廣播主要是 App跨越進(jìn)程消息傳遞。App內(nèi)廣播具有安全性高,效率高的優(yōu)點(diǎn)。通過廣播實(shí)現(xiàn)軟件權(quán)限監(jiān)聽Android 系統(tǒng)中廣播的使用在各個(gè)方便多有體現(xiàn)。 在本系統(tǒng)中主要通過系統(tǒng)廣播進(jìn)行軟件安裝的捕獲, Android 系統(tǒng)中軟件的安裝和卸載多會(huì)發(fā)出一條廣播通知各個(gè)應(yīng)用程序。我們通過廣播的捕獲我們可以獲取到剛剛安裝成功的軟件信息。并且通過調(diào)用系統(tǒng)庫資源獲取軟件安裝的權(quán)限數(shù)據(jù), 從而進(jìn)行全新的控制。如圖創(chuàng)建一個(gè)BootReceiver 用于接收軟件安裝成功的廣播。 當(dāng)有軟件安裝成功時(shí)候?qū)?huì)自動(dòng)發(fā)送給我們的 BootReceiver 。@Overridepublic void onReceive(Context context,Intent intent){接收安裝廣播if(intent.getAction().equals( )){StringpackageName =intent.getDataString();StringpackName =packageName .split("age:")[1];PackageManager packManager =精彩文檔實(shí)用標(biāo)準(zhǔn)文案context.getPackageManager();List<ApplicationInfo> infos=packManager .getInstalledApplications(PackageManager. GET_ACTIVITIES);}我們通過 BootReceiver 的onReceiver 中的方法獲取廣播,并且獲取到軟件安裝成功的包名。我們?cè)谡{(diào)用系統(tǒng)提供的功能模塊進(jìn)行權(quán)限的判斷。for(ApplicationInfo info:infos){Log.i("app","appName--->" +info.packageName +""+packageName );if(packName.contains(info.packageName )){Log.i("app","相同");try{PackageInfo packInfo =packManager .getPackageInfo( info.packageName ,PackageManager. GET_PERMISSIONS);Stringpermissons []=packInfo.requestedPermissions ;獲取該app的所有權(quán)限StringBuffer str=newStringBuffer();精彩文檔實(shí)用標(biāo)準(zhǔn)文案intlength =permissons.length;for(int i=0;i<length ;i++){Log.i("app",permissons[i]);str.append(permissons[i]+"\n");}Log.i("permission" ,str.toString());

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論