public class ProximityService extends Service implements SensorEventListener{
boolean hasproximity=false;
SensorManager mSensorManager;
AudioManager am;
Sensor psensor;
public ProximityService() {
}
@Override
public void onCreate() {
super.onCreate();
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
am = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
if(mSensorManager.getSensorList(Sensor.TYPE_PROXIMITY).size()>0) {
Toast.makeText(getApplicationContext(),"Proximity Sensor Detected",Toast.LENGTH_SHORT).show();
hasproximity=true;
psensor=mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
Toast.makeText(getBaseContext(), "sensor event listener addded", Toast.LENGTH_SHORT).show();
mSensorManager.registerListener(this,psensor,SensorManager.SENSOR_DELAY_UI);
} else {
hasproximity=false;
Toast.makeText(getApplicationContext(),"No Proximity Sensor",Toast.LENGTH_SHORT).show();
stopSelf();
}
}
@Override
public void onDestroy() {
super.onDestroy();
mSensorManager.unregisterListener(this);
Toast.makeText(getBaseContext(), "service destroyed", Toast.LENGTH_SHORT).show();
}
@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
super.onStart(intent, startId);
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
float vals[]=event.values;
float x; // light value is 0.0 then it is dark
x=vals[0];
Toast.makeText(getBaseContext(), "light:"+x, Toast.LENGTH_SHORT).show();
if(x == 0.0) {
Toast.makeText(getBaseContext(), "prox closed", Toast.LENGTH_SHORT).show();
am.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
} else {
Toast.makeText(getBaseContext(), "prox open", Toast.LENGTH_SHORT).show();
am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
}
}
}
このコードは、近接センサーが覆われている場合、つまり近接センサーが受信した光の値がゼロになる場合に、電話の呼び出しモードを呼び出し音から振動に変更するために使用されます。
問題は、近接センサーを覆ったときに電話がすでに鳴っている場合、電話はバイブレーション モードではなくサイレント モードになることです。
誰でも解決策を手伝ってもらえますか?