【问题标题】:How i will detect motion sensor in broadcast receiver?我将如何检测广播接收器中的运动传感器?
【发布时间】:2015-04-13 11:41:00
【问题描述】:

我在 Manifest.xml

中编写了一个接收器来检测设备运动是否发生变化
 <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>

而里面receiver onReceive()方法代码是:

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

最后我的问题是,当传感器运动时没有检测到传感器,它正在检测我的设备何时解锁然后它正在调用我的 MainActivity,但我想检测我的设备运动何时改变然后我想在接收器中检测。我该怎么做?

【问题讨论】:

  • 你的 CPU 是醒着还是睡着了?虽然您正在接收广播,但您无法确定运动,如果它进入睡眠模式,您需要唤醒您的 CPU。从check this开始
  • 如果它处于睡眠模式,那么我的设备运动没有被检测到?
  • 如果您的设备处于睡眠模式 - 遗憾的是没有,请使用部分唤醒锁唤醒您的设备。但请务必在完成操作后释放资源。这对电池至关重要。
  • 好的。如果我的设备处于唤醒模式,那么它将如何检测运动?
  • 您需要对运动传感器进行编码。从您的 onReceive 调用该代码。

标签: android broadcastreceiver sensors android-sensors


【解决方案1】:

如下所示获取 SensorManager 的对象-

SensorManager sensorMan = (SensorManager)getSystemService(SENSOR_SERVICE);

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

注册监听器以监听运动传感器的变化-

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

然后重写 onSensorChanged() 方法来检测变化-

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

【讨论】:

    【解决方案2】:

    您不能也不应该这样做,因为当屏幕熄灭时传感器会自动关闭,这是由大多数设备中的系统完成的,有些设备支持在屏幕熄灭后监听传感器,例如 nexus 4。但是您可以创建接收器来监听屏幕关闭和屏幕打开。

    公共类 Screen 扩展 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多