自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android中的權(quán)限問(wèn)題

移動(dòng)開發(fā) Android
在Android程序中,在執(zhí)行形如訪問(wèn)網(wǎng)絡(luò)、讀取聯(lián)系人時(shí)都要聲明權(quán)限,在 Android 系統(tǒng)版本小于6.0時(shí),所有的權(quán)限只需要在AndroidManifest文件中聲明就可以使用對(duì)應(yīng)的功能了。

在Android程序中,在執(zhí)行形如訪問(wèn)網(wǎng)絡(luò)、讀取聯(lián)系人時(shí)都要聲明權(quán)限,在 Android 系統(tǒng)版本小于6.0時(shí),所有的權(quán)限只需要在AndroidManifest文件中聲明就可以使用對(duì)應(yīng)的功能了。 但是在Android6.0版本以上,Android將權(quán)限分為了普通權(quán)限和危險(xiǎn)權(quán)限,其中普通權(quán)限的使用和以前的Android版本一樣,直接在AndroidManifest文件中聲明就行了,系統(tǒng)會(huì)自動(dòng)幫我們授權(quán),但是危險(xiǎn)權(quán)限不僅要在AndroidManifest文件中聲明,還需要在使用權(quán)限的時(shí)候通過(guò)代碼來(lái)判斷用戶授權(quán)并且對(duì)用戶授權(quán)的結(jié)果進(jìn)行對(duì)應(yīng)的處理。那么哪些權(quán)限是危險(xiǎn)權(quán)限呢,下面給出了Android所有的危險(xiǎn)權(quán)限,那么除了下表中的危險(xiǎn)權(quán)限,其它的權(quán)限就都是Android普通權(quán)限了:

我們可以通過(guò)權(quán)限組的方式大致記一下危險(xiǎn)權(quán)限:

  1. 讀寫日歷:android.permission.READ_CALENDAR android.permission.WRITE_CALENDAR
  2. 使用相機(jī): android.permission.CAMERA
  3. 讀寫聯(lián)系人:android.permission.READ_CONTACTS android.permission.WRITE_CONTACTS
  • android.permission.GET_ACCOUNTS
  1. 位置服務(wù):android.permission.ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION
  2. 電話:android.permission.READ_PHONE_STATE android.permission.CALL_PHONE android.permission.READ_CALL_LOG android.permission.WRITE_CALL_LOG android.permission.ADD_VOICEMAIL android.permission.USE_SIP android.permission.PROGRESS_OUTGOING_CALLS
  3. 使用傳感器:android.permission.BODY_SENSORS
  4. 短信:android.permission.SEND_SMS android.permission.RECEIVE_SMS android.permission.READ_SMS android.permission.RECEIVE_WAP_PUSH RECEIVE_MMS
  5. 讀寫手機(jī)儲(chǔ)存:android.permission.READ_EXTERNAL_STORAGE android.permission.WRITE_EXTERNAL_STORAGE

好了,以上就是Android的所有危險(xiǎn)權(quán)限,我們?cè)谑褂眠@些權(quán)限的時(shí)候不僅要在AndroidManifest文件中聲明,還需要在代碼中對(duì)用戶的授權(quán)情況進(jìn)行處理,下面以一個(gè)簡(jiǎn)單的例子來(lái)看一下如何在代碼中處理危險(xiǎn)權(quán)限:

新建一個(gè)Android工程:

activity_main.xml:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.  xmlns:tools="http://schemas.android.com/tools" 
  4.  android:id="@+id/activity_main" 
  5.  android:layout_width="match_parent" 
  6.  android:layout_height="match_parent" 
  7.  android:orientation="vertical" 
  8.  android:gravity="center_horizontal" 
  9.  tools:context="com.example.administrator.blogandroidpermissiondeal.MainActivity"
  10.  <EditText 
  11.  android:id="@+id/phonenumberEditText" 
  12.  android:layout_width="wrap_content" 
  13.  android:layout_height="wrap_content" 
  14.  android:hint="輸入你想撥打的電話號(hào)碼" /> 
  15.  <Button 
  16.  android:id="@+id/callPhoneButton" 
  17.  android:layout_width="wrap_content" 
  18.  android:layout_height="wrap_content" 
  19.  android:text="撥打"/> 
  20. </LinearLayout> 

很簡(jiǎn)單的布局文件,一行EditText控件用于,電話號(hào)碼,一行Button用于撥打電話::

