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