2015-04-13 15 views
19

tôi đã viết một bộ tiếp nhận để phát hiện chuyển động điện thoại được thay đổi hay không như thế này trong manifest.xmlLàm thế nào tôi sẽ phát hiện cảm biến chuyển động trong bộ thu phát sóng?

<receiver android:name="com.hanuman.sensor.receiver.SensorReceiver" > 
      <intent-filter 
       android:enabled="true" 
       android:exported="false" > 
       <action android:name="android.intent.action.USER_PRESENT" /> 
      </intent-filter> 
     </receiver> 

và bên nhận onReceive() phương pháp mã là:

String action = intent.getAction(); 
     if (action.equals(Intent.ACTION_USER_PRESENT)) { 
      System.out.println("User is present"); 
      Intent s = new Intent(context, MainActivity.class); 
      s.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(s); 
     } else { 
      System.out.println("User is not present"); 
     } 

cuối cùng câu hỏi của tôi là, không phát hiện cảm biến khi nó được chuyển động, nó phát hiện khi thiết bị của chúng tôi mở khóa sau đó nó đang gọi MainActivity của tôi, nhưng tôi muốn phát hiện khi thiết bị của tôi chuyển động được thay đổi sau đó tôi muốn phát hiện trong máy thu. Làm thế nào tôi có thể làm điều đó?.

+0

là CPU của bạn thức hay ngủ? Mặc dù bạn đang nhận được phát sóng của bạn, nhưng bạn không thể xác định chuyển động, để làm như vậy bạn cần phải thức dậy CPU của bạn nếu nó đi vào chế độ ngủ. Để bắt đầu với [kiểm tra điều này] (https://developer.android.com/reference/android/support/v4/content/WakefulBroadcastReceiver.html) – Skynet

+0

nếu nó đang ở chế độ ngủ thì chuyển động thiết bị của tôi không được phát hiện? – Hanuman

+0

Nếu thiết bị của bạn đang ở chế độ ngủ - thật đáng buồn là, hãy đánh thức thiết bị của bạn sử dụng một phần wakelock. Nhưng hãy đảm bảo phát hành tài nguyên khi bạn đã hoàn tất các hoạt động của mình. Đó là pin quan trọng. – Skynet

Trả lời

10

Nhận đối tượng của SensorManager như liệt kê dưới đây

SensorManager sensorMan = (SensorManager)getSystemService(SENSOR_SERVICE); 

Sensor sensor = sensorMan.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 

listener Đăng ký để lắng nghe những thay đổi trong chuyển động sensor-

sensorMan.registerListener(context, sensor, 
     SensorManager.SENSOR_DELAY_UI); 

Sau đó ghi đè onSensorChanged() phương pháp để phát hiện changes-

@Override 
public void onSensorChanged(SensorEvent event) { 
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){ 
    //do some stuff 
    } 
    //do some other code for other Sensor type 
    } 
1

Bạn không thể và bạn không nên làm điều đó, bởi vì khi màn hình tắt cảm biến ' s tự động tắt, điều này được thực hiện bởi hệ thống trong hầu hết các thiết bị, một số thiết bị hỗ trợ cảm biến nghe sau khi màn hình tắt như nexus 4.But bạn có thể tạo các bộ thu sẽ nghe màn hình tắt và màn hình bật.

lớp Screen công cộng kéo dài BroadcastReceiver {

@Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { 
      screenOn(); 
     } 
     if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { 
      screenOff(); 
     } 

    } 


    IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.addAction(Intent.ACTION_SCREEN_OFF); 
    intentFilter.addAction(Intent.ACTION_SCREEN_ON); 
    mReceiver = new Screen(); 
    registerReceiver(mReceiver, intentFilter); 
Các vấn đề liên quan