Android基礎(chǔ)程序設(shè)計(jì)第七章-內(nèi)容提供者_(dá)第1頁(yè)
Android基礎(chǔ)程序設(shè)計(jì)第七章-內(nèi)容提供者_(dá)第2頁(yè)
Android基礎(chǔ)程序設(shè)計(jì)第七章-內(nèi)容提供者_(dá)第3頁(yè)
Android基礎(chǔ)程序設(shè)計(jì)第七章-內(nèi)容提供者_(dá)第4頁(yè)
Android基礎(chǔ)程序設(shè)計(jì)第七章-內(nèi)容提供者_(dá)第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第七章 內(nèi)容提供者7.1 內(nèi)容提供者簡(jiǎn)介7.5 小結(jié)7.3 訪問其他程序中的數(shù)據(jù)7.2 運(yùn)行時(shí)權(quán)限7.4 自定義內(nèi)容提供者7.1 內(nèi)容提供者簡(jiǎn)介Android程序中有時(shí)也需要通過其他應(yīng)用程序訪問程序。微信程序需要獲取手機(jī)聯(lián)系人信息,支付寶程序進(jìn)行收款人電話號(hào)碼填寫的時(shí)候也需要獲取通訊錄信息。為了實(shí)現(xiàn)跨程序共享數(shù)據(jù)的功能,Android系統(tǒng)提供了一個(gè)組件ContentProvider(內(nèi)容提供者)。ContentProvider(內(nèi)容提供者)是Android系統(tǒng)四大組件之一,主要用于在不同應(yīng)用程序之間實(shí)現(xiàn)數(shù)據(jù)共享功能。Android系統(tǒng)中應(yīng)用程序之間相互獨(dú)立,分別運(yùn)行在自己的進(jìn)程中,如果一個(gè)應(yīng)用

2、程序要訪問另一個(gè)程序中的數(shù)據(jù)且同時(shí)保證被訪數(shù)據(jù)的安全性,就需要用到ContentProvider,它也是Android實(shí)現(xiàn)跨程序共享數(shù)據(jù)的標(biāo)準(zhǔn)方式。7.2 運(yùn)行時(shí)權(quán)限Android開發(fā)團(tuán)隊(duì)在Android 6.0之后的系統(tǒng)中引入了運(yùn)行時(shí)權(quán)限這個(gè)功能,更加嚴(yán)格的保護(hù)用戶安全及隱私。接下來我們學(xué)習(xí)一下Android 6.0只有引入的運(yùn)行時(shí)權(quán)限。7.2.1 Android權(quán)限機(jī)制介紹在Android 6.0之前,權(quán)限機(jī)制非常簡(jiǎn)單,只需要在清單文件AndroidMenifest.xml文件中將自己需要的權(quán)限進(jìn)行聲明就可以。Android 6.0 之后加入了運(yùn)行時(shí)權(quán)限這一概念對(duì)于危險(xiǎn)權(quán)限,應(yīng)用必須在使用

3、的時(shí)候進(jìn)行申請(qǐng),用戶可以自主選擇是否授予這些權(quán)限。如果拒絕授予權(quán)限,應(yīng)用也不會(huì)崩潰,只是用戶無法使用這一部分功能罷了。7.2 運(yùn)行時(shí)權(quán)限Android現(xiàn)在將所有的權(quán)限劃分為兩類,一類是普通權(quán)限,一類是危險(xiǎn)權(quán)限。權(quán)限組名權(quán)限名CALENDARREAD_CALENDARWRITE_CALENDARCAMERACAMERACONTACTSREAD_CONTACTSWRITE_CONTACTSGET_ACCOUNTSLOCATIONACCESS_FINE_LOCATIONACCESS_COARSE_LOCATIONMICROPHONERECORD_AUDIOPHONEREAD_PHONE_STATEC

4、ALL_PHONEREAD_CALL_LOGWRITE_CALL_LOGADD_VOICEMALLUSE_SIPPROCESS_OUTGOING_CALLSSENSORSBODY_SENSORSSMSSEND_SMSRECEIVE_SMSREAD_SMSRECEIVE_WAP_PUSHRECEIVE_MMSSTORAGEREAD_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE7.2 運(yùn)行時(shí)權(quán)限 普通權(quán)限指不會(huì)直接威脅到用戶的安全隱私的權(quán)限,這類權(quán)限系統(tǒng)會(huì)自動(dòng)幫我們授權(quán);而危險(xiǎn)權(quán)限則表示會(huì)觸及用戶隱私對(duì)設(shè)備安全性造成影響的權(quán)限,例如聯(lián)系人信息或地理定位等,這部分權(quán)限

5、的授權(quán),必須由用戶手動(dòng)點(diǎn)擊授權(quán)才可以,否則程序無法使用相應(yīng)功能。7.2 運(yùn)行時(shí)權(quán)限7.2.2 申請(qǐng)運(yùn)行時(shí)權(quán)限首先在點(diǎn)擊事件中借助ContextCompat.checkSelfPermission()方法來檢查授權(quán)情況。 public void onClick(View v) /判斷用戶是否授權(quán)if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.CALL_PHONE)!=PackageManager.PERMISSION_GRANTED) ActivityCompat.requestPermissi

