我正在尝试通过将掌上电脑悬停在Android设备上来制作一个只调用一定数量的应用。我已经创建了一个后台服务。但当我启动服务并挥动我的设备时,应用程序崩溃了!所以我的问题是,可以通过利用传感器读数的变化进行CERTAIN电话呼叫吗?这是我的服务类代码
public class ProxService extends Service implements SensorEventListener { SensorManager manager;
Sensor prox;
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
manager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
prox = manager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
manager.registerListener(ProxService.this,prox,SensorManager.SENSOR_DELAY_NORMAL);
return START_STICKY;
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
manager.unregisterListener(this);
Toast.makeText(getApplicationContext(),"Accelerometer Service Stopped!",0).show();
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
//Neglect it!
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
float reading;
reading = event.values[0];
//AM I GIVING RIGHT CONDITION HERE?
while(reading == 0.0){
Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:+XXXXXXXXXX"));
startActivity(intent);
break;
}
}
}
我已检查过清单中所有必需的权限!
答案 0 :(得分:0)
首先,根据SensorEvent文档values[0]
包含以厘米为单位的测量传感器距离
而不是while
循环,你应该添加条件是否足够接近:
// if hand is closer than 5 cm
if(reading < 5) {
// start activity
}
while
条件与if(reading == 0.0)
相同,因为断句(从不循环)。
此外,您绝不应将float
或double
与==
进行比较。阅读this原因。
其次,请使用异常日志更新您的问题,以便我们可以看到导致它的原因。