接下來(lái)是MainActivity.java:

  1. package com.example.administrator.blogandroidpermissiondeal; 
  2. import android.Manifest; 
  3. import android.content.Intent; 
  4. import android.content.pm.PackageManager; 
  5. import android.net.Uri; 
  6. import android.support.annotation.NonNull; 
  7. import android.support.v4.app.ActivityCompat; 
  8. import android.support.v4.content.ContextCompat; 
  9. import android.support.v7.app.AppCompatActivity; 
  10. import android.os.Bundle; 
  11. import android.view.View
  12. import android.widget.Button; 
  13. import android.widget.EditText; 
  14. import android.widget.Toast; 
  15. public class MainActivity extends AppCompatActivity { 
  16.  private Button button = null
  17.  private EditText editText = null
  18.  private static final int PERMISSION_REQUEST_CODE = 1; 
  19.  @Override 
  20.  protected void onCreate(Bundle savedInstanceState) { 
  21.  super.onCreate(savedInstanceState); 
  22.  setContentView(R.layout.activity_main); 
  23.  editText = (EditText) findViewById(R.id.phonenumberEditText); 
  24.  button = (Button) findViewById(R.id.callPhoneButton); 
  25.  button.setOnClickListener(new View.OnClickListener() { 
  26.  @Override 
  27.  public void onClick(View v) { 
  28.  /* 
  29.  * 先判斷用戶以前有沒(méi)有對(duì)我們的應(yīng)用程序允許過(guò)打電話的權(quán)限, 
  30.  * 如果有,那么直接打電話,如果沒(méi)有,那么向用戶申請(qǐng),并且回調(diào)onRequestPermissionResult方法 
  31.  */ 
  32.  if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) 
  33.  != PackageManager.PERMISSION_GRANTED) { 
  34.  /* 
  35.  * 下面是對(duì)權(quán)限進(jìn)行申請(qǐng),第二個(gè)參數(shù)填入權(quán)限名,如果有多個(gè)權(quán)限,那么第二個(gè)參數(shù)String數(shù)組加入多個(gè)權(quán)限參數(shù) 
  36.  */ 
  37.  ActivityCompat.requestPermissions(MainActivity.this, 
  38.  new String[]{Manifest.permission.CALL_PHONE}, PERMISSION_REQUEST_CODE); 
  39.  } else { 
  40.  callPhonenumber(); 
  41.  } 
  42.  } 
  43.  }); 
  44.  } 
  45.  private void callPhonenumber() { 
  46.  try { 
  47.  Intent intent = new Intent(Intent.ACTION_CALL); 
  48.  intent.setData(Uri.parse("tel:" + editText.getText().toString())); 
  49.  startActivity(intent); 
  50.  }catch (Exception e) { 
  51.  e.printStackTrace(); 
  52.  } 
  53.  } 
  54.  /* 
  55.  * 當(dāng)我們向用戶申請(qǐng)權(quán)限的時(shí)候,用戶操作的結(jié)果會(huì)調(diào)用這個(gè)方法,無(wú)論用戶允許或者禁止, 
  56.  * 我們要在這個(gè)方法里面做出對(duì)應(yīng)的處理 
  57.  */ 
  58.  @Override 
  59.  public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
  60.  super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
  61.  switch (requestCode) { 
  62.  /* 
  63.  * 對(duì)傳入的requestCode進(jìn)行判斷 
  64.  */ 
  65.  case PERMISSION_REQUEST_CODE: 
  66.  // 如果用戶授權(quán) 
  67.  if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
  68.  callPhonenumber(); 
  69.  } else { 
  70.  Toast.makeText(this, "打電話權(quán)限已被用戶拒絕", Toast.LENGTH_SHORT).show(); 
  71.  } 
  72.  } 
  73.  } 

在MainActivity.java中我們對(duì)我們需要的權(quán)限進(jìn)行了處理,

最后別忘了在AndroidManifest文件中聲明打電話權(quán)限:

  1. <uses-permission android:name="android.permission.CALL_PHONE" /> 

下面來(lái)運(yùn)行一下:

Android中的權(quán)限問(wèn)題

我們輸入一個(gè)號(hào)碼,點(diǎn)擊“撥打”按鈕:

Android中的權(quán)限問(wèn)題

因?yàn)槲覀兪堑谝淮芜\(yùn)行這個(gè)程序,所以用戶以前并沒(méi)有對(duì)我們的程序進(jìn)行授權(quán),因此出現(xiàn)權(quán)限申請(qǐng)對(duì)話框,我們點(diǎn)擊DENY(否):

Android中的權(quán)限問(wèn)題

成功彈出了提示框,那么我們?cè)僭囈淮吸c(diǎn)擊ALLOW(允許)試試:

Android中的權(quán)限問(wèn)題

成功的進(jìn)入撥打電話的界面并且撥打我們輸入的電話號(hào)碼!

當(dāng)我們?cè)试S了之后,那么程序以后就不需要再經(jīng)過(guò)用戶授權(quán)了,即可以直接撥打電話(除非用戶在應(yīng)用程序管理中收回了我們的打電話的權(quán)限)。

責(zé)任編輯:未麗燕 來(lái)源: 安卓巴士
相關(guān)推薦

2011-09-08 09:57:04

Ubunturoot

2010-08-12 13:11:54

Universal AAndroid開發(fā)

2013-06-28 14:00:28

Android

2018-04-18 09:18:44

數(shù)據(jù)庫(kù)MySQL存儲(chǔ)過(guò)程

2019-01-02 13:03:53

MySQL存儲(chǔ)權(quán)限

2011-03-03 15:13:05

ProFTPD權(quán)限

2011-01-10 10:45:20

SQL Server數(shù)

2013-03-26 13:38:12

Android per

2023-01-30 08:09:18

權(quán)限GreatSQL運(yùn)行

2015-11-09 14:17:51

2010-01-07 16:10:22

Ubuntu root

2010-04-23 16:51:44

Aix ACL

2010-05-20 11:25:14

IIS服務(wù)器

2010-04-20 14:06:07

NTFS權(quán)限

2010-08-09 14:01:22

關(guān)系法則

2013-05-14 10:37:10

AIR Android設(shè)置訪問(wèn)權(quán)限

2013-03-28 13:51:19

Android設(shè)置全屏Android程序開發(fā)

2010-06-04 19:31:25

遠(yuǎn)程MySQL權(quán)限

2009-11-06 14:07:58

Oracle用戶表空間

2010-04-23 17:07:07

Aix權(quán)限
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)