2016-05-29 4 views
0

大変申し訳ありませんのような静的メソッドに渡されました。私はここにnoobを尋ねる質問ですが、研究のために何度も訪れました。私は検索しました、私は約束します。コンテンツリゾルバを使用する方法は、引数

私が影響を受けたAndroidデバイス上のハードウェア容量キーの有効化/無効化を制御し、カーネルノードを復元するために再起動時に使用するためのメソッドを追加しようとしています。 I私の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); 
    } 
} 

私はこれをコンパイルすることはできません、であるため上記のmy 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 

そこには驚くほどの異常はありません。

に...、私はこれだけヒント与えられた私よりもこのことについての方法の詳細精通している人といえばなり

「引数として渡されたコンテキストから、あなたのコンテンツリゾルバを呼び出します」明らかにgetContentResolver()メソッドは静的ではなく、静的メソッド内で使用することはできません。 getContentResolver()メソッドを適切に使用するために何かを渡す必要があります。

ので、質問がある、私はこれをどのように正確に行うのですか?私は多少のアイデアを持っていますが、ContentResolverはAndroid/Javaの中で最も混乱しやすいものです。

私は一種の、これは、このようなContentResolverのに渡すことを考えていますが、何の手がかりは、どのように私の目的のために内部的にそれを使用しないために:...事前に

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

感謝:)

+0

、あなたはすでに –

+0

はそのように見えるパラメータとして与えられてきた文脈からそれを得ることができます表示されるはずにコンパイルしました仕上げ、ありがとう。私はhttps://developer.android.com/reference/android/content/ContentResolver.htmlを見直しましたが、それを見てからもっと混乱していました... –

+0

あなたがその方法を探したなら、ここを見ているは​​ずです。 https://developer.android.com/reference/android/content/Context.html –

答えて

1

これはどのように正確に行うのですか?

getContentResolver()Contextの方法です。あなたはContextからrestore()に渡しています。そのContextgetContentResolver()を呼び出します:あなたは、コンテンツリゾルバメソッドのドキュメントを検索した場合

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); 
} 
関連する問題