【问题标题】:How do I detect screen rotation on android?如何在android上检测屏幕旋转?
【发布时间】:2012-10-20 23:04:52
【问题描述】:

我想通过本机检测屏幕旋转。

例如,当触摸事件发生时,我们可以通过 /dev/input/event* 事件设备进行检测

这可能吗?

我的意思是,不使用 java。只需使用本机方法。

WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
Display disp = wm.getDefaultDisplay();

int rotation = disp.getRotation(); // Android 2.2
Log.i( "Rotation", "rotation : " + rotation );

switch ( rotation )
{
    case Surface.ROTATION_0: 
        Log.i( "Roation", "Portrait : 0" ); 
        break;

    case Surface.ROTATION_90:
        Log.i( "Roation", "Landscape : 90" );
        break;

    case Surface.ROTATION_180:
        Log.i( "Roation", "Portrait : 180" );
        break;

    case Surface.ROTATION_270:
        Log.i( "Roation", "Landscape : 270" );
        break;
}

【问题讨论】:

  • 您无法从运行在受保护设备(即尚未植根的消费设备)上的应用程序访问 /dev/input 文件。

标签: android android-ndk


【解决方案1】:

如果您使用的是 NativeActivity 基础设施(从问题中看不出来),结构 ANativeActivityCallbacks 中有一个回调 onConfigurationChanged,它作为 ANativeActivity 对象的一部分提供给您,它是由activityandroid_app 结构中指向,这是android_main 的参数。

只需将启动时的回调重置为您的函数:

void OnConfig(ANativeActivity *ac)
{
    //...
}

state->activity->callbacks->onConfigurationChanged = OnConfig;

如果您确实在使用 NativeActivity,请用native-activity 标记问​​题,而不仅仅是android-ndk。有足够的环境差异来保证额外的标签。

【讨论】:

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