磁場センサーが特定の値だけ変化したときに通話を終了するプログラムを実装しようとしています。アプリが開いているときにアプリケーションがこれを検出することを示すために、トーストを表示することができました。次のように拡張したいと思います。
- チェックボックスをオンにすると、サービスとしてバックグラウンドで実行されます (サービスを正しく呼び出したかどうかはわかりません)。
- センサーは、着信がある場合にのみリッスンする必要があります。
基本的に、オンセンサー変更クラスは、ボックスがチェックされ、呼び出しが鳴っている場合にのみ呼び出されるようにしたいと考えています。アプリが開いていない場合でも、アプリケーションはこれをチェックする必要があります。
public class MainActivity extends Activity implements SensorEventListener {
CheckBox calls, texts, events;
TextView one, two, three;
SensorManager sm;
Sensor sensor;
float sensorX, sensorY, sensorZ, sensorX2, sensorY2, sensorZ2;
float ex, why, zed, diff, mdiff;
int count;
TelephonyManager tm;
AudioManager audio;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
linktoxml();
sensorX = sensorY = sensorZ = sensorX2 = sensorY2= sensorZ2=0;
mdiff = -30;
diff = 30;
count = 0;
calls.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//turn on call magnets
if (calls.isChecked()){
startService(new Intent());
if(TelephonyManager.EXTRA_STATE.equals(TelephonyManager.EXTRA_STATE_RINGING))
{
sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
sensor = sm.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
sm.registerListener(MainActivity.this, sensor, SensorManager.SENSOR_DELAY_FASTEST);
audio = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
//start listener for magnet
//Toast.makeText(getApplicationContext(),"Phone Is Riging", Toast.LENGTH_LONG).show();
}
}else{
stopService(new Intent());
}
}
});
}