2013-06-20 9 views
0
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); 
     } 
    } 
} 

Этот код используется для изменения режима телефона звонка от звонка вибрировать, если датчик приближения покрыта, то есть значение света, принимаемого датчиком близости становится равной нулю.setRingerMode (AudioManager.RINGER_MODE_VIBRATE) не работает, как ожидалось

Проблема заключается в том, что телефон уже звонит, когда мы закрываем датчик приближения, затем телефон переходит в бесшумный режим, а не в режиме вибрации.

Может ли кто-нибудь помочь мне с решением?

+0

сделал и добавить это разрешение: <использует-разрешение андроида: имя = «android.permission.VIBRATE» /> – ASP

ответ

0

Вы можете использовать этот код для изменения с версии> = Джерри Bean:

Settings.System.putInt(getContentResolver(), "vibrate_when_ringing", 0); //vibrate off 
Settings.System.putInt(getContentResolver(), "vibrate_when_ringing", 1); //vibrate on 

Не забудьте добавить разрешение:

<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 
+0

Несомненно, может быть, вы тестируете только какое-то устройство. – DzungPV