eclipse - Phonegap 屏幕方向插件更新 2.7.0 或 2.8.0

标签 eclipse cordova orientation

有没有人知道如何修复this插件可以与最新的 cordova/phonegap 版本一起使用吗?

我不知道如何修复 Eclipse 中的错误,我真的需要一种方法来更改我的 PhoneGap 应用程序中多个页面的方向!

最佳答案

您需要进行以下更改:

ScreenOrientation.java

替换为:

package com.tsukurusha.phonegap.plugins;

import org.json.JSONArray;
import org.json.JSONException;

import android.app.Activity;
import android.content.pm.ActivityInfo;

import org.apache.cordova.api.CallbackContext;
import org.apache.cordova.api.CordovaPlugin;

public class ScreenOrientation extends CordovaPlugin {
    // Refer to http://developer.android.com/reference/android/R.attr.html#screenOrientation
    private static final String UNSPECIFIED = "unspecified";
    private static final String LANDSCAPE = "landscape";
    private static final String PORTRAIT = "portrait";
    private static final String USER = "user";
    private static final String BEHIND = "behind";
    private static final String SENSOR = "sensor";
    private static final String NOSENSOR = "nosensor";
    private static final String SENSOR_LANDSCAPE = "sensorLandscape";
    private static final String SENSOR_PORTRAIT = "sensorPortrait";
    private static final String REVERSE_LANDSCAPE = "reverseLandscape";
    private static final String REVERSE_PORTRAIT = "reversePortrait";
    private static final String FULL_SENSOR = "fullSensor";

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {

        if (action.equals("set")) {
            String orientation = args.optString(0);     
            Activity activity = this.cordova.getActivity();
            if (orientation.equals(UNSPECIFIED)) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
            } else if (orientation.equals(LANDSCAPE)) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            } else if (orientation.equals(PORTRAIT)) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            } else if (orientation.equals(USER)) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
            } else if (orientation.equals(BEHIND)) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_BEHIND);
            } else if (orientation.equals(SENSOR)) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
            } else if (orientation.equals(NOSENSOR)) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
            } else if (orientation.equals(SENSOR_LANDSCAPE)) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
            } else if (orientation.equals(SENSOR_PORTRAIT)) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
            } else if (orientation.equals(REVERSE_LANDSCAPE)) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
            } else if (orientation.equals(REVERSE_PORTRAIT)) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
            } else if (orientation.equals(FULL_SENSOR)) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
            }
            callbackContext.success();
            return true;
        } else {
            return false;
        }       
    }
}

pg-plugin-screen-orientation.js

替换为:

cordova.define("cordova/plugin/screenorientation", function(require, exports, module) {
    var exec = require('cordova/exec');    
    var ScreenOrientation = function() {};    
    ScreenOrientation.prototype.set = function(str, successCallback, errorCallback) {
        exec(successCallback,
    errorCallback,
    'ScreenOrientation',
    'set',
    [str]);
    };        
    var screenorientation = new ScreenOrientation();
    module.exports = screenorientation;
});

然后您可以将 sample.html 替换为:

<!DOCTYPE html>
<html>
    <head>
        <title>ScreenOrientation PhoneGap Plugin Sample</title>
        <meta charset="utf-8">
        <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
        <script type="text/javascript" charset="utf-8" src="pg-plugin-screen-orientation.js"></script>
        <script type="text/javascript">
            function setOrientation(type){
                cordova.require('cordova/plugin/screenorientation').set(
                    type,
                    function() {
                        console.log("Successfully set "+type);
                    },
                    function() {
                        console.error("Failed to set "+type);
                    }
                );
            }
        </script>
    </head>
    <body>
        <h1>ScreenOrientation PhoneGap Plugin Sample</h1>
        <input type="button" onclick="setOrientation('landscape');" value="Landscape" />
        <input type="button" onclick="setOrientation('portrait');" value="Portrait" />
        <input type="button" onclick="setOrientation('sensorLandscape');" value="Sensor Landscape" />
        <input type="button" onclick="setOrientation('sensorPortrait');" value="Sensor Portrait" />
        <input type="button" onclick="setOrientation('reverseLandscape');" value="Reverse Landscape" />
        <input type="button" onclick="setOrientation('reversePortrait');" value="Reverse Portrait" />
        <input type="button" onclick="setOrientation('fullSensor');" value="Full Sensor" />
    </body>
</html>

我已将其整合为 Eclipse 项目 - 您可以下载它以及生成的 APK here

注意:您可能需要从 Cordova 2.8.0 降级到 Cordova 2.4.0,直到 Cordova 2.5.0+ 中暂停应用程序的问题得到解决 - see here

关于eclipse - Phonegap 屏幕方向插件更新 2.7.0 或 2.8.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17049474/

相关文章:

c++ - 使用 Eclipse 从 OpenCV-3.1 读取错误

javascript - Phonegap AJAX 请求未定义

javascript - Cordova - 如何使用 Node.js 服务器制作在线应用程序/游戏

ubuntu - 如何在 Ubuntu 9.10 中制作检查和切换屏幕方向的快捷方式/脚本

python - 使用 AppEngine 开发服务器在 PyDev 中调试控制台

java - eclipse中如何自动部署maven项目到tomcat

java - 如何防止 eclipse 中出现意外的特殊符号

android - Cordova 构建安卓

iOS 8 - 在关闭全屏 AVPlayerViewController 时将方向更改回纵向

iphone - 无论旋转如何锁定方向