欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

QQ视频聊天,画面顺时针倒转90度问题(MT8163 Android 9.0平台)

程序员文章站 2022-06-05 16:12:29
...

分析解决思路:
QQ视频聊天,画面顺时针倒转90度,不管屏幕如何旋转,都是画面顺时针倒转90度,由此可见是关于重力感应传感器的加速度传感器(Sensor.TYPE_ACCELEROMETER)的问题,但是由于并不是所有的社交软件视频聊天都存在顺时针倒转90度问题,所以需要根据包名判断来过滤。

而关于重力感应传感器的加速度传感器(Sensor.TYPE_ACCELEROMETER)的问题,其具体的处理逻辑代码在SystemSensorManager(extends SensorManager)类中。于是具体的问题修改代码如下:

frameworks/base/core/java/android/hardware/SystemSensorManager.java

public class SystemSensorManager extends SensorManager {
		······
	 //定义全局私有变量
	 private final String mPackageName;
public SystemSensorManager(Context context, Looper mainLooper) {
    synchronized (sLock) {
    
        if (!sNativeClassInited) {
            sNativeClassInited = true;
            nativeClassInit();
        }
    }
    
    mMainLooper = mainLooper;
    mTargetSdkLevel = context.getApplicationInfo().targetSdkVersion;
    mContext = context;
	//获取应用的包名
    mPackageName = context.getPackageName();
    mNativeInstance = nativeCreate(context.getOpPackageName());

    // initialize the sensor list 初始化所有的传感器
    for (int index = 0;; ++index) {
        Sensor sensor = new Sensor();
        if (!nativeGetSensorAtIndex(mNativeInstance, sensor, index)) break;
        mFullSensorsList.add(sensor);
        mHandleToSensor.put(sensor.getHandle(), sensor);
    }
}
······
// Called from native code.
    @SuppressWarnings("unused")
    @Override
    protected void dispatchSensorEvent(int handle, float[] values, int inAccuracy, long timestamp) {
        final Sensor sensor = mManager.mHandleToSensor.get(handle);
        if (sensor == null) {
            // sensor disconnected
            return;
        }

        SensorEvent t = null;
        synchronized (mSensorsEvents) {
            t = mSensorsEvents.get(handle);
        }

        if (t == null) {
            // This may happen if the client has unregistered and there are pending events in
            // the queue waiting to be delivered. Ignore.
            return;
        }
        // Copy from the values array.
			   //判断是否是重力传感器的重力加速度,并且是QQ的包名
       if(sensor.getType() == Sensor.TYPE_ACCELEROMETER && mManager.mPackageName.equalsIgnoreCase("com.tencent.mobileqq")) {
			//定义一个临时变量,用来保存values[0](即X水平向右方向)的值
            float tmp;
           Log.e("mmk_debug", "x = " + values[0] + ",y = " + values[1] + ",z = " + values[2]);
		   //临时保存values[0]的值
            tmp = values[0];
		  //把values[1]的相反数(方向)的值赋值给values[0](即X水平向右方向)的值
            values[0] = -values[1];
		//临时保存values[0]的值赋予给values[1](即Y竖直向上方向的值)
            values[1] = tmp;
  }

        System.arraycopy(values, 0, t.values, 0, t.values.length);
        t.timestamp = timestamp;
        t.accuracy = inAccuracy;
        t.sensor = sensor;
···
}
}

如上代码就解决了QQ视频聊天,画面顺时针倒转90度问题。值得一提的是,当画面不是顺时针倒转90度时,如上解决方法不通用,需要做相应的改变,但是可以根据上面添加的Log输出来做相应的调整,这点需要明确。

相关标签: Android系统