在react-native-android

时间:2017-09-05 13:07:38

标签: react-native react-native-android

我正在开发一个应用程序,实际上我的应用程序在标签/ iPad中显示横向和纵向。但是在平板电脑(iPad工作正常)时,我检查方向功能正常工作,直到解锁设备。当我锁定屏幕上的特定模式(如肖像/风景)之后,转动设备显示在方向之前。不更新当前的方向。

我点了这个链接: https://github.com/yamill/react-native-orientation

这是我的代码:

componentWillMount(){
this.getOrientationtype()
}

getOrientationtype(){
    //alert("Hello")
    if(Platform.OS == 'ios'){  // to Identifying Android or iOS
     if(aspectRatio>1.6){  // Code for Iphone
       // alert("phone")
        Orientation.lockToPortrait()
       }
       else{
         Orientation.getOrientation((err, initial) => {
          if(initial != 'UNKNOWN'){
            this.setState({
              orientation:initial
            }) 
          }
          else{
            this.setState({
              orientation:'PORTRAIT'
            })
          }
        });

       }
     }
     else{

     if(DeviceInfo.isTablet()){
         // alert("android tab")
         Orientation.getOrientation((err, initial) => {
          if(initial != 'UNKNOWN'){
            this.setState({
              orientation:initial
            }) 
          }
          else{
            this.setState({
              orientation:'PORTRAIT'
            })
          }
        });
      }
      else{
        Orientation.lockToPortrait()
      }
     }
  }

请找出此解决方案....我正在使用此链接enter link description here

1 个答案:

答案 0 :(得分:1)

1.您应该使用Orientation.addOrientationListener收听Orientation Events

2.从OrientationModule.java的源代码中可以看出,此库只需在unregisterReceiver中调用onHostPause,因此您无法在锁定后收到onConfigurationChanged个事件屏幕。一种方法是编辑OrientationModule.java内的onHostResume以满足您的需求。

@Override
public void onHostResume() {
    final Activity activity = getCurrentActivity();

    if (activity == null) {
        FLog.e(ReactConstants.TAG, "no activity to register receiver");
        return;
    }
    activity.registerReceiver(receiver, new IntentFilter("onConfigurationChanged"));
    //add below code to onHostResume function
    //send broadcast onResume
    final int orientationInt = getReactApplicationContext().getResources().getConfiguration().orientation;
    Configuration newConfig = new Configuration();
    newConfig.orientation = orientationInt;
    Intent intent = new Intent("onConfigurationChanged");
    intent.putExtra("newConfig", newConfig);
    activity.sendBroadcast(intent);
}

整个代码可以在OrientationModule.java

找到