2016-07-07 27 views
0

將所有權限分配給Android應用程序的最簡單/最簡單的方式是什麼?設置Android應用程序的所有權限

我需要這個,因爲: 我們正在開發專用的android插件pc應用程序,它將是唯一在前臺設備上運行的應用程序。由於我們計劃在設備上進行非中斷更新,因此我希望在首次安裝時爲設備分配所有權限。

+1

請求所有這些,或者建立一個新的權限,授予你所有其他權限,因爲你是供應商。 – Shark

+1

可能重複的[Android:如何設置所有使用權限?](http://stackoverflow.com/questions/7633639/android-how-to-set-all-uses-permission) –

+0

@Shark - 你可以請請解釋如何創建一個授予您所有其他權限的新權限? – jay

回答

1

最好手動爲清單文件中的所有人授予權限。 link擁有Android應用程序所需的全部權限。

0

最近,從Marshmallow版本開始,android在運行時提供了請求權限。因此,一旦應用程序啓動的第一次,你可以要求的權限從您的app.So要求用戶在你的活動,你可以這樣做:

@Override 
protected void onStart() { 
    super.onStart(); 
    checkPermissionsAtOnce(); 
} 

然後

private void checkPermissionsAtOnce(){ 

    List<String> permissionsNeeded = new ArrayList<>(); 

    final List<String> permissionsList = new ArrayList<>(); 
    if (!addPermission(permissionsList, Manifest.permission.ACCESS_FINE_LOCATION)) 
     permissionsNeeded.add(getString(R.string.gps)); 
    if(!addPermission(permissionsList, Manifest.permission.SEND_SMS)) 
     permissionsNeeded.add(getString(R.string.send_sms)); 
    if (!addPermission(permissionsList, Manifest.permission.WRITE_EXTERNAL_STORAGE)) 
     permissionsNeeded.add(getString(R.string.write_external_storage)); 
    if(!addPermission(permissionsList, Manifest.permission.READ_PHONE_STATE)) 
     permissionsNeeded.add(getString(R.string.read_phone_state)); 
    if(!addPermission(permissionsList, Manifest.permission.CAMERA)) 
     permissionsNeeded.add(getString(R.string.use_camera)); 

    if (permissionsList.size() > 0) { 
     if (permissionsNeeded.size() > 0) { 
      String message = getString(R.string.grad_access_to) + permissionsNeeded.get(0); 
      for (int i = 1; i < permissionsNeeded.size(); i++) 
       message = message + ", " + permissionsNeeded.get(i); 
      showMessageOKCancel(message, 
        new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          ActivityCompat.requestPermissions(MainActivity.this,permissionsList.toArray(new String[permissionsList.size()]), 
            REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS); 
         } 
        }); 
      return; 
     } 
     ActivityCompat.requestPermissions(MainActivity.this, permissionsList.toArray(new String[permissionsList.size()]), 
       REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS); 
     return; 
    } 

} 

private void showMessageOKCancel(String message, DialogInterface.OnClickListener listener){ 
    new AlertDialog.Builder(MainActivity.this) 
      .setMessage(message) 
      .setPositiveButton(R.string.ok, listener) 
      .setNegativeButton(R.string.cancel, null) 
      .create() 
      .show(); 
} 


private boolean addPermission(List<String> permissionsList, String permission) { 
    if (ContextCompat.checkSelfPermission(MainActivity.this,permission) != PackageManager.PERMISSION_GRANTED) { 
     permissionsList.add(permission); 
     if (!ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, permission)) 
      return false; 
    } 
    return true; 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    switch (requestCode) { 
     case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS: 
     { 
      Map<String, Integer> perms = new HashMap<>(); 
      perms.put(Manifest.permission.ACCESS_FINE_LOCATION, PackageManager.PERMISSION_GRANTED); 
      perms.put(Manifest.permission.WRITE_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED); 
      perms.put(Manifest.permission.SEND_SMS, PackageManager.PERMISSION_GRANTED); 
      perms.put(Manifest.permission.READ_PHONE_STATE, PackageManager.PERMISSION_GRANTED); 

      for (int i = 0; i < permissions.length; i++) 
       perms.put(permissions[i], grantResults[i]); 

      if(perms.get(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED){ 
       permissionPhoneStateGranted = true; 
      } 

      /* if (perms.get(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED 
        && perms.get(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED 
        && perms.get(Manifest.permission.SEND_SMS) == PackageManager.PERMISSION_GRANTED 
        && perms.get(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED){ 

      }*/ 
     } 
     break; 
     case REQUEST_CODE_ASK_PERMISSIONS_FOR_PHONE_STATE: 
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       // Permission Granted 
       permissionPhoneStateGranted = true; 

      } else { 
       // Permission Denied 
       permissionPhoneStateGranted = false; 
      } 
      break; 

     default: 
      super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    } 
} 

你可以採取這個樣本作爲參考,並在你的應用程序中執行。希望它可以幫助你..

相關問題