0

У меня есть AlarmManager что выполнить Намерение Broadcast каждый 5мин:Android: Получить поворот экрана от BroadcastReceiver

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
alarmManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 300000, PendingIntent.getBroadcast(context, 0, new Intent(context, Sensors.class), 0)); 

Внутри OnReceive метода BroadcastReceiver, я должен знать ориентацию устройства (0 °, 90 °, 180 °, 270 °):

int orientation = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getOrientation(); 

Все работает нормально. Но когда я сворачиваю или закрываю приложение, вращение экрана всегда возвращает 0 ° (ориентация экрана для Android), даже если устройство лежит горизонтально.

Как узнать ротацию устройства от BroadcastReceiver, независимо от статуса приложения или устройства?

ответ

2

я, наконец, используется акселерометр, чтобы решить эту проблему:

SensorManager sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); 

if (sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) != null) { 
final SensorEventListener sensorEventListener = new SensorEventListener() { 
    public void onSensorChanged(SensorEvent event) { 
     sensorManager.unregisterListener(this); 

     int orientation; 

     // Vertical 
     if (Math.abs(event.values[1]) > Math.abs(event.values[0]) && Math.abs(event.values[1]) > Math.abs(event.values[2])) 
      if (event.values[1] > 0) 
       orientation = 0; // Head Up 
      else 
       orientation = 180; // Head Down 

     // Horizontal 
     else if (Math.abs(event.values[0]) > Math.abs(event.values[1]) && Math.abs(event.values[0]) > Math.abs(event.values[2])) 
      if (event.values[0] > 0) 
       orientation = 90; // Left 
      else 
       orientation = 270; // Right 

     // Flat 
     else 
      orientation = 0; 
    } 

    public void onAccuracyChanged(Sensor sensor, int accuracy) { 

    } 
}; 

sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_FASTEST); 
} 
0

Возможно, this - это то, что вы ищете.

context.getResources().getConfiguration().orientation 

Вы можете получить изменения в реальном времени this way.

+0

Спасибо @ M66B, но он возвращает «пейзаж» или «портрет». Мне нужно знать вращение (0 °, 90 °, 180 ° или 270 °) – Denis