2011-07-07 154 views
0

我正在嘗試使用加速計傳感器。所以我試過這個 的例子: http://blog.androgames.net/85/android-accelerometer-tutorial/Android加速計傳感器

它的工作很完美。 但是,當我將AccelerometerManager活動更改爲服務時,它不起作用,並且出現錯誤。

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

} 

//這是我的服務時,我改變它,我的錯誤是HIR公共

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

} 

感謝您的幫助。

+0

是一個NullPointerException異常?你似乎沒有初始化變量CONTEXT,並且如果你從某個地方調用了靜態方法getContext(),肯定會導致錯誤。如果你發佈logcat輸出,這將有很大的幫助,所以我們可以看到你得到的錯誤。 – Marmoy

回答

0

上下文嘗試初始化它作爲

this.getApplicationContext() 
+0

解決方案:this.getApplicationContext() –

-1

上面的代碼在上下文的情況下,有NULLPointerException。這就是爲什麼應用程序崩潰。雖然顯示吐司完成使用這個。使用getApplicationContext()。希望這會解決你的問題。

修改代碼:

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

您已經在clas中實現了AccelerometerListsner接口。我假設你已經寫下了正確的代碼,正如你所說的那樣,在擴展Activity的情況下代碼正在工作 –