2016-05-29 1 views
0

Désolé si j'ai manqué une solution qui est dans ce sens. Je suis une question demandant à Noob ici, mais j'ai visité plusieurs fois pour la recherche, et j'ai fait des recherches, je le promets. J'essaie d'ajouter une méthode à utiliser lors d'un redémarrage pour restaurer un nœud du noyau qui contrôle l'activation/désactivation des touches capacitives matérielles sur un périphérique Android affecté. J'ai créé une méthode pour le faire à l'intérieur de ma classe HardwareKeysSettings.java:Comment utiliser Content Resolver passé en méthode statique comme argument

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); 
} 

Et ma méthode est appelée à partir d'une classe 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); 
    } 
} 

Je ne peux pas compiler, parce que dans ma méthode restore() ci-dessus, la méthode getContentResolver() ne peut pas être utilisée dans une méthode statique (que j'ai besoin d'utiliser). Je reçois ces erreurs:

/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 

Pas étonnant ou des problèmes terriblement anormaux là-bas. En parlant avec quelqu'un qui est beaucoup plus informé sur ce que moi, je ne donné ce conseil ... à

« appeler votre résolveur de contenu du contexte passé en arg »

qui fait sens pour moi car évidemment la méthode getContentResolver() est non-statique et ne peut pas être utilisée dans ma méthode statique. Je dois passer quelque chose pour utiliser la méthode getContentResolver() correctement. Donc, la question est, comment exactement je fais cela? J'ai une idée, mais ContentResolver est l'une des choses les plus confuses pour Android/Java.

Je pense genre de cela signifie passer dans ContentResolver comme ça, mais pas la moindre idée comment l'utiliser en interne pour mon but:

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

Merci à l'avance ... :)

+0

Si vous lookup la documentation pour la méthode de résolution de contenu, vous devriez voir que vous pouvez l'obtenir à partir du contexte que vous avez déjà donné comme paramètre –

+0

On dirait que cela a la compilation à fini, merci. J'ai passé en revue https://developer.android.com/reference/android/content/ContentResolver.html mais était plus confus après avoir regardé cela ... –

+0

Vous devriez regarder ici si vous avez cherché cette méthode. https://developer.android.com/reference/android/content/Context.html –

Répondre

1

comment exactement je fais cela?

getContentResolver() est une méthode sur Context. Vous passez dans un Context à restore(). Appelez getContentResolver() sur ce 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); 
}