Phonegap Screen-orientation plugin update for 2.7.0 or 2.8.0

前端 未结 1 920
天涯浪人
天涯浪人 2020-12-12 01:54

Is there anybody out there, who knows how to fix this plugin to work with the newest cordova/phonegap version?

I have no idea how i can fix the errors in eclipse and

相关标签:
1条回答
  • 2020-12-12 02:15

    You need to make the following changes:

    ScreenOrientation.java

    Replace with this:

    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

    Replace with this:

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

    Then you can replace sample.html with this:

    <!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>
    

    I've put this together as an Eclipse project - you can download it and the resulting APK here

    Note: You might want downgrade from Cordova 2.8.0 to Cordova 2.4.0 until issues with pausing the app in Cordova 2.5.0+ have been resolved - see here

    0 讨论(0)
提交回复
热议问题