2015-07-03 17 views
5

Nếu người dùng quay qua điện thoại, tôi muốn phản ứng với điều đó bằng cách dừng đọc văn bản của tôi. Nó sẽ là một tính năng tuyệt vời cho ứng dụng của tôi, nhưng làm thế nào tôi có thể phát hiện chuyển động này? Tôi không thực sự quen thuộc với cảm biến chuyển động và tôi không thể tìm thấy người nghe chuyển động cụ thể này ở bất cứ đâu, chủ yếu chỉ là hướng màn hình. Cảm ơn đã giúp đỡ!Làm thế nào để phát hiện chuyển động doanh thu trong Android?

+0

Chỉ cần một ý nghĩ: nếu "đặt bộ mặt điện thoại xuống" là OK (như trái ngược với chỉ chuyển nó qua trên không trung), sau đó phát hiện một tối đột ngột của ánh sáng môi trường xung quanh có thể làm việc ([xem tại đây] (http://developer.android.com/reference/android/hardware/Sensor.html#TYPE_LIGHT)) Không biết nếu có người nghe cho điều này. – TripeHound

+0

sẽ kiểm tra sau (thứ hai) nếu tôi có thể sử dụng. tài liệu nói rằng cảm biến môi trường dễ sử dụng hơn nhiều, vì vậy tôi hy vọng :) –

Trả lời

1

Hoạt động mẫu này thể hiện cảm biến trọng lực của thiết bị có thể được sử dụng để phát hiện khi thiết bị được bật lên. Trong phương thức onSensorChanged(), cụm từ factor xác định cách hoàn thành "lần lượt" phải. Phạm vi tiêu biểu có thể là 0,7 đến 0,95.

Hỗ trợ cảm biến trọng lực được thêm vào API Android 9. Không phải tất cả các thiết bị đều có cảm biến trọng lực.

public class MainActivity extends AppCompatActivity implements SensorEventListener { 

    private static final String TAG = "Demo"; 

    private SensorManager mSensorManager; 
    private Sensor mGravitySensor; 
    private boolean mFacingDown; 

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

    @Override 
    public void onSensorChanged(SensorEvent event) { 
     final float factor = 0.95F; 

     if (event.sensor == mGravitySensor) { 
      boolean nowDown = event.values[2] < -SensorManager.GRAVITY_EARTH * factor; 
      if (nowDown != mFacingDown) { 
       if (nowDown) { 
        Log.i(TAG, "DOWN"); 
       } else { 
        Log.i(TAG, "UP"); 
       } 
       mFacingDown = nowDown; 
      } 
     } 
    } 

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

     mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
     mGravitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY); 

     if (mGravitySensor == null) { 
      Log.w(TAG, "Device has no gravity sensor"); 
     } 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     if (mGravitySensor != null) { 
      mSensorManager.registerListener(this, mGravitySensor, SensorManager.SENSOR_DELAY_NORMAL); 
     } 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     mSensorManager.unregisterListener(this); 
    } 
} 
+0

cảm ơn bạn! Tôi sẽ thử nó vào thứ hai khi tôi trở lại trường đại học, tôi đang làm ứng dụng của tôi như một bài tập ở đó. (sẽ không quên chấp nhận nó :) –

+0

Bạn có thể giúp tôi làm thế nào tôi có thể sử dụng này (thử nghiệm nó, hoạt động tốt) trong một lớp học? Tôi muốn sử dụng nó trong nhiều hoạt động, vì vậy tôi nghĩ rằng tôi thực hiện tất cả điều này trong một lớp học công cộng, nhưng gặp khó khăn khi làm việc, ngay bây giờ tôi nhận được 0 errorst, chỉ cần ứng dụng sẽ không bắt đầu trên điện thoại của tôi: O –

+0

thực sự là ứng dụng không bắt đầu là vì một lý do hoàn toàn khác, tôi chỉ cần xóa nó khỏi điện thoại của tôi và cài đặt lại nó. –

Các vấn đề liên quan