2016-05-07 5 views
-1

Im Accelerometer Sensorを使用して携帯電話からの移動を検出し、移動を検出すると通知を送信します。 通知を送信すると、私は加速度センサーを止めたいです。 私はそれをどうやってするのか分かりません。任意のアイデアみたいな? 私は登録を解除する必要があることを知っていますが、登録を解除する方法と場所を知りません。加速度センサーの停止方法は?

メインアクティビティコード

public class MainActivity extends Activity implements SensorEventListener, Listen { 

private BroadcastReceiver statusReceiver; 
Sensor accelerometer; 
SensorManager sm; 
TextView acceleration; 
SendValues sv; 

private static final String TAG = "MainActivity"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    sm = (SensorManager) getSystemService(SENSOR_SERVICE); 
    accelerometer = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
    sm.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL); 
    acceleration = (TextView) findViewById(R.id.sensorTxt); 

    statusReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String type = intent.getStringExtra("message"); //get the type of message from MyGcmListenerService 1 - lock or 0 -Unlock 
      Log.d(TAG, "TypeMessage: " + type); 
      if (type == "1") // 1 == lock 
      { 
       stopService(); 
      } else { 
       onPause(); 
      } 
     } 

    };} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

@Override 
public void onPause() 
{ 
    super.onPause(); 
    sm.unregisterListener(this); 
} 

public void stopService() 
{ 
    sm.unregisterListener(this); 
} 

@Override 
public void onResume() 
{ 
    super.onResume(); 
    sm.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL); 
} 

@Override 
public void onSensorChanged(SensorEvent event) { 
    acceleration.setText("X: " + event.values[0] + 
      "\nY: " + event.values[1] + 
      "\nZ: " + event.values[2]); 

    // get the phone number from the login 
    SharedPreferences sh = getSharedPreferences("BikePhone", Context.MODE_PRIVATE); 
    String phone = sh.getString(Params.PHONE, null); 

    if (event.values[0] >= 5.000 || (event.values[0] <= -5.000) || (event.values[1] >= 5.000) || (event.values[1] <= -5.000)) { 

     sv = new SendValues(phone, "1"); 

     Gson g = new Gson(); 
     String ans = g.toJson(sv, SendValues.class); 
     send(sv); 
    } 
} 

@Override 
public void onAccuracyChanged(Sensor sensor, int accuracy) { 

} 


public void send(SendValues sv) { 
    SendThreadCommunication con; 
    ServerRequest ser = new ServerRequest(); 
    ser.setResponse(this); 
    Gson gson = new Gson(); 

    String send = gson.toJson(sv, SendValues.class); 

    ser.addParamaters(Params.VALUES, send); 
    ser.addServerName(Params.SERVER_URL); 
    ser.addServletName(Params.BIKE_TO_USER); 
    con = new SendThreadCommunication(ser); 
    con.start(); 
} 

@Override 
public void good() { 
    Toast.makeText(getApplication(), "successful transfer", Toast.LENGTH_LONG).show(); 
} 

@Override 
public void notGood() { 
    Toast.makeText(getApplication(), "UNsuccssful transfer", Toast.LENGTH_LONG).show(); 
} 

@Override 
public void userGcmNotRegistered() { 
    Toast.makeText(getApplication(), "There is some problem, please register again to the App", Toast.LENGTH_LONG).show(); 
    } 

} 

答えて

0

あなたはunregisterListener (SensorEventListener listener)を使用する必要があるとonPause()とonStop(でそれを行います)。あなたが近くにいるように見えます。

(解答中の情報の一部が廃止される可能性があるため)the latest documentationを見て、これらのリンク:

How to detect shake event with android?

Stop Android Accelerometer after Shake

Stop recording accelerometer data with button click

関連する問題