- 首先來看一下權限
- 目前Android系統都有運行時權限。運行時權限是屬於那些危險權限(CALENDAR CAMERA CONTACTS LOCATION MICROPHONE PHONE SENSORS SMS STORAGE),必須需要用戶手動確認如果按照常規加入權限則不通過,應用如何申請運行時權限
a. if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.CALL_PHONE)!= Packagemanager.PEMISSION_GRANTED){ ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE},1); }else{ 執行你要執行的操作 } @Override public void onRequestPermissionResult(int requestCode,String[] permissions,int[] grantResults){ swich(requestcode){ case 1: if(grantResult.length>0&&grantResult[0]==PackagerManager.PERMISSION_GRANTED){ 執行你要執行的操作 }else{ 提示拒絕請求信息 } } } |
- 爲什麼要使用 內容提供者 :當需要操作其他應用的數據時,使用普通方法如下
- SqliteDatabase.openDatabase(''路徑'',遊標工廠,模式);//沒有權限需要更改權限
- chmod 777 更改權限再去讀就可以讀出來了
- 使用內容提供者 內容提供者描述:應用自己提供一個內容提供者,封裝數據提供出來,其他應用可以通過內容解析者訪問內容容提供者,從而來操作數據
- 如何定義一個內容提供者
- 寫一個類,繼承contentProvider,實現以下方法
- onCreate
- query
- insert
- delete
- update
- 清單文件中配置,屬性添加一個android:authorities="Cherseey" //自定義字符串用來匹配
- 在類中定義一個UriMatcher
- private static final UriMatcher sURIMatcher=new UriMatcher(UriMatcher.NO_MATCH);
- 寫一個靜態代碼塊(類加載就執行一次)
- static{ sURIMatcher.addURI(“Cherseey",”query“,1 自定義的常量);//可以添加多個}
- 在query方法中調用 sUriMatcher.match(uri)返回的值是否匹配你自定義的常量1來判斷 是否返回cursor
- allMessage 輸入pub 查看是否有Pub 報名:定義的內容提供者的名字 是否創建成功
- 在其他應用中調用getContentResolver.query(...);
- Uri uri=Uri.parse("content://Cherseey/query"); getContentResolver(uri,null,null,null,null)
- 寫一個類,繼承contentProvider,實現以下方法
- 查詢短信
- Uri uri=Uri.parse("content://sms/")//查詢所有的意思; getContentResolver(uri,new String[]{"address","date","body"}],null,null,null)
- 讀寫權限
- contentObserver
- 應用觀察者可以觀察外部應用來造作本應用的數據庫傳過來的Uri
- Uri uri=Uri.parse("content://Cherseey");getContentResolver().registerContentObserver(uri,true,new MyContentObserver(new Handler()));在MyContentObserver中覆寫onChange()方法來監聽改變
- getContext.getContentRessolver().notifyChange(uri.null)//寫在query中通知更新