Android動態獲取權限


 

android權限的變化

在Android6.0以前的版本的時候,Android的權限都是在安裝的時候全部的配置完成的。然而這往往會造成一些安全的問題。

Google的解決辦法:

                將Android中的權限分為了兩大類:

      Normal:權限不會直接涉及到用戶的隱私。如果你的應用在manifest清單文件中配置了此類的權限,那么系統會自動的同意。

Dangerous權限能夠讓應用去訪問用戶的隱私數據。如果你的應用在manifest中配置了此類的權限,那么久得需要用戶同意此類權限。

                注意:

         如果你的應用需要一個dangerous權限,那么在每一次執行需要這個權限的操作時,你必須檢查是否有這個權限。應用用戶總是可以取消這個權限的,並不能認為一次同意永久擁有。

         不管是 Normal 還是 Dangerous 權限 都需要在清單文件中進行配置 


 
Demo代碼:
 1 package com.example.it.android_callphone;
 2 
 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 
16 import java.net.URI;
17 import java.security.Permission;
18 import java.util.jar.Manifest;
19 
20 public class MainActivity extends AppCompatActivity {
21 
22     int REQUEST_CALL_PHONE_PERMISSION=0;
23     Intent intent;
24     EditText txtNumber;
25     @Override
26     protected void onCreate(Bundle savedInstanceState) {
27         super.onCreate(savedInstanceState);
28         setContentView(R.layout.activity_main);
29 
30         Button btnCall =(Button) findViewById(R.id.btnCall);
31          txtNumber =(EditText)findViewById(R.id.txtNumber);
32 
33         btnCall.setOnClickListener(new View.OnClickListener() {
34             @Override
35             public void onClick(View v) {
36                 //如果有權限直接執行
37                 if(ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.CALL_PHONE)==PackageManager.PERMISSION_GRANTED){
38                     intent = new Intent();
39                     //添加打電話的動作
40                     intent.setAction(Intent.ACTION_CALL);
41                     //添加數據
42                     String number = txtNumber.getText().toString().trim();
43                     intent.setData(Uri.parse("tel:"+number));
44                     startActivity(intent);
45                 }
46                 //如果沒有權限那么申請權限
47                 else{
48                     ActivityCompat.requestPermissions(MainActivity.this,new String[]{android.Manifest.permission.CALL_PHONE},REQUEST_CALL_PHONE_PERMISSION);
49                 }
50             }
51         });
52     }
53 
54     /*
55     * 當請求獲取權限后會執行此回調方法,來執行自己的業務邏輯
56     * */
57     @Override
58     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
59         if(requestCode==this.REQUEST_CALL_PHONE_PERMISSION){
60 
61             if(grantResults[0]==PackageManager.PERMISSION_GRANTED){
62                 //執行自己的業務邏輯
63                 startActivity(intent);
64             }else{
65                 Toast.makeText(this, "拒絕了權限", Toast.LENGTH_SHORT).show();
66             }
67         }
68         super.onRequestPermissionsResult(requestCode,permissions,grantResults);
69     }
70 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM