From da5de7def9b367cbf4c78758b694b6bc0564cfda Mon Sep 17 00:00:00 2001
From: CaiFeng <2397707574@qq.com>
Date: Tue, 17 Oct 2023 21:31:14 +0800
Subject: [PATCH 1/7] support location
---
app/src/main/AndroidManifest.xml | 2 +
.../cloudapp/ui/CasCloudPhoneActivity.java | 7 +
cloudphone/src/main/cpp/cas_common/CasMsg.h | 2 +
.../cpp/cas_stream/CasStreamBuildSender.cpp | 3 +
.../cloudphone/jniwrapper/JNIWrapper.java | 1 +
.../common/VirtualDeviceManager.java | 1 +
.../common/VirtualDeviceProtocol.java | 9 +-
.../location/VirtualLocation.java | 199 ++++++++++++++++++
.../location/VirtualLocationManager.java | 57 +++++
9 files changed, 280 insertions(+), 1 deletion(-)
create mode 100644 cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java
create mode 100644 cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocationManager.java
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 10fa95b..ffc3045 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -9,6 +9,8 @@
+
+
0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
this.sendBroadcast(new Intent(GRANT_MICROPHONE_PERMISSION_SUCCESS_ACTION));
}
+ } else if (requestCode == DEV_TYPE_LOCATION) {
+ if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+ this.sendBroadcast(new Intent(GRANT_LOCATION_PERMISSION_SUCCESS_ACTION));
+ }
}
}
diff --git a/cloudphone/src/main/cpp/cas_common/CasMsg.h b/cloudphone/src/main/cpp/cas_common/CasMsg.h
index fcea1f5..f591ff8 100644
--- a/cloudphone/src/main/cpp/cas_common/CasMsg.h
+++ b/cloudphone/src/main/cpp/cas_common/CasMsg.h
@@ -38,6 +38,7 @@ enum CasMsgType : uint8_t {
VirtualCamera = 21,
VirtualMicrophone = 22,
VirtualSensor = 23,
+ VirtualLocation = 24,
End,
};
@@ -61,6 +62,7 @@ enum CasMsgType : uint8_t {
#define CAS_MSG_CHECKSUM_VIRTUAL_CAMERA GET_CAS_CHECKSUM(CasMsgType::VirtualCamera)
#define CAS_MSG_CHECKSUM_VIRTUAL_MICROPHONE GET_CAS_CHECKSUM(CasMsgType::VirtualMicrophone)
#define CAS_MSG_CHECKSUM_VIRTUAL_SENSOR GET_CAS_CHECKSUM(CasMsgType::VirtualSensor)
+#define CAS_MSG_CHECKSUM_VIRTUAL_LOCATION GET_CAS_CHECKSUM(CasMsgType::VirtualLocation)
// 客户端通用消息头
typedef struct streamMsgHead {
diff --git a/cloudphone/src/main/cpp/cas_stream/CasStreamBuildSender.cpp b/cloudphone/src/main/cpp/cas_stream/CasStreamBuildSender.cpp
index 92bbf8a..f857d95 100644
--- a/cloudphone/src/main/cpp/cas_stream/CasStreamBuildSender.cpp
+++ b/cloudphone/src/main/cpp/cas_stream/CasStreamBuildSender.cpp
@@ -84,6 +84,9 @@ int CasStreamBuildSender::SendDataToServer(CasMsgType type, const void *buf, siz
case (VirtualSensor):
msgHead.checksum = CAS_MSG_CHECKSUM_VIRTUAL_SENSOR;
break;
+ case (VirtualLocation):
+ msgHead.checksum = CAS_MSG_CHECKSUM_VIRTUAL_LOCATION;
+ break;
default: {
return -1;
}
diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/jniwrapper/JNIWrapper.java b/cloudphone/src/main/java/com/huawei/cloudphone/jniwrapper/JNIWrapper.java
index 0ea60bd..99ccd8a 100644
--- a/cloudphone/src/main/java/com/huawei/cloudphone/jniwrapper/JNIWrapper.java
+++ b/cloudphone/src/main/java/com/huawei/cloudphone/jniwrapper/JNIWrapper.java
@@ -56,6 +56,7 @@ public class JNIWrapper {
public static final byte CAMERA_DATA = 21;
public static final byte MICROPHONE_DATA = 22;
public static final byte SENSOR_DATA = 23;
+ public static final byte LOCATION_DATA = 24;
static {
System.loadLibrary("cloudapp");
diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/common/VirtualDeviceManager.java b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/common/VirtualDeviceManager.java
index 48d8d5e..5c04683 100644
--- a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/common/VirtualDeviceManager.java
+++ b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/common/VirtualDeviceManager.java
@@ -21,6 +21,7 @@ public class VirtualDeviceManager {
public static final short DEV_TYPE_CAMERA = 1;
public static final short DEV_TYPE_MICROPHONE = 2;
public static final short DEV_TYPE_SENSOR = 0;
+ public static final short DEV_TYPE_LOCATION = 4;
public void processMsg(MsgHeader header, byte[] body) {
}
diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/common/VirtualDeviceProtocol.java b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/common/VirtualDeviceProtocol.java
index f4bfb0b..1e5c855 100644
--- a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/common/VirtualDeviceProtocol.java
+++ b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/common/VirtualDeviceProtocol.java
@@ -17,8 +17,10 @@ package com.huawei.cloudphone.virtualdevice.common;
import static com.huawei.cloudphone.virtualdevice.camera.VirtualCameraManager.DEV_TYPE_CAMERA;
import static com.huawei.cloudphone.virtualdevice.camera.VirtualCameraManager.GRANT_CAMERA_PERMISSION_SUCCESS_ACTION;
+import static com.huawei.cloudphone.virtualdevice.common.VirtualDeviceManager.DEV_TYPE_LOCATION;
import static com.huawei.cloudphone.virtualdevice.common.VirtualDeviceManager.DEV_TYPE_MICROPHONE;
import static com.huawei.cloudphone.virtualdevice.common.VirtualDeviceManager.DEV_TYPE_SENSOR;
+import static com.huawei.cloudphone.virtualdevice.location.VirtualLocationManager.GRANT_LOCATION_PERMISSION_SUCCESS_ACTION;
import static com.huawei.cloudphone.virtualdevice.microphone.VirtualMicrophoneManager.GRANT_MICROPHONE_PERMISSION_SUCCESS_ACTION;
import android.content.BroadcastReceiver;
@@ -29,6 +31,8 @@ import android.hardware.SensorManager;
import android.util.Log;
import com.huawei.cloudphone.virtualdevice.camera.VirtualCameraManager;
+import com.huawei.cloudphone.virtualdevice.location.VirtualLocation;
+import com.huawei.cloudphone.virtualdevice.location.VirtualLocationManager;
import com.huawei.cloudphone.virtualdevice.microphone.VirtualMicrophoneManager;
import com.huawei.cloudphone.virtualdevice.sensor.VirtualSensorManager;
@@ -52,6 +56,8 @@ public class VirtualDeviceProtocol {
((VirtualCameraManager)virtualDeviceManagers.get(DEV_TYPE_CAMERA)).initCamera();
} else if (GRANT_MICROPHONE_PERMISSION_SUCCESS_ACTION.equals(intent.getAction())) {
((VirtualMicrophoneManager)virtualDeviceManagers.get(DEV_TYPE_MICROPHONE)).initMicrophone();
+ } else if (GRANT_LOCATION_PERMISSION_SUCCESS_ACTION.equals(intent.getAction())) {
+ ((VirtualLocationManager)virtualDeviceManagers.get(DEV_TYPE_LOCATION)).initLocation();
}
}
};
@@ -68,10 +74,12 @@ public class VirtualDeviceProtocol {
virtualDeviceManagers.put(DEV_TYPE_MICROPHONE, new VirtualMicrophoneManager(this, mContext));
virtualDeviceManagers.put(DEV_TYPE_SENSOR, new VirtualSensorManager(this,
(SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE)));
+ virtualDeviceManagers.put(DEV_TYPE_LOCATION, new VirtualLocationManager(this, mContext));
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(GRANT_CAMERA_PERMISSION_SUCCESS_ACTION);
intentFilter.addAction(GRANT_MICROPHONE_PERMISSION_SUCCESS_ACTION);
+ intentFilter.addAction(GRANT_LOCATION_PERMISSION_SUCCESS_ACTION);
mContext.registerReceiver(mPermissionResultReceiver, intentFilter);
}
@@ -84,7 +92,6 @@ public class VirtualDeviceProtocol {
virtualDeviceManager.processMsg(header, body);
}
-
public void startProcess() {
mIsTaskRun = true;
mPktProcessThread = new PacketParseThread();
diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java
new file mode 100644
index 0000000..2fc6db7
--- /dev/null
+++ b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java
@@ -0,0 +1,199 @@
+/*
+ * Copyright 2023 Huawei Cloud Computing Technology Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.huawei.cloudphone.virtualdevice.location;
+
+import static android.os.Build.VERSION.SDK_INT;
+import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR2;
+import static com.huawei.cloudphone.virtualdevice.common.VirtualDeviceManager.DEV_TYPE_LOCATION;
+
+import android.Manifest;
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.location.Location;
+import android.location.LocationListener;
+import android.location.LocationManager;
+import android.os.Bundle;
+import android.telephony.CellIdentityCdma;
+import android.telephony.CellIdentityGsm;
+import android.telephony.CellIdentityLte;
+import android.telephony.CellIdentityWcdma;
+import android.telephony.CellInfo;
+import android.telephony.CellInfoCdma;
+import android.telephony.CellInfoGsm;
+import android.telephony.CellInfoLte;
+import android.telephony.CellInfoWcdma;
+import android.telephony.TelephonyManager;
+
+import androidx.core.app.ActivityCompat;
+
+import com.huawei.cloudphone.common.CASLog;
+import com.huawei.cloudphone.virtualdevice.common.IVirtualDeviceDataListener;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class VirtualLocation {
+ private static final String TAG = "VirtualLocation";
+ private Context mContext;
+ private LocationManager mLocationManager;
+ private String mLocationProvider = "";
+ private Location mLocation;
+ private IVirtualDeviceDataListener mListener = null;
+
+ public VirtualLocation(Context context) {
+ mContext = context;
+ }
+
+ @SuppressLint("MissingPermission")
+ public void requestLocationUpdates() {
+ if ((ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)
+ && (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)) {
+ CASLog.i(TAG, "request permission");
+ ActivityCompat.requestPermissions((Activity) mContext,
+ new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION},
+ DEV_TYPE_LOCATION);
+ } else {
+ mLocationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
+ List providers = mLocationManager.getProviders(true);
+ if (providers.contains(LocationManager.GPS_PROVIDER)) {
+ mLocationProvider = LocationManager.GPS_PROVIDER;
+ } else if (providers.contains(LocationManager.NETWORK_PROVIDER)) {
+ mLocationProvider = LocationManager.NETWORK_PROVIDER;
+ }
+ CASLog.i(TAG, "init location " + mLocationProvider);
+ if (mLocationProvider.length() == 0) {
+ return;
+ }
+ mLocationManager.requestLocationUpdates(mLocationProvider, 1000, 1, mLocationListener);
+ mLocation = mLocationManager.getLastKnownLocation(mLocationProvider);
+ String locationInfo = getLocationInfo(mLocation);
+ CASLog.i(TAG, "request location " + locationInfo);
+ mListener.onRecvData(locationInfo);
+ }
+ }
+
+ public void registerLocationDataListener(IVirtualDeviceDataListener listener) {
+ mListener = listener;
+ CASLog.i(TAG, "register listener");
+ }
+
+ private String getLocationInfo(Location location) {
+ String locationInfo = null;
+ if (location != null) {
+ locationInfo = String.format("longitude=%f:latitude=%f:speed=%f:bearing=%f:accuracy=%f:%s",
+ location.getLongitude(), location.getLongitude(), location.getSpeed(), location.getBearing(), location.getAccuracy(), getTelephonyCellInfo());
+ }
+ return locationInfo;
+ }
+
+ @SuppressLint("MissingPermission")
+ private String getTelephonyCellInfo() {
+ TelephonyManager telephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
+ String operator = telephonyManager.getNetworkOperator();
+ CASLog.i(TAG, "operator " + operator);
+ int mcc = -1;
+ if (operator != "") {
+ mcc = Integer.parseInt(operator.substring(0, 3));
+ }
+
+ List cellInfoDataList = new ArrayList<>();
+ List cellInfoList = telephonyManager.getAllCellInfo();
+ for (CellInfo cellInfo : cellInfoList) {
+ CellInfoData cellInfoData = new CellInfoData();
+ cellInfoData.mcc = mcc;
+ if (cellInfo instanceof CellInfoCdma) {
+ CellInfoCdma cellInfoCdma = (CellInfoCdma) cellInfo;
+ CellIdentityCdma cellIdentityCdma = cellInfoCdma.getCellIdentity();
+ cellInfoData.mnc = cellIdentityCdma.getSystemId();
+ cellInfoData.lac = cellIdentityCdma.getNetworkId();
+ cellInfoData.cid = cellIdentityCdma.getBasestationId();
+ cellInfoData.cellType = "CDMA";
+ } else if (cellInfo instanceof CellInfoGsm) {
+ CellInfoGsm cellInfoGsm = (CellInfoGsm) cellInfo;
+ CellIdentityGsm cellIdentityGsm = cellInfoGsm.getCellIdentity();
+ cellInfoData.mnc = cellIdentityGsm.getMnc();
+ cellInfoData.lac = cellIdentityGsm.getLac();
+ cellInfoData.cid = cellIdentityGsm.getCid();
+ cellInfoData.cellType = "GSM";
+ } else if (cellInfo instanceof CellInfoLte) {
+ CellInfoLte cellInfoLte = (CellInfoLte) cellInfo;
+ CellIdentityLte cellIdentityLte = cellInfoLte.getCellIdentity();
+ cellInfoData.mnc = cellIdentityLte.getMnc();
+ cellInfoData.lac = cellIdentityLte.getTac();
+ cellInfoData.cid = cellIdentityLte.getCi();
+ cellInfoData.cellType = "LTE";
+ } else if (cellInfo instanceof CellInfoWcdma) {
+ CellInfoWcdma cellInfoWcdma = (CellInfoWcdma) cellInfo;
+ CellIdentityWcdma cellIdentityWcdma = null;
+ if (SDK_INT >= JELLY_BEAN_MR2) {
+ cellIdentityWcdma = cellInfoWcdma.getCellIdentity();
+ cellInfoData.mnc = cellIdentityWcdma.getMnc();
+ cellInfoData.lac = cellIdentityWcdma.getLac();
+ cellInfoData.cid = cellIdentityWcdma.getCid();
+ }
+ cellInfoData.cellType = "WCDMA";
+ } else {
+ return null;
+ }
+ cellInfoDataList.add(cellInfoData);
+ }
+ if (cellInfoDataList.size() > 0) {
+ return cellInfoDataList.get(0).getCellInfo();
+ }
+ return new CellInfoData().getCellInfo();
+ }
+
+ private LocationListener mLocationListener = new LocationListener() {
+ @Override
+ public void onStatusChanged(String provider, int status, Bundle extras) {
+ CASLog.i(TAG, "onStatusChanged");
+ }
+
+ @Override
+ public void onProviderEnabled(String provider) {
+ CASLog.i(TAG, "onProviderEnabled");
+ }
+
+ @Override
+ public void onProviderDisabled(String provider) {
+ CASLog.i(TAG, "onProviderDisabled");
+ }
+
+ @Override
+ public void onLocationChanged(Location location) {
+ if (location != null) {
+ mLocation = location;
+ String locationInfo = getLocationInfo(location);
+ CASLog.i(TAG, "location changed = " + locationInfo);
+ mListener.onRecvData(locationInfo);
+ }
+ }
+ };
+
+ private class CellInfoData {
+ private int mcc = -1;
+ private int mnc = -1;
+ private int lac = -1;
+ private int cid = -1;
+ private String cellType = "";
+
+ private String getCellInfo() {
+ return String.format("cell_type=%s:mcc=%d:mnc=%d:lac=%d:cid=%d", cellType, mcc, mnc, lac, cid);
+ }
+ }
+}
\ No newline at end of file
diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocationManager.java b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocationManager.java
new file mode 100644
index 0000000..9bbe19c
--- /dev/null
+++ b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocationManager.java
@@ -0,0 +1,57 @@
+package com.huawei.cloudphone.virtualdevice.location;
+
+import static com.huawei.cloudphone.jniwrapper.JNIWrapper.LOCATION_DATA;
+import static com.huawei.cloudphone.jniwrapper.JNIWrapper.SENSOR_DATA;
+import static com.huawei.cloudphone.virtualdevice.common.VirtualDeviceProtocol.MSG_HEADER_LEN;
+
+import android.content.Context;
+import android.hardware.SensorManager;
+import android.util.Log;
+
+import com.huawei.cloudphone.common.CASLog;
+import com.huawei.cloudphone.virtualdevice.common.IVirtualDeviceDataListener;
+import com.huawei.cloudphone.virtualdevice.common.VirtualDeviceManager;
+import com.huawei.cloudphone.virtualdevice.common.VirtualDeviceProtocol;
+import com.huawei.cloudphone.virtualdevice.sensor.VirtualSensorManager;
+
+public class VirtualLocationManager extends VirtualDeviceManager {
+ private static final String TAG = "VirtualLocationManager";
+ public static final short OPT_LOCATION_ENABLE_REQ = 0x0;
+ public static final short OPT_LOCATION_DISABLE_REQ = 0x1;
+ public static final short OPT_LOCATION_DATA = 0x2;
+ public static final String GRANT_LOCATION_PERMISSION_SUCCESS_ACTION = "android.intent.action.GRANT_LOCATION_PERMISSION_SUCCESS";
+
+ private VirtualLocation mVirtualLocation;
+ private VirtualDeviceProtocol mVirtualDeviceProtocol;
+
+ public VirtualLocationManager(VirtualDeviceProtocol virtualDeviceProtocol, Context context) {
+ mVirtualDeviceProtocol = virtualDeviceProtocol;
+ mVirtualLocation = new VirtualLocation(context);
+ mVirtualLocation.registerLocationDataListener(new LocationDataListener());
+ mVirtualLocation.requestLocationUpdates();
+ }
+
+ public void initLocation() {
+ CASLog.i(TAG, "broadcast request location updates");
+ mVirtualLocation.requestLocationUpdates();
+ }
+
+ public void processMsg(VirtualDeviceProtocol.MsgHeader header, byte[] body) {
+
+ }
+
+ class LocationDataListener implements IVirtualDeviceDataListener {
+ @Override
+ public void onRecvData(Object... args) {
+ String body = (String) args[0];
+ CASLog.i(TAG, "body is " + body);
+ int type = 0;
+ int bodyLen = body.getBytes().length;
+ int rspMsgLen = bodyLen + MSG_HEADER_LEN;
+ VirtualDeviceProtocol.MsgHeader header = new VirtualDeviceProtocol.MsgHeader(OPT_LOCATION_DATA, DEV_TYPE_LOCATION, (short) type, rspMsgLen);
+ byte[] rspBody = new byte[bodyLen];
+ System.arraycopy(body.getBytes(), 0, rspBody, 0, bodyLen);
+ mVirtualDeviceProtocol.sendMsg(header, rspBody, LOCATION_DATA);
+ }
+ }
+}
--
Gitee
From 857dab9c1d45e8cc2202a65735c45aa68de90d56 Mon Sep 17 00:00:00 2001
From: CaiFeng <2397707574@qq.com>
Date: Thu, 19 Oct 2023 11:59:14 +0800
Subject: [PATCH 2/7] support location
---
.../cpp/cas_stream/CasStreamRecvParser.cpp | 2 +-
.../common/VirtualDeviceProtocol.java | 1 +
.../location/VirtualLocation.java | 110 ++++++++++--------
.../location/VirtualLocationManager.java | 29 +++--
4 files changed, 86 insertions(+), 56 deletions(-)
diff --git a/cloudphone/src/main/cpp/cas_stream/CasStreamRecvParser.cpp b/cloudphone/src/main/cpp/cas_stream/CasStreamRecvParser.cpp
index 60c1257..09746b9 100644
--- a/cloudphone/src/main/cpp/cas_stream/CasStreamRecvParser.cpp
+++ b/cloudphone/src/main/cpp/cas_stream/CasStreamRecvParser.cpp
@@ -75,7 +75,7 @@ void CasStreamRecvParser::SetServiceHandle(unsigned char type, CasPktHandle *ser
CasPktHandle *CasStreamRecvParser::GetServiceHandle(unsigned char type)
{
- return VirtualSensor >= type && type >= VirtualCamera ? m_serviceHandles[VirtualDevice] : m_serviceHandles[type];
+ return VirtualLocation >= type && type >= VirtualCamera ? m_serviceHandles[VirtualDevice] : m_serviceHandles[type];
}
CasStreamParseThread::CasStreamParseThread(CasSocket *socket, CasStreamRecvParser *streamRecvParser)
diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/common/VirtualDeviceProtocol.java b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/common/VirtualDeviceProtocol.java
index 1e5c855..fea2c3d 100644
--- a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/common/VirtualDeviceProtocol.java
+++ b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/common/VirtualDeviceProtocol.java
@@ -84,6 +84,7 @@ public class VirtualDeviceProtocol {
}
public void processMsg(MsgHeader header, byte[] body) {
+ Log.e(TAG, "device type is " + header.mDeviceType);
VirtualDeviceManager virtualDeviceManager = virtualDeviceManagers.get(header.mDeviceType);
if (virtualDeviceManager == null) {
Log.e(TAG, "processMsg: Error msg type :" + header.mDeviceType);
diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java
index 2fc6db7..ddd9af0 100644
--- a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java
+++ b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java
@@ -49,23 +49,33 @@ import java.util.List;
public class VirtualLocation {
private static final String TAG = "VirtualLocation";
+ private final String LOCATION_FORMAT = "longitude=%f:latitude=%f:speed=%f:bearing=%f:accuracy=%f";
+ private final String LOCATION_FORMAT_WITH_CELL = LOCATION_FORMAT + ":%s";
+ private final long MIN_TIME = 100;
+ private final float MIN_DISTANCE = 0.1f;
+
private Context mContext;
- private LocationManager mLocationManager;
- private String mLocationProvider = "";
private Location mLocation;
+ private LocationManager mLocationManager;
+ private LocationListener mLocationListener;
+ private String mLocationProvider;
private IVirtualDeviceDataListener mListener = null;
public VirtualLocation(Context context) {
mContext = context;
}
+ public void registerLocationDataListener(IVirtualDeviceDataListener listener) {
+ mListener = listener;
+ }
+
@SuppressLint("MissingPermission")
public void requestLocationUpdates() {
- if ((ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)
- && (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)) {
+ if ((ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
+ && (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)) {
CASLog.i(TAG, "request permission");
ActivityCompat.requestPermissions((Activity) mContext,
- new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION},
+ new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION},
DEV_TYPE_LOCATION);
} else {
mLocationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
@@ -74,29 +84,64 @@ public class VirtualLocation {
mLocationProvider = LocationManager.GPS_PROVIDER;
} else if (providers.contains(LocationManager.NETWORK_PROVIDER)) {
mLocationProvider = LocationManager.NETWORK_PROVIDER;
- }
- CASLog.i(TAG, "init location " + mLocationProvider);
- if (mLocationProvider.length() == 0) {
+ } else {
return;
}
- mLocationManager.requestLocationUpdates(mLocationProvider, 1000, 1, mLocationListener);
+ CASLog.i(TAG, "init location " + mLocationProvider);
+ mLocationListener = new LocationListener() {
+ @Override
+ public void onLocationChanged(Location location) {
+ if (location != null) {
+ mLocation = location;
+ String locationInfo = getLocationInfo(location);
+ CASLog.i(TAG, "location changed = " + locationInfo);
+ mListener.onRecvData(locationInfo);
+ }
+ }
+
+ @Override
+ public void onStatusChanged(String s, int i, Bundle bundle) {
+
+ }
+
+ @Override
+ public void onProviderEnabled(String s) {
+
+ }
+
+ @Override
+ public void onProviderDisabled(String s) {
+
+ }
+ };
+ mLocationManager.requestLocationUpdates(mLocationProvider, MIN_TIME, MIN_DISTANCE, mLocationListener);
mLocation = mLocationManager.getLastKnownLocation(mLocationProvider);
String locationInfo = getLocationInfo(mLocation);
- CASLog.i(TAG, "request location " + locationInfo);
- mListener.onRecvData(locationInfo);
+ CASLog.i(TAG, "last location = " + locationInfo);
+ if (locationInfo != null) {
+ mListener.onRecvData(locationInfo);
+ }
}
}
- public void registerLocationDataListener(IVirtualDeviceDataListener listener) {
- mListener = listener;
- CASLog.i(TAG, "register listener");
+ @SuppressLint("MissingPermission")
+ public void closeLocationUpdates() {
+ mLocationManager.removeUpdates(mLocationListener);
}
private String getLocationInfo(Location location) {
+ if (location == null) {
+ return null;
+ }
String locationInfo = null;
- if (location != null) {
- locationInfo = String.format("longitude=%f:latitude=%f:speed=%f:bearing=%f:accuracy=%f:%s",
- location.getLongitude(), location.getLongitude(), location.getSpeed(), location.getBearing(), location.getAccuracy(), getTelephonyCellInfo());
+ String telephonyCellInfo = getTelephonyCellInfo();
+
+ if (telephonyCellInfo != null) {
+ locationInfo = String.format(LOCATION_FORMAT_WITH_CELL, location.getLongitude(), location.getLatitude(),
+ location.getSpeed(), location.getBearing(), location.getAccuracy(), telephonyCellInfo);
+ } else {
+ locationInfo = String.format(LOCATION_FORMAT, location.getLongitude(), location.getLatitude(),
+ location.getSpeed(), location.getBearing(), location.getAccuracy());
}
return locationInfo;
}
@@ -105,7 +150,7 @@ public class VirtualLocation {
private String getTelephonyCellInfo() {
TelephonyManager telephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
String operator = telephonyManager.getNetworkOperator();
- CASLog.i(TAG, "operator " + operator);
+ CASLog.i(TAG, "operator = " + operator);
int mcc = -1;
if (operator != "") {
mcc = Integer.parseInt(operator.substring(0, 3));
@@ -158,39 +203,12 @@ public class VirtualLocation {
return new CellInfoData().getCellInfo();
}
- private LocationListener mLocationListener = new LocationListener() {
- @Override
- public void onStatusChanged(String provider, int status, Bundle extras) {
- CASLog.i(TAG, "onStatusChanged");
- }
-
- @Override
- public void onProviderEnabled(String provider) {
- CASLog.i(TAG, "onProviderEnabled");
- }
-
- @Override
- public void onProviderDisabled(String provider) {
- CASLog.i(TAG, "onProviderDisabled");
- }
-
- @Override
- public void onLocationChanged(Location location) {
- if (location != null) {
- mLocation = location;
- String locationInfo = getLocationInfo(location);
- CASLog.i(TAG, "location changed = " + locationInfo);
- mListener.onRecvData(locationInfo);
- }
- }
- };
-
private class CellInfoData {
+ private String cellType = "";
private int mcc = -1;
private int mnc = -1;
private int lac = -1;
private int cid = -1;
- private String cellType = "";
private String getCellInfo() {
return String.format("cell_type=%s:mcc=%d:mnc=%d:lac=%d:cid=%d", cellType, mcc, mnc, lac, cid);
diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocationManager.java b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocationManager.java
index 9bbe19c..3ff8fb4 100644
--- a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocationManager.java
+++ b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocationManager.java
@@ -1,23 +1,20 @@
package com.huawei.cloudphone.virtualdevice.location;
import static com.huawei.cloudphone.jniwrapper.JNIWrapper.LOCATION_DATA;
-import static com.huawei.cloudphone.jniwrapper.JNIWrapper.SENSOR_DATA;
import static com.huawei.cloudphone.virtualdevice.common.VirtualDeviceProtocol.MSG_HEADER_LEN;
import android.content.Context;
-import android.hardware.SensorManager;
import android.util.Log;
import com.huawei.cloudphone.common.CASLog;
import com.huawei.cloudphone.virtualdevice.common.IVirtualDeviceDataListener;
import com.huawei.cloudphone.virtualdevice.common.VirtualDeviceManager;
import com.huawei.cloudphone.virtualdevice.common.VirtualDeviceProtocol;
-import com.huawei.cloudphone.virtualdevice.sensor.VirtualSensorManager;
public class VirtualLocationManager extends VirtualDeviceManager {
private static final String TAG = "VirtualLocationManager";
- public static final short OPT_LOCATION_ENABLE_REQ = 0x0;
- public static final short OPT_LOCATION_DISABLE_REQ = 0x1;
+ public static final short OPT_LOCATION_OPEN_REQ = 0x0;
+ public static final short OPT_LOCATION_CLOSE_REQ = 0x1;
public static final short OPT_LOCATION_DATA = 0x2;
public static final String GRANT_LOCATION_PERMISSION_SUCCESS_ACTION = "android.intent.action.GRANT_LOCATION_PERMISSION_SUCCESS";
@@ -28,23 +25,37 @@ public class VirtualLocationManager extends VirtualDeviceManager {
mVirtualDeviceProtocol = virtualDeviceProtocol;
mVirtualLocation = new VirtualLocation(context);
mVirtualLocation.registerLocationDataListener(new LocationDataListener());
- mVirtualLocation.requestLocationUpdates();
}
public void initLocation() {
- CASLog.i(TAG, "broadcast request location updates");
+ CASLog.i(TAG, "broadcast");
mVirtualLocation.requestLocationUpdates();
}
- public void processMsg(VirtualDeviceProtocol.MsgHeader header, byte[] body) {
+ public void stop() {
+ CASLog.i(TAG, "stop");
+ mVirtualLocation.closeLocationUpdates();
+ }
+ public void processMsg(VirtualDeviceProtocol.MsgHeader header, byte[] body) {
+ switch (header.mOptType) {
+ case OPT_LOCATION_OPEN_REQ:
+ Log.i(TAG, "processMsg: open location");
+ mVirtualLocation.requestLocationUpdates();
+ break;
+ case OPT_LOCATION_CLOSE_REQ:
+ Log.i(TAG, "processMsg: close location");
+ mVirtualLocation.closeLocationUpdates();
+ break;
+ default:
+ Log.e(TAG, "processMsg: error opt type");
+ }
}
class LocationDataListener implements IVirtualDeviceDataListener {
@Override
public void onRecvData(Object... args) {
String body = (String) args[0];
- CASLog.i(TAG, "body is " + body);
int type = 0;
int bodyLen = body.getBytes().length;
int rspMsgLen = bodyLen + MSG_HEADER_LEN;
--
Gitee
From bc3a803fc76edf20c7cb21d5e258b2bd9d5da53e Mon Sep 17 00:00:00 2001
From: CaiFeng <2397707574@qq.com>
Date: Thu, 19 Oct 2023 19:41:39 +0800
Subject: [PATCH 3/7] support location
---
.../cloudphone/virtualdevice/location/VirtualLocation.java | 6 +++---
.../cloudphone/virtualdevice/sensor/VirtualSensor.java | 7 +++++++
.../virtualdevice/sensor/VirtualSensorManager.java | 6 ++++++
3 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java
index ddd9af0..72df554 100644
--- a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java
+++ b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java
@@ -49,7 +49,7 @@ import java.util.List;
public class VirtualLocation {
private static final String TAG = "VirtualLocation";
- private final String LOCATION_FORMAT = "longitude=%f:latitude=%f:speed=%f:bearing=%f:accuracy=%f";
+ private final String LOCATION_FORMAT = "longitude=%f:latitude=%f:speed=%f";
private final String LOCATION_FORMAT_WITH_CELL = LOCATION_FORMAT + ":%s";
private final long MIN_TIME = 100;
private final float MIN_DISTANCE = 0.1f;
@@ -138,10 +138,10 @@ public class VirtualLocation {
if (telephonyCellInfo != null) {
locationInfo = String.format(LOCATION_FORMAT_WITH_CELL, location.getLongitude(), location.getLatitude(),
- location.getSpeed(), location.getBearing(), location.getAccuracy(), telephonyCellInfo);
+ location.getSpeed(), telephonyCellInfo);
} else {
locationInfo = String.format(LOCATION_FORMAT, location.getLongitude(), location.getLatitude(),
- location.getSpeed(), location.getBearing(), location.getAccuracy());
+ location.getSpeed());
}
return locationInfo;
}
diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensor.java b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensor.java
index 9850e19..f481a59 100644
--- a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensor.java
+++ b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensor.java
@@ -30,6 +30,7 @@ public class VirtualSensor implements SensorEventListener {
private SensorManager mSensorManager;
private Sensor mSensor;
private Sensor mAccelerationSensor;
+ private Sensor mOrientationSensor;
private IVirtualDeviceDataListener mListener = null;
private HandlerThread mHandlerThread;
private boolean mIsStart = false;
@@ -38,6 +39,7 @@ public class VirtualSensor implements SensorEventListener {
mSensorManager = sensorManager;
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
mAccelerationSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
+ mOrientationSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
}
void registerSensorDataListener(IVirtualDeviceDataListener listener) {
@@ -54,6 +56,7 @@ public class VirtualSensor implements SensorEventListener {
Handler handler = new Handler(mHandlerThread.getLooper());
mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_GAME, handler);
mSensorManager.registerListener(this, mAccelerationSensor, SensorManager.SENSOR_DELAY_GAME, handler);
+ mSensorManager.registerListener(this, mOrientationSensor, SensorManager.SENSOR_DELAY_GAME, handler);
mIsStart = true;
}
@@ -64,6 +67,8 @@ public class VirtualSensor implements SensorEventListener {
}
mSensorManager.unregisterListener(this, mSensor);
mSensorManager.unregisterListener(this, mAccelerationSensor);
+ mSensorManager.unregisterListener(this, mOrientationSensor);
+
try {
mHandlerThread.join();
} catch (InterruptedException e) {
@@ -85,6 +90,8 @@ public class VirtualSensor implements SensorEventListener {
mListener.onRecvData(x, y, z, sensorEvent.accuracy, 0);
} else if (type == Sensor.TYPE_GYROSCOPE) {
mListener.onRecvData(x, y, z, sensorEvent.accuracy, 1);
+ } else if (type == Sensor.TYPE_ORIENTATION) {
+ mListener.onRecvData(x, y, z, sensorEvent.accuracy, 2);
}
}
diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensorManager.java b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensorManager.java
index 9e780bc..540599f 100644
--- a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensorManager.java
+++ b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensorManager.java
@@ -31,6 +31,8 @@ public class VirtualSensorManager extends VirtualDeviceManager {
public static final short DEV_ACCELERATION = 0x0;
public static final short DEV_GYROSCOPE = 0x1;
+ public static final short DEV_ORIENTATION = 0x2;
+
public static final short OPT_SENSOR_ENABLE_REQ = 0x1;
public static final short OPT_SENSOR_ENABLE_RSP = 0x1001;
public static final short OPT_SENSOR_DISABLE_REQ = 0x2;
@@ -67,6 +69,8 @@ public class VirtualSensorManager extends VirtualDeviceManager {
mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
header = new MsgHeader(OPT_SENSOR_ENABLE_REQ, DEV_TYPE_SENSOR, DEV_ACCELERATION, rspMsgLen);
mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
+ header = new MsgHeader(OPT_SENSOR_ENABLE_REQ, DEV_TYPE_SENSOR, DEV_ORIENTATION, rspMsgLen);
+ mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
}
public void stop() {
@@ -75,6 +79,8 @@ public class VirtualSensorManager extends VirtualDeviceManager {
mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
header = new MsgHeader(OPT_SENSOR_DISABLE_REQ, DEV_TYPE_SENSOR, DEV_ACCELERATION, rspMsgLen);
mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
+ header = new MsgHeader(OPT_SENSOR_DISABLE_REQ, DEV_TYPE_SENSOR, DEV_ORIENTATION, rspMsgLen);
+ mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
}
class SensorDataListener implements IVirtualDeviceDataListener {
--
Gitee
From 193c5a028792ab94a3cde22a9f2f5f4d8cadd2a0 Mon Sep 17 00:00:00 2001
From: CaiFeng <2397707574@qq.com>
Date: Sat, 21 Oct 2023 11:33:36 +0800
Subject: [PATCH 4/7] support location
---
.../location/VirtualLocation.java | 65 ++++++++++++-------
.../location/VirtualLocationManager.java | 6 +-
.../virtualdevice/sensor/VirtualSensor.java | 20 +++++-
.../sensor/VirtualSensorManager.java | 12 +++-
4 files changed, 73 insertions(+), 30 deletions(-)
diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java
index 72df554..232925c 100644
--- a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java
+++ b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java
@@ -23,11 +23,13 @@ import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
+import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
+import android.os.Looper;
import android.telephony.CellIdentityCdma;
import android.telephony.CellIdentityGsm;
import android.telephony.CellIdentityLte;
@@ -51,8 +53,8 @@ public class VirtualLocation {
private static final String TAG = "VirtualLocation";
private final String LOCATION_FORMAT = "longitude=%f:latitude=%f:speed=%f";
private final String LOCATION_FORMAT_WITH_CELL = LOCATION_FORMAT + ":%s";
- private final long MIN_TIME = 100;
- private final float MIN_DISTANCE = 0.1f;
+ private final long MIN_TIME = 1000;
+ private final float MIN_DISTANCE = 1;
private Context mContext;
private Location mLocation;
@@ -78,19 +80,24 @@ public class VirtualLocation {
new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION},
DEV_TYPE_LOCATION);
} else {
- mLocationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
- List providers = mLocationManager.getProviders(true);
- if (providers.contains(LocationManager.GPS_PROVIDER)) {
- mLocationProvider = LocationManager.GPS_PROVIDER;
- } else if (providers.contains(LocationManager.NETWORK_PROVIDER)) {
- mLocationProvider = LocationManager.NETWORK_PROVIDER;
- } else {
- return;
+ if (mLocationManager == null) {
+ mLocationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
+ CASLog.i(TAG, "mLocationManager " + mLocationManager);
+ List providers = mLocationManager.getProviders(true);
+ if (providers.contains(LocationManager.GPS_PROVIDER)) {
+ mLocationProvider = LocationManager.GPS_PROVIDER;
+ } else if (providers.contains(LocationManager.NETWORK_PROVIDER)) {
+ mLocationProvider = LocationManager.NETWORK_PROVIDER;
+ } else {
+ return;
+ }
+ CASLog.i(TAG, "init location " + mLocationProvider);
}
- CASLog.i(TAG, "init location " + mLocationProvider);
mLocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
+ CASLog.i(TAG, "location changed " + location.toString());
+ CASLog.i(TAG, "mLocationListener " + mLocationListener);
if (location != null) {
mLocation = location;
String locationInfo = getLocationInfo(location);
@@ -101,20 +108,24 @@ public class VirtualLocation {
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
-
+ CASLog.i(TAG, "onStatusChanged " + s);
}
@Override
public void onProviderEnabled(String s) {
-
+ CASLog.i(TAG, "ProviderEnabled " + s);
}
@Override
public void onProviderDisabled(String s) {
-
+ CASLog.i(TAG, "ProviderDisabled " + s);
}
};
- mLocationManager.requestLocationUpdates(mLocationProvider, MIN_TIME, MIN_DISTANCE, mLocationListener);
+ if (mLocationListener != null) {
+ CASLog.i(TAG, "mLocationListener not null " + mLocationListener);
+ }
+ mLocationManager.requestLocationUpdates(mLocationProvider, MIN_TIME, MIN_DISTANCE, mLocationListener, Looper.getMainLooper());
+
mLocation = mLocationManager.getLastKnownLocation(mLocationProvider);
String locationInfo = getLocationInfo(mLocation);
CASLog.i(TAG, "last location = " + locationInfo);
@@ -126,22 +137,30 @@ public class VirtualLocation {
@SuppressLint("MissingPermission")
public void closeLocationUpdates() {
- mLocationManager.removeUpdates(mLocationListener);
+ if (mLocationManager != null) {
+ mLocationManager.removeUpdates(mLocationListener);
+// CASLog.i(TAG, "mLocationManager null");
+// mLocationManager = null;
+ }
+ if (mLocationListener != null) {
+ mLocationListener = null;
+ CASLog.i(TAG, "mLocationListener null");
+ }
}
private String getLocationInfo(Location location) {
if (location == null) {
return null;
}
- String locationInfo = null;
String telephonyCellInfo = getTelephonyCellInfo();
-
+ String locationInfo = "longitude=" + location.getLongitude() +
+ ":latitude=" + location.getLatitude() +
+ ":altitude=" + location.getAltitude() +
+ ":speed=" + location.getSpeed() +
+ ":bearing=" + location.getBearing() +
+ ":accuracy=" + location.getAccuracy();
if (telephonyCellInfo != null) {
- locationInfo = String.format(LOCATION_FORMAT_WITH_CELL, location.getLongitude(), location.getLatitude(),
- location.getSpeed(), telephonyCellInfo);
- } else {
- locationInfo = String.format(LOCATION_FORMAT, location.getLongitude(), location.getLatitude(),
- location.getSpeed());
+ locationInfo = locationInfo + ":" + telephonyCellInfo;
}
return locationInfo;
}
diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocationManager.java b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocationManager.java
index 3ff8fb4..c09aaa6 100644
--- a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocationManager.java
+++ b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocationManager.java
@@ -25,6 +25,7 @@ public class VirtualLocationManager extends VirtualDeviceManager {
mVirtualDeviceProtocol = virtualDeviceProtocol;
mVirtualLocation = new VirtualLocation(context);
mVirtualLocation.registerLocationDataListener(new LocationDataListener());
+ CASLog.i(TAG, "new");
}
public void initLocation() {
@@ -32,11 +33,6 @@ public class VirtualLocationManager extends VirtualDeviceManager {
mVirtualLocation.requestLocationUpdates();
}
- public void stop() {
- CASLog.i(TAG, "stop");
- mVirtualLocation.closeLocationUpdates();
- }
-
public void processMsg(VirtualDeviceProtocol.MsgHeader header, byte[] body) {
switch (header.mOptType) {
case OPT_LOCATION_OPEN_REQ:
diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensor.java b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensor.java
index f481a59..9d18b72 100644
--- a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensor.java
+++ b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensor.java
@@ -15,6 +15,12 @@
*/
package com.huawei.cloudphone.virtualdevice.sensor;
+import static com.huawei.cloudphone.virtualdevice.sensor.VirtualSensorManager.DEV_ACCELERATION;
+import static com.huawei.cloudphone.virtualdevice.sensor.VirtualSensorManager.DEV_GYROSCOPE;
+import static com.huawei.cloudphone.virtualdevice.sensor.VirtualSensorManager.DEV_MAGNETIC;
+import static com.huawei.cloudphone.virtualdevice.sensor.VirtualSensorManager.DEV_MAGNETIC_UNCALIBRATED;
+import static com.huawei.cloudphone.virtualdevice.sensor.VirtualSensorManager.DEV_ORIENTATION;
+
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
@@ -30,6 +36,8 @@ public class VirtualSensor implements SensorEventListener {
private SensorManager mSensorManager;
private Sensor mSensor;
private Sensor mAccelerationSensor;
+ private Sensor mMagneticSensor;
+ private Sensor mMagneticUncalibratedSensor;
private Sensor mOrientationSensor;
private IVirtualDeviceDataListener mListener = null;
private HandlerThread mHandlerThread;
@@ -39,6 +47,8 @@ public class VirtualSensor implements SensorEventListener {
mSensorManager = sensorManager;
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
mAccelerationSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
+ mMagneticSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
+ mMagneticUncalibratedSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED);
mOrientationSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
}
@@ -56,6 +66,8 @@ public class VirtualSensor implements SensorEventListener {
Handler handler = new Handler(mHandlerThread.getLooper());
mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_GAME, handler);
mSensorManager.registerListener(this, mAccelerationSensor, SensorManager.SENSOR_DELAY_GAME, handler);
+ mSensorManager.registerListener(this, mMagneticSensor, SensorManager.SENSOR_DELAY_GAME, handler);
+ mSensorManager.registerListener(this, mMagneticUncalibratedSensor, SensorManager.SENSOR_DELAY_GAME, handler);
mSensorManager.registerListener(this, mOrientationSensor, SensorManager.SENSOR_DELAY_GAME, handler);
mIsStart = true;
}
@@ -67,6 +79,8 @@ public class VirtualSensor implements SensorEventListener {
}
mSensorManager.unregisterListener(this, mSensor);
mSensorManager.unregisterListener(this, mAccelerationSensor);
+ mSensorManager.unregisterListener(this, mMagneticSensor);
+ mSensorManager.unregisterListener(this, mMagneticUncalibratedSensor);
mSensorManager.unregisterListener(this, mOrientationSensor);
try {
@@ -90,8 +104,12 @@ public class VirtualSensor implements SensorEventListener {
mListener.onRecvData(x, y, z, sensorEvent.accuracy, 0);
} else if (type == Sensor.TYPE_GYROSCOPE) {
mListener.onRecvData(x, y, z, sensorEvent.accuracy, 1);
- } else if (type == Sensor.TYPE_ORIENTATION) {
+ } else if (type == Sensor.TYPE_MAGNETIC_FIELD) {
mListener.onRecvData(x, y, z, sensorEvent.accuracy, 2);
+ } else if (type == Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED) {
+ mListener.onRecvData(x, y, z, sensorEvent.accuracy, 3);
+ } else if (type == Sensor.TYPE_ORIENTATION) {
+ mListener.onRecvData(x, y, z, sensorEvent.accuracy, 4);
}
}
diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensorManager.java b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensorManager.java
index 540599f..09a8a49 100644
--- a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensorManager.java
+++ b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensorManager.java
@@ -31,7 +31,9 @@ public class VirtualSensorManager extends VirtualDeviceManager {
public static final short DEV_ACCELERATION = 0x0;
public static final short DEV_GYROSCOPE = 0x1;
- public static final short DEV_ORIENTATION = 0x2;
+ public static final short DEV_MAGNETIC = 0x2;
+ public static final short DEV_MAGNETIC_UNCALIBRATED = 0x3;
+ public static final short DEV_ORIENTATION = 0x4;
public static final short OPT_SENSOR_ENABLE_REQ = 0x1;
public static final short OPT_SENSOR_ENABLE_RSP = 0x1001;
@@ -69,6 +71,10 @@ public class VirtualSensorManager extends VirtualDeviceManager {
mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
header = new MsgHeader(OPT_SENSOR_ENABLE_REQ, DEV_TYPE_SENSOR, DEV_ACCELERATION, rspMsgLen);
mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
+ header = new MsgHeader(OPT_SENSOR_ENABLE_REQ, DEV_TYPE_SENSOR, DEV_MAGNETIC, rspMsgLen);
+ mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
+ header = new MsgHeader(OPT_SENSOR_ENABLE_REQ, DEV_TYPE_SENSOR, DEV_MAGNETIC_UNCALIBRATED, rspMsgLen);
+ mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
header = new MsgHeader(OPT_SENSOR_ENABLE_REQ, DEV_TYPE_SENSOR, DEV_ORIENTATION, rspMsgLen);
mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
}
@@ -79,6 +85,10 @@ public class VirtualSensorManager extends VirtualDeviceManager {
mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
header = new MsgHeader(OPT_SENSOR_DISABLE_REQ, DEV_TYPE_SENSOR, DEV_ACCELERATION, rspMsgLen);
mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
+ header = new MsgHeader(OPT_SENSOR_DISABLE_REQ, DEV_TYPE_SENSOR, DEV_MAGNETIC, rspMsgLen);
+ mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
+ header = new MsgHeader(OPT_SENSOR_DISABLE_REQ, DEV_TYPE_SENSOR, DEV_MAGNETIC_UNCALIBRATED, rspMsgLen);
+ mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
header = new MsgHeader(OPT_SENSOR_DISABLE_REQ, DEV_TYPE_SENSOR, DEV_ORIENTATION, rspMsgLen);
mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
}
--
Gitee
From 5ba7b4805a6faedd2a84b5458f2978cb64736bfb Mon Sep 17 00:00:00 2001
From: CaiFeng <2397707574@qq.com>
Date: Wed, 25 Oct 2023 10:38:45 +0800
Subject: [PATCH 5/7] support location
---
.../location/VirtualLocation.java | 33 ++++++++++++-------
.../location/VirtualLocationManager.java | 10 ++++++
2 files changed, 32 insertions(+), 11 deletions(-)
diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java
index 232925c..a536b1b 100644
--- a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java
+++ b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java
@@ -28,8 +28,10 @@ import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
+import android.os.Build;
import android.os.Bundle;
import android.os.Looper;
+import android.provider.Settings;
import android.telephony.CellIdentityCdma;
import android.telephony.CellIdentityGsm;
import android.telephony.CellIdentityLte;
@@ -41,6 +43,7 @@ import android.telephony.CellInfoLte;
import android.telephony.CellInfoWcdma;
import android.telephony.TelephonyManager;
+import androidx.annotation.RequiresApi;
import androidx.core.app.ActivityCompat;
import com.huawei.cloudphone.common.CASLog;
@@ -71,6 +74,7 @@ public class VirtualLocation {
mListener = listener;
}
+ @RequiresApi(api = Build.VERSION_CODES.P)
@SuppressLint("MissingPermission")
public void requestLocationUpdates() {
if ((ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
@@ -82,17 +86,24 @@ public class VirtualLocation {
} else {
if (mLocationManager == null) {
mLocationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
- CASLog.i(TAG, "mLocationManager " + mLocationManager);
- List providers = mLocationManager.getProviders(true);
- if (providers.contains(LocationManager.GPS_PROVIDER)) {
- mLocationProvider = LocationManager.GPS_PROVIDER;
- } else if (providers.contains(LocationManager.NETWORK_PROVIDER)) {
- mLocationProvider = LocationManager.NETWORK_PROVIDER;
- } else {
- return;
- }
- CASLog.i(TAG, "init location " + mLocationProvider);
}
+ boolean locationEnable = mLocationManager.isLocationEnabled();
+ if (!locationEnable) {
+ CASLog.i(TAG, "location enable is false");
+ Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
+ mContext.startActivity(intent);
+ return;
+ }
+
+ List providers = mLocationManager.getProviders(true);
+ if (providers.contains(LocationManager.GPS_PROVIDER)) {
+ mLocationProvider = LocationManager.GPS_PROVIDER;
+ } else if (providers.contains(LocationManager.NETWORK_PROVIDER)) {
+ mLocationProvider = LocationManager.NETWORK_PROVIDER;
+ } else {
+ return;
+ }
+ CASLog.i(TAG, "init location " + mLocationProvider);
mLocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
@@ -219,7 +230,7 @@ public class VirtualLocation {
if (cellInfoDataList.size() > 0) {
return cellInfoDataList.get(0).getCellInfo();
}
- return new CellInfoData().getCellInfo();
+ return null;
}
private class CellInfoData {
diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocationManager.java b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocationManager.java
index c09aaa6..68c1fc7 100644
--- a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocationManager.java
+++ b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocationManager.java
@@ -4,8 +4,11 @@ import static com.huawei.cloudphone.jniwrapper.JNIWrapper.LOCATION_DATA;
import static com.huawei.cloudphone.virtualdevice.common.VirtualDeviceProtocol.MSG_HEADER_LEN;
import android.content.Context;
+import android.os.Build;
import android.util.Log;
+import androidx.annotation.RequiresApi;
+
import com.huawei.cloudphone.common.CASLog;
import com.huawei.cloudphone.virtualdevice.common.IVirtualDeviceDataListener;
import com.huawei.cloudphone.virtualdevice.common.VirtualDeviceManager;
@@ -28,11 +31,18 @@ public class VirtualLocationManager extends VirtualDeviceManager {
CASLog.i(TAG, "new");
}
+ @RequiresApi(api = Build.VERSION_CODES.P)
public void initLocation() {
CASLog.i(TAG, "broadcast");
mVirtualLocation.requestLocationUpdates();
}
+ public void stop() {
+ CASLog.i(TAG, "stop");
+ mVirtualLocation.closeLocationUpdates();
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.P)
public void processMsg(VirtualDeviceProtocol.MsgHeader header, byte[] body) {
switch (header.mOptType) {
case OPT_LOCATION_OPEN_REQ:
--
Gitee
From 2400af9ae645684ea8b619f27bc25950a5e7ecae Mon Sep 17 00:00:00 2001
From: CaiFeng <2397707574@qq.com>
Date: Thu, 26 Oct 2023 19:37:50 +0800
Subject: [PATCH 6/7] support location
---
.../common/VirtualDeviceProtocol.java | 1 -
.../location/VirtualLocation.java | 23 +++----------------
.../location/VirtualLocationManager.java | 3 ---
3 files changed, 3 insertions(+), 24 deletions(-)
diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/common/VirtualDeviceProtocol.java b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/common/VirtualDeviceProtocol.java
index fea2c3d..1e5c855 100644
--- a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/common/VirtualDeviceProtocol.java
+++ b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/common/VirtualDeviceProtocol.java
@@ -84,7 +84,6 @@ public class VirtualDeviceProtocol {
}
public void processMsg(MsgHeader header, byte[] body) {
- Log.e(TAG, "device type is " + header.mDeviceType);
VirtualDeviceManager virtualDeviceManager = virtualDeviceManagers.get(header.mDeviceType);
if (virtualDeviceManager == null) {
Log.e(TAG, "processMsg: Error msg type :" + header.mDeviceType);
diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java
index a536b1b..a5a09f3 100644
--- a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java
+++ b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocation.java
@@ -54,8 +54,6 @@ import java.util.List;
public class VirtualLocation {
private static final String TAG = "VirtualLocation";
- private final String LOCATION_FORMAT = "longitude=%f:latitude=%f:speed=%f";
- private final String LOCATION_FORMAT_WITH_CELL = LOCATION_FORMAT + ":%s";
private final long MIN_TIME = 1000;
private final float MIN_DISTANCE = 1;
@@ -79,7 +77,7 @@ public class VirtualLocation {
public void requestLocationUpdates() {
if ((ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
&& (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)) {
- CASLog.i(TAG, "request permission");
+ CASLog.i(TAG, "request coarse and fine location permission");
ActivityCompat.requestPermissions((Activity) mContext,
new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION},
DEV_TYPE_LOCATION);
@@ -103,43 +101,32 @@ public class VirtualLocation {
} else {
return;
}
- CASLog.i(TAG, "init location " + mLocationProvider);
+ CASLog.i(TAG, "location provider is " + mLocationProvider);
mLocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
- CASLog.i(TAG, "location changed " + location.toString());
- CASLog.i(TAG, "mLocationListener " + mLocationListener);
if (location != null) {
mLocation = location;
String locationInfo = getLocationInfo(location);
- CASLog.i(TAG, "location changed = " + locationInfo);
mListener.onRecvData(locationInfo);
}
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
- CASLog.i(TAG, "onStatusChanged " + s);
}
@Override
public void onProviderEnabled(String s) {
- CASLog.i(TAG, "ProviderEnabled " + s);
}
@Override
public void onProviderDisabled(String s) {
- CASLog.i(TAG, "ProviderDisabled " + s);
}
};
- if (mLocationListener != null) {
- CASLog.i(TAG, "mLocationListener not null " + mLocationListener);
- }
mLocationManager.requestLocationUpdates(mLocationProvider, MIN_TIME, MIN_DISTANCE, mLocationListener, Looper.getMainLooper());
-
mLocation = mLocationManager.getLastKnownLocation(mLocationProvider);
String locationInfo = getLocationInfo(mLocation);
- CASLog.i(TAG, "last location = " + locationInfo);
if (locationInfo != null) {
mListener.onRecvData(locationInfo);
}
@@ -150,12 +137,9 @@ public class VirtualLocation {
public void closeLocationUpdates() {
if (mLocationManager != null) {
mLocationManager.removeUpdates(mLocationListener);
-// CASLog.i(TAG, "mLocationManager null");
-// mLocationManager = null;
}
if (mLocationListener != null) {
mLocationListener = null;
- CASLog.i(TAG, "mLocationListener null");
}
}
@@ -180,9 +164,8 @@ public class VirtualLocation {
private String getTelephonyCellInfo() {
TelephonyManager telephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
String operator = telephonyManager.getNetworkOperator();
- CASLog.i(TAG, "operator = " + operator);
int mcc = -1;
- if (operator != "") {
+ if (operator != null && operator.length() == 3) {
mcc = Integer.parseInt(operator.substring(0, 3));
}
diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocationManager.java b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocationManager.java
index 68c1fc7..c062b1f 100644
--- a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocationManager.java
+++ b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/location/VirtualLocationManager.java
@@ -28,17 +28,14 @@ public class VirtualLocationManager extends VirtualDeviceManager {
mVirtualDeviceProtocol = virtualDeviceProtocol;
mVirtualLocation = new VirtualLocation(context);
mVirtualLocation.registerLocationDataListener(new LocationDataListener());
- CASLog.i(TAG, "new");
}
@RequiresApi(api = Build.VERSION_CODES.P)
public void initLocation() {
- CASLog.i(TAG, "broadcast");
mVirtualLocation.requestLocationUpdates();
}
public void stop() {
- CASLog.i(TAG, "stop");
mVirtualLocation.closeLocationUpdates();
}
--
Gitee
From 4e451a46cdd7dcf96c2306100e8dbed81cf703a0 Mon Sep 17 00:00:00 2001
From: CaiFeng <2397707574@qq.com>
Date: Thu, 26 Oct 2023 20:41:46 +0800
Subject: [PATCH 7/7] support location
---
.../virtualdevice/sensor/VirtualSensor.java | 25 -------------------
.../sensor/VirtualSensorManager.java | 16 ------------
2 files changed, 41 deletions(-)
diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensor.java b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensor.java
index 9d18b72..9850e19 100644
--- a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensor.java
+++ b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensor.java
@@ -15,12 +15,6 @@
*/
package com.huawei.cloudphone.virtualdevice.sensor;
-import static com.huawei.cloudphone.virtualdevice.sensor.VirtualSensorManager.DEV_ACCELERATION;
-import static com.huawei.cloudphone.virtualdevice.sensor.VirtualSensorManager.DEV_GYROSCOPE;
-import static com.huawei.cloudphone.virtualdevice.sensor.VirtualSensorManager.DEV_MAGNETIC;
-import static com.huawei.cloudphone.virtualdevice.sensor.VirtualSensorManager.DEV_MAGNETIC_UNCALIBRATED;
-import static com.huawei.cloudphone.virtualdevice.sensor.VirtualSensorManager.DEV_ORIENTATION;
-
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
@@ -36,9 +30,6 @@ public class VirtualSensor implements SensorEventListener {
private SensorManager mSensorManager;
private Sensor mSensor;
private Sensor mAccelerationSensor;
- private Sensor mMagneticSensor;
- private Sensor mMagneticUncalibratedSensor;
- private Sensor mOrientationSensor;
private IVirtualDeviceDataListener mListener = null;
private HandlerThread mHandlerThread;
private boolean mIsStart = false;
@@ -47,9 +38,6 @@ public class VirtualSensor implements SensorEventListener {
mSensorManager = sensorManager;
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
mAccelerationSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
- mMagneticSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
- mMagneticUncalibratedSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED);
- mOrientationSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
}
void registerSensorDataListener(IVirtualDeviceDataListener listener) {
@@ -66,9 +54,6 @@ public class VirtualSensor implements SensorEventListener {
Handler handler = new Handler(mHandlerThread.getLooper());
mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_GAME, handler);
mSensorManager.registerListener(this, mAccelerationSensor, SensorManager.SENSOR_DELAY_GAME, handler);
- mSensorManager.registerListener(this, mMagneticSensor, SensorManager.SENSOR_DELAY_GAME, handler);
- mSensorManager.registerListener(this, mMagneticUncalibratedSensor, SensorManager.SENSOR_DELAY_GAME, handler);
- mSensorManager.registerListener(this, mOrientationSensor, SensorManager.SENSOR_DELAY_GAME, handler);
mIsStart = true;
}
@@ -79,10 +64,6 @@ public class VirtualSensor implements SensorEventListener {
}
mSensorManager.unregisterListener(this, mSensor);
mSensorManager.unregisterListener(this, mAccelerationSensor);
- mSensorManager.unregisterListener(this, mMagneticSensor);
- mSensorManager.unregisterListener(this, mMagneticUncalibratedSensor);
- mSensorManager.unregisterListener(this, mOrientationSensor);
-
try {
mHandlerThread.join();
} catch (InterruptedException e) {
@@ -104,12 +85,6 @@ public class VirtualSensor implements SensorEventListener {
mListener.onRecvData(x, y, z, sensorEvent.accuracy, 0);
} else if (type == Sensor.TYPE_GYROSCOPE) {
mListener.onRecvData(x, y, z, sensorEvent.accuracy, 1);
- } else if (type == Sensor.TYPE_MAGNETIC_FIELD) {
- mListener.onRecvData(x, y, z, sensorEvent.accuracy, 2);
- } else if (type == Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED) {
- mListener.onRecvData(x, y, z, sensorEvent.accuracy, 3);
- } else if (type == Sensor.TYPE_ORIENTATION) {
- mListener.onRecvData(x, y, z, sensorEvent.accuracy, 4);
}
}
diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensorManager.java b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensorManager.java
index 09a8a49..9e780bc 100644
--- a/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensorManager.java
+++ b/cloudphone/src/main/java/com/huawei/cloudphone/virtualdevice/sensor/VirtualSensorManager.java
@@ -31,10 +31,6 @@ public class VirtualSensorManager extends VirtualDeviceManager {
public static final short DEV_ACCELERATION = 0x0;
public static final short DEV_GYROSCOPE = 0x1;
- public static final short DEV_MAGNETIC = 0x2;
- public static final short DEV_MAGNETIC_UNCALIBRATED = 0x3;
- public static final short DEV_ORIENTATION = 0x4;
-
public static final short OPT_SENSOR_ENABLE_REQ = 0x1;
public static final short OPT_SENSOR_ENABLE_RSP = 0x1001;
public static final short OPT_SENSOR_DISABLE_REQ = 0x2;
@@ -71,12 +67,6 @@ public class VirtualSensorManager extends VirtualDeviceManager {
mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
header = new MsgHeader(OPT_SENSOR_ENABLE_REQ, DEV_TYPE_SENSOR, DEV_ACCELERATION, rspMsgLen);
mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
- header = new MsgHeader(OPT_SENSOR_ENABLE_REQ, DEV_TYPE_SENSOR, DEV_MAGNETIC, rspMsgLen);
- mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
- header = new MsgHeader(OPT_SENSOR_ENABLE_REQ, DEV_TYPE_SENSOR, DEV_MAGNETIC_UNCALIBRATED, rspMsgLen);
- mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
- header = new MsgHeader(OPT_SENSOR_ENABLE_REQ, DEV_TYPE_SENSOR, DEV_ORIENTATION, rspMsgLen);
- mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
}
public void stop() {
@@ -85,12 +75,6 @@ public class VirtualSensorManager extends VirtualDeviceManager {
mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
header = new MsgHeader(OPT_SENSOR_DISABLE_REQ, DEV_TYPE_SENSOR, DEV_ACCELERATION, rspMsgLen);
mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
- header = new MsgHeader(OPT_SENSOR_DISABLE_REQ, DEV_TYPE_SENSOR, DEV_MAGNETIC, rspMsgLen);
- mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
- header = new MsgHeader(OPT_SENSOR_DISABLE_REQ, DEV_TYPE_SENSOR, DEV_MAGNETIC_UNCALIBRATED, rspMsgLen);
- mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
- header = new MsgHeader(OPT_SENSOR_DISABLE_REQ, DEV_TYPE_SENSOR, DEV_ORIENTATION, rspMsgLen);
- mVirtualDeviceProtocol.sendMsg(header, null, SENSOR_DATA);
}
class SensorDataListener implements IVirtualDeviceDataListener {
--
Gitee