【问题标题】:Problems with checking for WRITE_SECURE_SETTINGS permission in my app在我的应用中检查 WRITE_SECURE_SETTINGS 权限的问题
【发布时间】:2018-08-20 04:39:30
【问题描述】:

我对 Android 和 Javascript 还很陌生。但是,我正在通过观看教程和提问来积极学习。现在,我正在尝试编写一个更改某些系统值的应用程序。我知道这只能通过授予我的应用 WRITE_SECURE_SETTINGS 权限来完成。通过我的研究,我意识到我不能在清单文件本身中声明权限。显然,唯一值得尊重的答案是检查用户是否已通过 ADB 授予权限。我找不到与此主题相关的任何内容,我希望你们能帮助我就如何正确执行此操作得出结论。到目前为止,这是我拥有的代码。

package com.datastream.settingschanger;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    String requiredPermission = "android.permission.WRITE_SECURE_SETTINGS";
    int checkVal = getContext().checkCallingOrSelfPermission(requiredPermission);
    if (checkVal == PackageManager.PERMISSION_GRANTED) {
    }
    Toast.makeText(getActivity(), "WRITE_SECURE_SETTINGS has been granted to the application. You may now continue!",
            Toast.LENGTH_LONG).show();

    if (checkVal == PackageManager.PERMISSION_DENIED) {
    }
    Toast.makeText(getActivity(), "WRITE_SECURE_SETTINGS has not been granted to the application. Please grant access to continue.",
            Toast.LENGTH_LONG).show();
}
}

但是,当我在 Android Studio 中运行它时,我会收到以下错误:

error: cannot find symbol method getContext()
error: cannot find symbol method getActivity()
error: cannot find symbol method getActivity()

谁能帮我解决这些错误?我不知道如何解决这个问题。谢谢!

【问题讨论】:

    标签: java android


    【解决方案1】:

    Fragment中使用getContext()getActivity()方法得到Context

    去掉getContext()getActivity()并使用thisMainActivity.this得到Context 在你的活动中

    使用这个

    int checkVal = checkCallingOrSelfPermission(requiredPermission);
    

    而不是这个

    int checkVal = getContext().checkCallingOrSelfPermission(requiredPermission);
    

    示例代码

    public class MainActivity extends AppCompatActivity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        String requiredPermission = "android.permission.WRITE_SECURE_SETTINGS";
        int checkVal = checkCallingOrSelfPermission(requiredPermission);
        if (checkVal == PackageManager.PERMISSION_GRANTED) {
        }
        Toast.makeText(this, "WRITE_SECURE_SETTINGS has been granted to the application. You may now continue!",
                Toast.LENGTH_LONG).show();
    
        if (checkVal == PackageManager.PERMISSION_DENIED) {
        }
        Toast.makeText(this, "WRITE_SECURE_SETTINGS has not been granted to the application. Please grant access to continue.",
                Toast.LENGTH_LONG).show();
    }
    }
    

    【讨论】:

    • 非常感谢您的快速回复和帮助!这似乎已经成功了!但是,我注意到应用程序启动时的吐司消息都会显示。在代码中对我来说,在检查权限后应该只显示一个 toast。你知道为什么会这样吗?
    • @DataStream3 检查这个stackoverflow.com/questions/5034160/…
    • 感谢您提供链接 Nilesh!代码现在完美运行,我要感谢你!非常感谢!
    • 很抱歉再次打扰您。你能再帮我做一件事吗?您知道如何更改位于 Android 设置数据库的全局表中的字符串的值吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 2012-10-14
    • 2013-12-13
    • 1970-01-01
    • 2016-06-19
    相关资源
    最近更新 更多