I would like to implement a functionality in the app such that when user playing audio in his android mobile takes it nearer to his ear, volume should reduce and the audio should play through the earpiece. ( Similar way to what whats app doing when user listens to voice note and moves it near to ear.) Please suggest what is going wrong in the following code? Thanks for the help.
public class SensorActivity extends Activity implements SensorEventListener {
private SensorManager mSensorManager;
private Sensor mSensor;
ImageView iv;
Button b;
MediaPlayer player;
private AudioManager mAudioManager;
public boolean isHeadsetOn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sensor);
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
iv = (ImageView) findViewById(R.id.image);
b = (Button) findViewById(R.id.audio);
mAudioManager = (AudioManager) SensorActivity.this.getSystemService(Context.AUDIO_SERVICE);
mAudioManager.setMode(AudioManager.STREAM_MUSIC);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (player != null && player.isPlaying()) {
player.stop();
player.release();
} else {
AssetFileDescriptor afd;
try {
afd = getAssets().openFd("Kraddy Android Porn.mp3");
player = new MediaPlayer();
player.setDataSource(afd.getFileDescriptor());
player.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
player.prepare();
player.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
}
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL);
}
protected void onPause() {
super.onPause();
try {
// unregisterReceiver(mReciever);
mSensorManager.unregisterListener(this);
} catch (Exception e) {
e.printStackTrace();
}
if (player != null && player.isPlaying()) {
player.stop();
player.release();
}
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
public void onSensorChanged(SensorEvent event) {
Log.e("distance", String.valueOf(event.values[0]));
if (event.values[0] == 0) {
iv.setImageResource(R.drawable.near);
mAudioManager.setSpeakerphoneOn(false);
} else {
iv.setImageResource(R.drawable.far);
mAudioManager.setSpeakerphoneOn(true);
}
}
}