代码之家  ›  专栏  ›  技术社区  ›  Absar Ahmad

授予运行时权限marshmallow及更高版本以写入系统设置

  •  0
  • Absar Ahmad  · 技术社区  · 7 年前

    我正在Android上做一个节省电池的应用程序。我包括了一些功能,比如从应用程序设置亮度、从应用程序设置屏幕超时、启用/禁用同步等。对于这些功能,我必须编写系统设置。 我用过 WRITE_SETTINGS , WRITE_SECURE_SETTINGS 在清单中,主要活动的代码写在下面。我正在使用库授予权限。 问题是,如果我在清单中添加任何其他权限,它会成功授予,但它会自动拒绝写入系统应用程序权限。我想写权限,以成功地改变屏幕亮度,屏幕超时和其他功能等棉花糖和以上。 如果有人知道怎么做,那么请帮助我。 基本上,我想这些权限是在下面的链接中说明 Android launch app show "Can modify system settings" dialog

    import android.os.Bundle;
    import android.support.annotation.NonNull;
    import android.support.v7.app.AppCompatActivity;
    import android.widget.TextView;
    
    import com.karan.churi.PermissionManager.PermissionManager;
    
    import java.util.ArrayList;
    
    public class MainActivity extends AppCompatActivity {
        PermissionManager permissionManager;
        TextView txtGranted, txtDenied;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            txtGranted = (TextView) findViewById(R.id.Granted);
            txtDenied = (TextView) findViewById(R.id.Denied);
            permissionManager = new PermissionManager() {};
            permissionManager.checkAndRequestPermissions(this);
        }
    
        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            permissionManager.checkResult(requestCode,permissions,grantResults);
            ArrayList<String> granted=permissionManager.getStatus().get(0).granted;
            ArrayList<String> denied=permissionManager.getStatus().get(0).denied;
            for(String item:granted){
                txtGranted.setText(txtGranted.getText()+"\n"+item);
            }
            for(String item:denied){
                txtDenied.setText(txtDenied.getText()+"\n"+item);
            }
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Rajan Kali    7 年前

    您无法覆盖系统功能(或)获取系统级访问权限,除非您的 Application 使用相同的 keystore 作为系统映像。为此,您需要有自己的SDK,以便可以覆盖系统设置。