2015-04-13 24 views
19

Cihaz hareketi tespit etmek için bir alıcı yazdığı değiştirilebilir veyaYayın alıcısındaki hareket algılayıcısını nasıl algılayacağım?

<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> 

ve alıcı OnReceive() yöntem kodu içinde Manifest.xmlbu gibi değildir: son

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"); 
     } 

Benim sorum, algılandığında algılayıcı algılamıyor, ne zaman benim cihazın kilidini açtığımı algılamıyor, o zaman benim MainActivity çağırıyor, ancak cihazımı ne zaman algılamak istiyorum Hareket değiştirildi, sonra alıcıda tespit etmek istiyorum. Bunu nasıl yapabilirim?. Kayıt dinleyici

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

geçersiz onSensorChanged() yönteminde sensör hareket değişiklikleri dinlemek için

SensorManager sensorMan = (SensorManager)getSystemService(SENSOR_SERVICE); 

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

aşağıda- gibi SensorManager ait

+0

CPU uyanık veya uykuda mı uzanır? Yayını aldığınız halde, ancak hareketi belirleyemiyor olsanız da, bunu yapmak için uyku moduna geçtiyse, CPU'nuzu uyandırmanız gerekir. Uyku modundaysa [check this] (https://developer.android.com/reference/android/support/v4/content/WakefulBroadcastReceiver.html) – Skynet

+0

ile başlamak için cihazımın hareketi algılanmıyor mu? – Hanuman

+0

Cihazınız uyku modundaysa - ne yazık ki hayır, cihazınızı uyandırmak için kısmi uyanık kullanın. Ancak, işlemleriniz bittiğinde kaynakları serbest bıraktığınızdan emin olun. Bu pil kritiktir. – Skynet

cevap

10

al nesne algılamaya Yapılanma

@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

Bunu yapamazsınız ve yapmamalısınız, çünkü ekran sensörden çıktığında ' otomatik olarak gitti, bu çoğu cihazlarda sistem tarafından yapılır, bazı cihazlar ekran nexus 4 gibi söner sonra dinlerken sensörleri destekler. Ama ekran kapalı ve ekran dinleyecek alıcıları oluşturabilirsiniz.

public class Ekran 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);