6、ons(MainActivity.this,new StringManifest.permission.CALL_PHONE,1); else call(); 7.2 運(yùn)行時(shí)權(quán)限然后使用方法的返回值和授權(quán)組PackgeManager.PERMISSION_GRANTED比較是否授權(quán) /重寫方法用來彈出權(quán)限申請(qǐng)對(duì)話框向用戶申請(qǐng)授權(quán) Override public void onRequestPermissionsResult(int requestCode, NonNull String permissions, NonNull int grantResults) switch (request

7、Code) case 1: if(grantResults.length0&grantResults0=PackageManager.PERMISSION_GRANTED) call(); else Toast.makeText(this,You denied the permission,Toast.LENGTH_SHORT).show(); break; default: 7.3 訪問其他程序中的數(shù)據(jù)ContentProvider是不同應(yīng)用程序之間數(shù)據(jù)共享的標(biāo)準(zhǔn)API,如果想要訪問ContentProvider中共享的數(shù)據(jù),一定要借助ContentResolver類A程序需要使用Conte

8、ntProvider共享數(shù)據(jù),太能被其他程序操作。B程序必須通過ContentResolver操作A程序共享出來的數(shù)據(jù),而A程序會(huì)將操作結(jié)果返回給ContentResolver,然后ContentResolver再將操作結(jié)果返回給程序B。A程序Content Provider共享的數(shù)據(jù)ContentResolverB程序操作共享數(shù)據(jù)返回操作結(jié)果操作A中數(shù)據(jù)返回操作結(jié)果7.3.1 ContentResolver的使用對(duì)于應(yīng)用程序來說,想要訪問內(nèi)容提供者中共享的數(shù)據(jù)需要借助ContentResolver類,通過Context中的getContentResolver()方法獲取實(shí)例ContentRe

9、solver中提供了一系列與SQLiteDatabase相似的方法用于對(duì)數(shù)據(jù)進(jìn)行增、刪、改、查操作解析方法如下所示:7.3 訪問其他程序中的數(shù)據(jù)Uri uri = Uri.parse(“content:/com.example.mycontentprovider/student”)通過調(diào)用Uri.parse()方法,將內(nèi)容Uri字符串解析成Uri對(duì)象,ContentResolver就可以通過使用這個(gè)Uri對(duì)象來查詢student表中的數(shù)據(jù),通過下面的示例進(jìn)行查詢:通過下表對(duì)這部分參數(shù)進(jìn)行對(duì)比Cursor cursor = getContentResolver().query(uri , pro

10、jection , selection , selectionArgs , sortorder );query()方法參數(shù)對(duì)應(yīng)SQL部分描述urifrom table_name查詢某個(gè)應(yīng)用程序下某張表projectionselect column1查詢的列名selectionwhere column = valuewhere的約束條件selectionArgs為where中的占位符提供具體值orderByorder by column1查詢結(jié)果排序方式7.3 訪問其他程序中的數(shù)據(jù)7.3.2 實(shí)戰(zhàn)演練23功能描述:技術(shù)要點(diǎn):編輯布局編輯邏輯代碼,使用ContentResolver使用Conten

11、tResolver獲取系統(tǒng)通訊錄數(shù)據(jù)案例代碼(詳見教材P163P165)實(shí)現(xiàn)步驟: 讀取聯(lián)系人信息 使用ContentResolver操作Android系統(tǒng)中通訊錄中共享的數(shù)據(jù)17.3 訪問其他程序中的數(shù)據(jù)7.4 自定義內(nèi)容提供者7.4.1 內(nèi)容提供者創(chuàng)建ContentProvider的創(chuàng)建方式與廣播接收者類似。在程序包名處單擊右鍵,選擇【New】【Other】【Content Provider】選項(xiàng),在彈出窗口輸入內(nèi)容提供者的Class Name和唯一標(biāo)識(shí),完成后單擊【Finish】按鈕。、包含6個(gè)方法onCreate()query()insert()update() delete()get

12、Type()7.4 自定義內(nèi)容提供者通過上述方法創(chuàng)建好內(nèi)容提供者后,Android Studio會(huì)自動(dòng)在AndroidMenifest.xml中對(duì)內(nèi)容提供者進(jìn)行注冊(cè) application 7.4 自定義內(nèi)容提供者7.4.2 訪問內(nèi)容提供者需要借助UriMatcher類實(shí)現(xiàn)匹配內(nèi)容Uri的功能。UriMarcher中提供的addURI()方法可以接收3個(gè)參數(shù),分別對(duì)應(yīng)前面我們學(xué)習(xí)的內(nèi)容Uri中的authority和path部分 /創(chuàng)建自定義代碼 public static final int TABLE_1_LS = 0; public static final int TABLE_1_ITE

13、M = 1; public static final int TABLE_2_LS = 2; public static final int TABLE_2_ITEM = 3; /創(chuàng)建UriMatcher實(shí)例 private static UriMatcher uriMatcher; static uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI(com.example.myprovidertest,table_1,TABLE_1_LS); uriMatcher.addURI(com.example.myprovidertest,table_1/#,TABLE_1_ITEM); uriMatcher.addURI(com.example.myprovidertest,table_2,TABLE_2_LS); uriMatcher.addURI(com.example.myprovidertest,table_2/#,TABLE_2_LS); 7.4.3 實(shí)戰(zhàn)演練23功能描述:技術(shù)要點(diǎn):編輯布局編輯邏輯代碼,創(chuàng)建ContentProvider暴露數(shù)據(jù)創(chuàng)建匹配器并使用ContentRe

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論