近接センサーを使用して電話が鳴ったり振動したりするときに、人が電話に手をかざすと通話を消音するAndroidアプリケーションを作成しようとしています。
私はAndroid開発に不慣れです。電話がState-Riningにあるかどうかをアプリケーションでチェックしようとしました。そうである場合、アプリは近接センサーの値が== 0(値に近い)であるかどうかを確認します。近接センサーの値が0の場合、呼び出し中の広告中にセンサーがカバーされていたため、通話をミュートする必要があります。しかし、それはまだ鳴っている状態です。
問題は、電話が鳴り始めたときに、ServiceReceiverが近接センサーの値のみをチェックすることだと思います。その瞬間にセンサー値がゼロでない場合、電話は無音になりません。では、センサー値がゼロになるとすぐに通話が無音になるように、呼び出し中または着信中の近接センサーの値の変化を確認するにはどうすればよいですか?
最初のクラス「mainactivity」には、近接センサーのコードが含まれています。
package example.ringcheck;
import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.media.AudioManager;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity implements SensorEventListener {
static TextView proxText;
SensorManager sm;
Sensor proxSensor;
static float proxValue = 8;
// static boolean muteCall = false;
private AudioManager amanager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sm = (SensorManager) getSystemService(SENSOR_SERVICE);
proxSensor = sm.getDefaultSensor(Sensor.TYPE_PROXIMITY);
proxText = (TextView) findViewById(R.id.ProximityTextView);
sm.registerListener(this, proxSensor, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
proxText.setText(String.valueOf(event.values[0]));
proxValue = event.values[0];
Log.d("SENSOR VALUE", "********" + proxValue + "*******");
}
}
2番目のクラス「ServiceReceiver」には、近接センサーのコードが含まれています。
package example.ringcheck;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.telephony.TelephonyManager
import android.util.Log;
public class ServiceReceiver extends BroadcastReceiver {
private AudioManager amanager;
// static boolean isRinging = false;
public void onReceive(Context context, Intent intent) {
if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
TelephonyManager.EXTRA_STATE_RINGING)) {
// isRinging = true;
if (MainActivity.proxValue == 0) {
amanager = (AudioManager) context
.getSystemService(Context.AUDIO_SERVICE);
amanager.setRingerMode(0x00000000);
// isRinging = false;
}
Log.d("MPR", "Its Ringing");
}
}
}
前もって感謝します :-)