2016-09-05 44 views
0

在應用程序運行Android 6.0或更高版本時,是否需要請求每個危險權限?我請求了以下危險權限,但只有四個對話框。在Android 6.0(API等級23)中請求權限

的premissions

public static final String[] PERMISSIONS = new String[]{ 
     android.Manifest.permission.CALL_PHONE, 
     android.Manifest.permission.WRITE_EXTERNAL_STORAGE, 
     android.Manifest.permission.READ_EXTERNAL_STORAGE, 
     android.Manifest.permission.ACCESS_COARSE_LOCATION, 
     android.Manifest.permission.ACCESS_FINE_LOCATION, 
     android.Manifest.permission.READ_PHONE_STATE, 
     android.Manifest.permission.WRITE_SETTINGS, 
     android.Manifest.permission.GET_ACCOUNTS, 
     android.Manifest.permission.CAMERA 
}; 

的對話框

1.Allow應用程式撥打和管理電話?

2.是否允許應用程序訪問設備上的照片,媒體和文件?

3.是否允許應用訪問此設備的位置?

4.讓應用程序訪問您的聯繫人?

我不能得到的權限,如android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.WRITE_SETTINGS, android.Manifest.permission.GET_ACCOUNTS, android.Manifest.permission.CAMERA,既不代碼或系統設置。

+0

應該在Android清單被提及並非所有的權限? – EdmDroid

+0

是否有任何錯誤? – Nilabja

+0

@Motee你看到只有4個對話框,因爲有一個權限組的概念,例如READ和WRITE權限可以被分成一組。 – dex

回答

0

特殊權限

有幾個不表現得像正常 危險的權限的權限。 WRITE_SETTINGS是 特別敏感,所以大多數應用程序不應該使用它們。如果應用程序 需要這些權限之一,則必須在 清單中聲明權限,併發送請求用戶授權的意圖。系統通過向用戶顯示詳細的管理畫面 來響應該意圖。

演示

public class MainActivity extends AppCompatActivity { 

    Context context; 
    TextView textView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     context = this; 
     textView = (TextView) findViewById(R.id.foodName); 
     textView.setText(getResources().getText(R.string.txt_name)); 
     textView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       boolean result = true; 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
        result = Settings.System.canWrite(context); 
        Log.d("TAG", "Can Write Settings: " + result); 
        if (result) { 
         Toast.makeText(context, "Write allowed :-)", Toast.LENGTH_LONG).show(); 
        } else { 
         Toast.makeText(context, "Write not allowed :-(", Toast.LENGTH_LONG).show(); 
         Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS); 
         intent.setData(Uri.parse("package:" + context.getPackageName())); 
         startActivity(intent); 
        } 
       } 
      } 
     }); 
    } 
} 
+0

感謝您的回答。處理權限WRITE_SETTINGS是一個不錯的主意。但是我仍然懷疑,我是否應該以同樣的方式請求許可CAMERA? – Motee

+0

您應該請求攝像頭權限作爲其不敏感的傳統方式?如果我的回答無論如何幫助你,那麼你可以勾選標記並投票,感謝愉快的編碼:) –