我正在实施此菜单,但它没有更新传感器的速度。 我的代码snipet是:
全局变量:
private static final int MENU_SLOW = 0;
private static final int MENU_NORMAL = 1;
private static final int MENU_FAST = 2;
private static final int MENU_EXIT = -1;
int ROTATION_SPEED = 3;
private static SensorManager mySensorManager;
private boolean sersorrunning;
private myCompassView myCompassView;
/** Called when the activity is first created.*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myCompassView = (myCompassView)findViewById(R.id.mycompassview);
mySensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
List<Sensor> mySensors = mySensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
if(mySensors.size() > 0){
mySensorManager.registerListener(mySensorEventListener, mySensors.get(0), ROTATION_SPEED);
sersorrunning = true;
Toast.makeText(this, "POINT the Needle to N for NORTH", Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(this, "COMPASS not Initilised", Toast.LENGTH_LONG).show();
sersorrunning = false;
finish();
}
}
传感器速度代码:
if(mySensors.size() > 0){
mySensorManager.registerListener(mySensorEventListener, mySensors.get(0), ROTATION_SPEED);
sersorrunning = true;
Toast.makeText(this, "POINT the Needle to N for NORTH", Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(this, "COMPASS not Initilised", Toast.LENGTH_LONG).show();
sersorrunning = false;
finish();
}
以下是我尝试更改变量ROTATION_SPEED
的方法:
public boolean onOptionsItemSelected (MenuItem item){
if (item.getItemId() == MENU_SLOW){
ROTATION_SPEED = SensorManager.SENSOR_DELAY_UI;
Toast.makeText(this, "Speed changed to SystemPreffered", Toast.LENGTH_SHORT).show();
}else if (item.getItemId() == MENU_NORMAL){
ROTATION_SPEED = SensorManager.SENSOR_DELAY_NORMAL;
Toast.makeText(this, "Speed changed to NORMAL", Toast.LENGTH_SHORT).show();
}else if (item.getItemId() == MENU_FAST){
ROTATION_SPEED = SensorManager.SENSOR_DELAY_FASTEST;
Toast.makeText(this, "Speed changed to FAST", Toast.LENGTH_SHORT).show();
}else if (item.getItemId() == MENU_EXIT){
android.os.Process.killProcess(android.os.Process.myPid());
Toast.makeText(this, "Exiting application...", Toast.LENGTH_SHORT).show();
}
return false;
}
答案 0 :(得分:0)
由于您有预定义的常量,因此不会选中选项菜单项。它们通常是您在menu / options_menu.xml中定义的资源,并在onCreateOptionsMenu中膨胀。您的处理程序应如下所示:
public boolean onOptionsItemSelected(MenuItem item) {
// Handle all of the possible menu actions.
switch (item.getItemId()) {
case R.id.menu_slow:
...
break;
case R.id.menu_normal:
...
break;
case R.id.menu_fast:
...
break;
case R.id.menu_exit:
...
break;
}
Log.e(TAG,"onOptionsItemSelected");
return super.onOptionsItemSelected(item);
在处理程序中放入一些日志,这样您就可以看到发生了什么。