2011-07-07 5 views
0

J'essaie de travailler avec le capteur d'accéléromètre. Donc, j'ai essayé ce par exemple: http://blog.androgames.net/85/android-accelerometer-tutorial/Capteur d'accéléromètre Android

Cela fonctionne parfaitement. Mais lorsque je change l'activité d'AccelerometerManager en service, cela ne fonctionne pas et j'ai une erreur.

//this is the activity that i want change 
public class Accelerometer extends Activity 
     implements AccelerometerListener { 

    private static Context CONTEXT; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     CONTEXT = this; 
    } 

    protected void onResume() { 
     super.onResume(); 
     if (AccelerometerManager.isSupported()) { 
      AccelerometerManager.startListening(this); 
     } 
    } 

    protected void onDestroy() { 
     super.onDestroy(); 
     if (AccelerometerManager.isListening()) { 
      AccelerometerManager.stopListening(); 
     } 

    } 

    public static Context getContext() { 
     return CONTEXT; 
    } 

    /** 
    * onShake callback 
    */ 
    public void onShake(float force) { 
     Toast.makeText(this, "Phone shaked : " + force, 1000).show(); 
    } 

    /** 
    * onAccelerationChanged callback 
    */ 
    public void onAccelerationChanged(float x, float y, float z) { 
     ((TextView) findViewById(R.id.x)).setText(String.valueOf(x)); 
     ((TextView) findViewById(R.id.y)).setText(String.valueOf(y)); 
     ((TextView) findViewById(R.id.z)).setText(String.valueOf(z)); 
    } 

} 

// ceci est mon service quand je change, mon erreur est Hir publique

class Accelerometer extends Service implements AccelerometerListener{ private static Context CONTEXT; 

@Override 
public IBinder onBind(Intent intent) { 
// TODO Put your code here 
return null; 
} 

@Override 
public void onCreate() { 
System.out.println(”start listening”); 
// if (AccelerometerManager.isSupported()) { AccelerometerManager.startListening(this); 

// } 
} 

@Override 
public void onDestroy() { 
System.out.println(”start listening”); 
// if (AccelerometerManager.isListening()) { AccelerometerManager.stopListening(); 
// } 
} 

public static Context getContext() { 
return CONTEXT; 
} 

/** 
* onShake callback 
*/ 
public void onShake(float force) { 
Toast.makeText(this, “Phone shaked niktilha omha ya 3ammi el7ag: ” + force, 1000).show(); } 

/** 
* onAccelerationChanged callback 
*/ 
public void onAccelerationChanged(float x, float y, float z) { System.out.println(”x = “+x+” y = “+y+” z = “+z); } 

} 

Merci pour l'aide.

+0

est un NullPointerException? Vous ne semblez pas initialiser la variable CONTEXT et si vous appelez la méthode statique getContext() à partir de quelque chose qui provoquerait certainement une erreur. Cela aiderait beaucoup si vous publiez la sortie logcat afin que nous puissions voir quelle erreur vous obtenez. – Marmoy

Répondre

0

Pour CONTEXTE try initialisant comme

this.getApplicationContext() 
+0

solution: this.getApplicationContext() –

-1

Le code ci-dessus avait NULLPointerException en cas de CONTEXTE. C'est pourquoi l'application se bloque. Tout en montrant le pain grillé fait ceci. Utilisez getApplicationContext(). J'espère que cela va résoudre votre problème.

Code modifié:

class Accelerometer extends Service implements AccelerometerListener{ 

@Override 
public IBinder onBind(Intent intent) { 
// TODO Put your code here 
return null; 
} 

@Override 
public void onCreate() { 
System.out.println(”start listening”); 
// if (AccelerometerManager.isSupported()) { AccelerometerManager.startListening(this); 

// } 
} 

@Override 
public void onDestroy() { 
System.out.println(”stop listening”); 
// if (AccelerometerManager.isListening()) { AccelerometerManager.stopListening(); 
// } 
} 

/** 
* onShake callback 
*/ 
public void onShake(float force) { 
Toast.makeText(getApplicationContext(), “Phone shaked niktilha omha ya 3ammi el7ag: ” + String.valueOf(force), 1000).show(); } 

/** 
* onAccelerationChanged callback 
*/ 
public void onAccelerationChanged(float x, float y, float z) { System.out.println(”x = “+x+” y = “+y+” z = “+z); } 

} 
+0

Vous avez implémenté l'interface AccelerometerListsner dans les clas. Je suppose que vous avez écrit le code correct derrière, comme vous l'avez dit que le code fonctionne au cas où étendu avec Activity –

Questions connexes