在状态栏下面有五个按钮——Wifi、蓝牙、GPS、静音模式和自动旋转。我还没有找到一种方法来检测用户何时单击自动旋转按钮。
我已经编写了一个服务来监听方向变化,例如:
我知道有一种方法可以查询系统设置。是否有一个Intent来拦截系统设置的[方向]更改?我已经查阅了Android文档,但找不到这样的Intent - 也许是我在错的地方寻找,或者确实没有相关的Intent。
有人知道如何捕获状态栏中“自动旋转”按钮的更改吗?
更新1:我正在使用的设备是:三星Galaxy S3,三星Galaxy S2,三星Galaxy S和三星Galaxy Ace等许多其他设备。所有这些设备都运行着原始的ROM,并在状态栏下具有“自动旋转”按钮。
更新2:有建议建议使用ContentObserver来监听对系统设置的更改,例如:
然而,我发现在
我已经编写了一个服务来监听方向变化,例如:
public class MyService extends Service {
@Override
public void onCreate() {
super.onCreate();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
this.registerReceiver(myReceiver, intentFilter);
}
public BroadcastReceiver myReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (action.equals(Intent.ACTION_CONFIGURATION_CHANGED)) {
// Show a message about orientation changes.
// This method is only called when the phone is physically rotated.
}
}
}
}
以上的BroadcastReceiver仅在手机被物理旋转时才起作用,但如果点击自动旋转按钮而没有任何物理旋转,则不会调用BroadcastReceiver方法。
我也尝试了OrientationEventListener - 但与BroadcastReceiver方法相同。
为了设置方向,我使用了以下方法:
Settings.System.getInt(context.getContentResolver(), "accelerometer_rotation")
我知道有一种方法可以查询系统设置。是否有一个Intent来拦截系统设置的[方向]更改?我已经查阅了Android文档,但找不到这样的Intent - 也许是我在错的地方寻找,或者确实没有相关的Intent。
有人知道如何捕获状态栏中“自动旋转”按钮的更改吗?
更新1:我正在使用的设备是:三星Galaxy S3,三星Galaxy S2,三星Galaxy S和三星Galaxy Ace等许多其他设备。所有这些设备都运行着原始的ROM,并在状态栏下具有“自动旋转”按钮。
更新2:有建议建议使用ContentObserver来监听对系统设置的更改,例如:
public class SettingsContentObserver extends ContentObserver {
public SettingsContentObserver(Handler handler) {
super(handler);
}
@Override
public boolean deliverSelfNotifications() {
return super.deliverSelfNotifications();
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Logging.writeDebug("Settings change detected: " + selfChange);
}
public void registerContentObserver(Context context) {
context.getContentResolver().registerContentObserver(Settings.System.getUriFor(Settings.System.ACCELEROMETER_ROTATION), true, this);
}
public void unregisterContentObserver(Context context) {
context.getContentResolver().unregisterContentObserver(this);
}
}
然而,我发现在
onChange
方法中的selfChange
变量总是返回false
。