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输出来做相应的调整,这点需要明确。
上一篇: Python 基础整理(未完)
下一篇: php输出金字塔的2种实现方法