如何将内容解析器作为参数传递给静态方法

时间:2016-05-29 15:47:01

标签: java android android-contentresolver

非常抱歉,如果我错过了这些方面的解决方案。我是一个在这里问菜鸟的问题,但我曾多次参观过研究,我做了搜索,我保证。

我正在尝试添加一个方法,以便在重新启动时使用,以恢复内核节点,该节点控制受影响的Android设备上硬件电容键的激活/停用。我在我的HardwareKeysSettings.java类中创建了一个方法:

public static void restore(Context context) {
        boolean enableHardwareKeys = Settings.System.getInt(getContentResolver(),
                Settings.System.HARDWARE_KEYS_ENABLED, 1) == 1;
        Settings.System.putInt(getContentResolver(),
            Settings.System.HARDWARE_KEYS_ENABLED, enableHardwareKeys ? 1 : 0);
}

我的方法是从BootReceiver类调用的:

    package com.android.settings.slim;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

import com.android.settings.slim.HardwareKeysSettings;

public class BootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context ctx, Intent intent) {
        /* Restore the hardware tunable values */
        HardwareKeysSettings.restore(ctx);
    }
}

我无法编译它,因为在我上面的restore()方法中,getContentResolver()方法不能在静态方法(我需要使用)中使用。我收到这些错误:

/packages/apps/Settings/src/com/android/settings/slim/HardwareKeysSettings.java:676: Cannot make a static reference to the non-static method getContentResolver() from the type SettingsPreferenceFragment

/packages/apps/Settings/src/com/android/settings/slim/HardwareKeysSettings.java:678: Cannot make a static reference to the non-static method getContentResolver() from the type SettingsPreferenceFragment

那里并不奇怪或非常不正常的问题。与那些比我更了解这一点的人说话,我只是给了这个暗示......

  

“从作为arg传递的上下文中调用您的内容解析器”

这对我来说很有意义,因为很明显getContentResolver()方法是非静态的,不能在我的静态方法中使用。我需要传入一些东西才能正确使用getContentResolver()方法。

所以,问题是,我到底该怎么做?我有点想法,但ContentResolver是最令我困惑的Android / Java之一。

我有点认为这意味着像这样传递ContentResolver,但不知道如何在内部使用它来实现我的目的:

public static void restore(Context context, ContentResolver contentResolver) {

提前致谢...:)

1 个答案:

答案 0 :(得分:1)

  

我到底该怎么做?

getContentResolver()Context上的一种方法。您正在将Context传递给restore()。在getContentResolver()上致电Context

public static void restore(Context context) {
    boolean enableHardwareKeys = Settings.System.getInt(context.getContentResolver(),
            Settings.System.HARDWARE_KEYS_ENABLED, 1) == 1;
    Settings.System.putInt(context.getContentResolver(),
        Settings.System.HARDWARE_KEYS_ENABLED, enableHardwareKeys ? 1 : 0);
}