是否可以通过使用接近传感器来呼叫号码?

时间:2014-08-07 10:46:59

标签: android

我正在尝试通过将掌上电脑悬停在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;
        }
    }
}

我已检查过清单中所有必需的权限!

1 个答案:

答案 0 :(得分:0)

首先,根据SensorEvent文档values[0]包含以厘米为单位的测量传感器距离 而不是while循环,你应该添加条件是否足够接近:

// if hand is closer than 5 cm
if(reading < 5) {
    // start activity
}

while条件与if(reading == 0.0)相同,因为断句(从不循环)。
此外,您绝不应将floatdouble==进行比较。阅读this原因。

其次,请使用异常日志更新您的问题,以便我们可以看到导致它的原因。

相关问题