0

*電話のリンガーモードをRinger_Mode_silentに変更したいデバイスの動きを検出する加速度計を使用しようとするアプリケーションがあります*着信を検出するサービスを実現しましたが、モードを変更する方法がわかりませんデバイスを移動すると電話がバックグラウンドになります。このアプリケーションを実現するのを手伝ってくれませんか。

public class MainActivity extends Activity 実装 SensorEventListener{

 private SensorManager mSensorManager;
  private Sensor mAccelerometre;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
    mAccelerometre =   mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)  

Button b1=(Button)findViewById(R.id.start);
Button b2=(Button)findViewById(R.id.stop);
b1.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        //Intent intent=new Intent(Main.this,ServiceReceiver.class);
          Intent serv = new Intent(MainActivity.this, ServiceBroadcast.class);
  startService(serv);       
    }

});

  b2.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        //Intent intent=new Intent(Main.this,ServiceReceiver.class);
          Intent serv = new Intent(MainActivity.this, ServiceBroadcast.class);
          stopService(serv);

}

 public void onSensorChanged()(SensorEvent event) {
    float azimuth,pitch,roll;
    if(mSensorManager==SensorManager.Sensor_Accelerometer)
     {
    azimuth = event.values[0];
    pitch = event.values[1];
    roll = event.values[2];
    ((TextView)findViewById(R.id.azimuth)).setText("Axe x "+azimuth);
    ((TextView)findViewById(R.id.pitch)).setText("Axe y "+pitch);
    ((TextView)findViewById(R.id.roll)).setText("Axe z "+roll);
}
  }
4

1 に答える 1

0

単純な動きの検出は、加速度計を使用すると簡単です (パターンの検出は困難です) sqrt(x^2+y^2+z^2) -9.81) を取るだけで動きが得られます。x、y、z は加速度計の読み取り値です。しきい値を超えたときにプロファイル モードを変更します。

ノート:

コード加速度計で述べたように、方位角、ロール、ピッチを与えないでください。

values[0]: 加速度から x 軸の Gx を引いた値

値[1]: y 軸の加速度から Gy を引いた値

値[2]: z 軸上の加速度から Gz を引いた値

于 2013-01-07T14:22:19.363 に答える