添加初步联合定位功能
This commit is contained in:
parent
96332c9986
commit
4fd636090e
@ -51,35 +51,52 @@ android {
|
|||||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
compileOptions {
|
|
||||||
sourceCompatibility JavaVersion.VERSION_1_8
|
|
||||||
targetCompatibility JavaVersion.VERSION_1_8
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
api fileTree(dir: 'libs', include: ['*.jar'])
|
||||||
|
|
||||||
// 定位服务
|
// 定位服务
|
||||||
implementation 'com.google.android.gms:play-services-location:20.0.0'
|
implementation 'com.google.android.gms:play-services-location:20.0.0'
|
||||||
|
// 腾讯地图
|
||||||
implementation 'androidx.recyclerview:recyclerview:1.1.0'
|
|
||||||
implementation 'androidx.appcompat:appcompat:1.1.0'
|
|
||||||
implementation 'androidx.viewpager:viewpager:1.0.0'
|
|
||||||
implementation 'androidx.fragment:fragment:1.0.0'
|
|
||||||
implementation 'com.google.android.material:material:1.4.0'
|
|
||||||
implementation 'pub.devrel:easypermissions:2.0.1'
|
|
||||||
// 地图
|
|
||||||
implementation 'com.tencent.map:tencent-map-vector-sdk:6.2.1.250120.3f971009.140342819'
|
implementation 'com.tencent.map:tencent-map-vector-sdk:6.2.1.250120.3f971009.140342819'
|
||||||
// 基础库
|
// 腾讯地图基础库
|
||||||
implementation 'com.tencent.openmap:foundation:0.5.6.9be4e02'
|
implementation 'com.tencent.openmap:foundation:0.5.6.9be4e02'
|
||||||
implementation 'com.tencent.map:sdk-utilities:1.0.9'
|
implementation 'com.tencent.map:sdk-utilities:1.0.9'
|
||||||
implementation 'com.tencent.map.geolocation:TencentLocationSdk-openplatform:7.5.4.3'
|
implementation 'com.tencent.map.geolocation:TencentLocationSdk-openplatform:7.5.4.3'
|
||||||
implementation 'com.google.code.gson:gson:2.8.5'
|
implementation 'com.google.code.gson:gson:2.8.5'
|
||||||
|
// 权限申请框架
|
||||||
|
implementation 'pub.devrel:easypermissions:2.0.1'
|
||||||
|
// 权限申请框架:https://github.com/getActivity/XXPermissions
|
||||||
|
implementation 'com.github.getActivity:XXPermissions:18.63'
|
||||||
|
// 下拉控件
|
||||||
|
implementation 'com.baoyz.pullrefreshlayout:library:1.2.0'
|
||||||
|
// 拼音搜索
|
||||||
|
// https://mvnrepository.com/artifact/com.github.open-android/pinyin4j
|
||||||
|
implementation 'com.github.open-android:pinyin4j:2.5.0'
|
||||||
|
// SSH
|
||||||
|
implementation 'com.jcraft:jsch:0.1.55'
|
||||||
|
// Html 解析
|
||||||
|
implementation 'org.jsoup:jsoup:1.13.1'
|
||||||
|
// 二维码类库
|
||||||
|
implementation 'com.google.zxing:core:3.4.1'
|
||||||
|
implementation 'com.journeyapps:zxing-android-embedded:3.6.0'
|
||||||
|
// 应用介绍页类库
|
||||||
implementation 'io.github.medyo:android-about-page:2.0.0'
|
implementation 'io.github.medyo:android-about-page:2.0.0'
|
||||||
|
// 吐司类库
|
||||||
implementation 'com.github.getActivity:ToastUtils:10.5'
|
implementation 'com.github.getActivity:ToastUtils:10.5'
|
||||||
|
// 网络连接类库
|
||||||
|
implementation 'com.squareup.okhttp3:okhttp:4.4.1'
|
||||||
|
|
||||||
implementation 'cc.winboll.studio:libapputils:9.3.2'
|
// Android 类库
|
||||||
implementation 'cc.winboll.studio:libappbase:1.5.6'
|
implementation 'androidx.appcompat:appcompat:1.1.0'
|
||||||
|
implementation 'androidx.viewpager:viewpager:1.0.0'
|
||||||
|
implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
|
||||||
|
implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0'
|
||||||
|
implementation 'androidx.fragment:fragment:1.1.0'
|
||||||
|
implementation 'com.google.android.material:material:1.4.0'
|
||||||
|
|
||||||
|
implementation 'cc.winboll.studio:libappbase:2.1.5'
|
||||||
|
implementation 'cc.winboll.studio:libapputils:9.4.4'
|
||||||
|
implementation 'cc.winboll.studio:libaes:7.6.12'
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#Created by .winboll/winboll_app_build.gradle
|
#Created by .winboll/winboll_app_build.gradle
|
||||||
#Sat Mar 01 03:07:55 GMT 2025
|
#Mon Mar 10 13:10:04 GMT 2025
|
||||||
stageCount=0
|
stageCount=0
|
||||||
libraryProject=
|
libraryProject=
|
||||||
baseVersion=1.0
|
baseVersion=1.0
|
||||||
publishVersion=1.0.0
|
publishVersion=1.0.0
|
||||||
buildCount=246
|
buildCount=252
|
||||||
baseBetaVersion=1.0.1
|
baseBetaVersion=1.0.1
|
||||||
|
@ -60,6 +60,7 @@
|
|||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity android:name=".MainSimpleActivity">
|
<activity android:name=".MainSimpleActivity">
|
||||||
|
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity android:name="com.tencent.map.vector.demo.DemoMainActivity">
|
<activity android:name="com.tencent.map.vector.demo.DemoMainActivity">
|
||||||
@ -735,6 +736,8 @@
|
|||||||
|
|
||||||
<activity android:name="cc.winboll.studio.positions.activities.TestMapViewActivity"/>
|
<activity android:name="cc.winboll.studio.positions.activities.TestMapViewActivity"/>
|
||||||
|
|
||||||
|
<activity android:name="cc.winboll.studio.positions.activities.JointPositioningActivity"/>
|
||||||
|
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
||||||
|
@ -6,7 +6,6 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Message;
|
|
||||||
import android.telecom.TelecomManager;
|
import android.telecom.TelecomManager;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
@ -29,6 +28,7 @@ import cc.winboll.studio.libapputils.app.WinBollActivityManager;
|
|||||||
import cc.winboll.studio.libapputils.bean.APPInfo;
|
import cc.winboll.studio.libapputils.bean.APPInfo;
|
||||||
import cc.winboll.studio.libapputils.view.YesNoAlertDialog;
|
import cc.winboll.studio.libapputils.view.YesNoAlertDialog;
|
||||||
import cc.winboll.studio.positions.R;
|
import cc.winboll.studio.positions.R;
|
||||||
|
import cc.winboll.studio.positions.activities.JointPositioningActivity;
|
||||||
import cc.winboll.studio.positions.activities.SettingsActivity;
|
import cc.winboll.studio.positions.activities.SettingsActivity;
|
||||||
import cc.winboll.studio.positions.beans.MainServiceBean;
|
import cc.winboll.studio.positions.beans.MainServiceBean;
|
||||||
import cc.winboll.studio.positions.fragments.LogFragment;
|
import cc.winboll.studio.positions.fragments.LogFragment;
|
||||||
@ -310,6 +310,10 @@ final public class MainActivity extends AbsActivity implements IWinBollActivity,
|
|||||||
Intent intent = new Intent(this, SettingsActivity.class);
|
Intent intent = new Intent(this, SettingsActivity.class);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
//WinBollActivityManager.getInstance(this).startWinBollActivity(this, CallActivity.class);
|
//WinBollActivityManager.getInstance(this).startWinBollActivity(this, CallActivity.class);
|
||||||
|
} else if (item.getItemId() == R.id.item_joint_positioning) {
|
||||||
|
Intent intent = new Intent(this, JointPositioningActivity.class);
|
||||||
|
startActivity(intent);
|
||||||
|
//WinBollActivityManager.getInstance(this).startWinBollActivity(this, CallActivity.class);
|
||||||
} else if (item.getItemId() == R.id.item_demomain) {
|
} else if (item.getItemId() == R.id.item_demomain) {
|
||||||
Intent intent = new Intent(this, com.tencent.map.vector.demo.DemoMainActivity.class);
|
Intent intent = new Intent(this, com.tencent.map.vector.demo.DemoMainActivity.class);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
|
@ -29,6 +29,7 @@ import cc.winboll.studio.libappbase.LogView;
|
|||||||
import cc.winboll.studio.positions.R;
|
import cc.winboll.studio.positions.R;
|
||||||
import cc.winboll.studio.positions.activities.SettingsActivity;
|
import cc.winboll.studio.positions.activities.SettingsActivity;
|
||||||
import cc.winboll.studio.positions.activities.TestMapViewActivity;
|
import cc.winboll.studio.positions.activities.TestMapViewActivity;
|
||||||
|
import cc.winboll.studio.positions.beans.PostionModel;
|
||||||
import cc.winboll.studio.positions.utils.LocationFileStorage;
|
import cc.winboll.studio.positions.utils.LocationFileStorage;
|
||||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
@ -52,7 +53,6 @@ import com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import pub.devrel.easypermissions.EasyPermissions;
|
import pub.devrel.easypermissions.EasyPermissions;
|
||||||
import cc.winboll.studio.positions.beans.PostionModel;
|
|
||||||
|
|
||||||
public class MainSimpleActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks,LocationSource, TencentLocationListener {
|
public class MainSimpleActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks,LocationSource, TencentLocationListener {
|
||||||
|
|
||||||
|
@ -6,13 +6,9 @@ package cc.winboll.studio.positions.activities;
|
|||||||
*/
|
*/
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.widget.Button;
|
|
||||||
import android.widget.FrameLayout;
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import cc.winboll.studio.positions.R;
|
import cc.winboll.studio.positions.R;
|
||||||
import cc.winboll.studio.positions.views.GridMapView;
|
import cc.winboll.studio.positions.views.GridMapView;
|
||||||
import android.view.View.OnClickListener;
|
|
||||||
import android.view.View;
|
|
||||||
|
|
||||||
public class GridMapActivity extends AppCompatActivity {
|
public class GridMapActivity extends AppCompatActivity {
|
||||||
|
|
||||||
|
@ -0,0 +1,129 @@
|
|||||||
|
package cc.winboll.studio.positions.activities;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author ZhanGSKen@AliYun.Com
|
||||||
|
* @Date 2025/03/10 19:56:49
|
||||||
|
* @Describe Main2Activity
|
||||||
|
*/
|
||||||
|
import android.Manifest;
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
import android.location.Location;
|
||||||
|
import android.location.LocationListener;
|
||||||
|
import android.location.LocationManager;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import androidx.core.app.ActivityCompat;
|
||||||
|
import cc.winboll.studio.positions.R;
|
||||||
|
|
||||||
|
public class JointPositioningActivity extends AppCompatActivity {
|
||||||
|
|
||||||
|
public static final String TAG = "JointPositioningActivity";
|
||||||
|
|
||||||
|
|
||||||
|
private LocationManager locationManager;
|
||||||
|
private TextView locationTextView;
|
||||||
|
|
||||||
|
@SuppressLint("MissingPermission")
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.activity_main2);
|
||||||
|
|
||||||
|
locationTextView = findViewById(R.id.location_text_view);
|
||||||
|
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
|
||||||
|
|
||||||
|
// 检查权限
|
||||||
|
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
|
||||||
|
ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
||||||
|
ActivityCompat.requestPermissions(this,
|
||||||
|
new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION},
|
||||||
|
1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 请求GPS定位
|
||||||
|
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, gpsLocationListener);
|
||||||
|
|
||||||
|
// 请求基站(网络)定位
|
||||||
|
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, networkLocationListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
private LocationListener gpsLocationListener = new LocationListener() {
|
||||||
|
@Override
|
||||||
|
public void onLocationChanged(Location location) {
|
||||||
|
// 处理GPS定位结果
|
||||||
|
updateLocation(location);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStatusChanged(String provider, int status, Bundle extras) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onProviderEnabled(String provider) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onProviderDisabled(String provider) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
private LocationListener networkLocationListener = new LocationListener() {
|
||||||
|
@Override
|
||||||
|
public void onLocationChanged(Location location) {
|
||||||
|
// 处理基站(网络)定位结果
|
||||||
|
updateLocation(location);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStatusChanged(String provider, int status, Bundle extras) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onProviderEnabled(String provider) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onProviderDisabled(String provider) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
private void updateLocation(Location location) {
|
||||||
|
if (location != null) {
|
||||||
|
double latitude = location.getLatitude();
|
||||||
|
double longitude = location.getLongitude();
|
||||||
|
|
||||||
|
// 简单的融合示例:这里只是显示最后获取到的位置,实际应用中需要更复杂的融合算法
|
||||||
|
locationTextView.setText("Latitude: " + latitude + ", Longitude: " + longitude);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
|
||||||
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||||
|
if (requestCode == 1) {
|
||||||
|
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||||
|
// 权限已授予,可以继续获取位置信息
|
||||||
|
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
|
||||||
|
ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, gpsLocationListener);
|
||||||
|
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, networkLocationListener);
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this, "权限被拒绝,无法获取位置信息", Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
if (locationManager != null) {
|
||||||
|
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
|
||||||
|
ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
locationManager.removeUpdates(gpsLocationListener);
|
||||||
|
locationManager.removeUpdates(networkLocationListener);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -16,12 +16,12 @@ import android.view.WindowManager;
|
|||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import androidx.appcompat.widget.Toolbar;
|
||||||
|
import cc.winboll.studio.libapputils.app.IWinBollActivity;
|
||||||
|
import cc.winboll.studio.libapputils.bean.APPInfo;
|
||||||
import cc.winboll.studio.positions.R;
|
import cc.winboll.studio.positions.R;
|
||||||
import com.hjq.toast.ToastUtils;
|
import com.hjq.toast.ToastUtils;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
|
||||||
import cc.winboll.studio.libappbase.IWinBollActivity;
|
|
||||||
import cc.winboll.studio.libappbase.bean.APPInfo;
|
|
||||||
|
|
||||||
public class SettingsActivity extends AppCompatActivity implements IWinBollActivity {
|
public class SettingsActivity extends AppCompatActivity implements IWinBollActivity {
|
||||||
|
|
||||||
|
@ -4,20 +4,11 @@ package cc.winboll.studio.positions.activities;
|
|||||||
* @Author ZhanGSKen@AliYun.Com
|
* @Author ZhanGSKen@AliYun.Com
|
||||||
* @Date 2025/02/24 12:14:04
|
* @Date 2025/02/24 12:14:04
|
||||||
*/
|
*/
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
|
||||||
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import android.view.View;
|
|
||||||
|
|
||||||
import cc.winboll.studio.positions.R;
|
import cc.winboll.studio.positions.R;
|
||||||
import com.tencent.map.vector.demo.heatoverlay.ScatterPlotOverlayActivity;
|
|
||||||
import com.tencent.tencentmap.mapsdk.maps.MapView;
|
|
||||||
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
|
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
|
||||||
import com.tencent.tencentmap.mapsdk.maps.TencentMapOptions;
|
|
||||||
import com.tencent.tencentmap.mapsdk.maps.TextureMapView;
|
import com.tencent.tencentmap.mapsdk.maps.TextureMapView;
|
||||||
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
|
|
||||||
|
|
||||||
public class TestMapViewActivity extends AppCompatActivity {
|
public class TestMapViewActivity extends AppCompatActivity {
|
||||||
|
|
||||||
|
@ -5,6 +5,11 @@ package cc.winboll.studio.positions.fragments;
|
|||||||
* @Date 2025/02/20 12:57:50
|
* @Date 2025/02/20 12:57:50
|
||||||
* @Describe 联系人
|
* @Describe 联系人
|
||||||
*/
|
*/
|
||||||
|
import android.Manifest;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
import android.location.Location;
|
||||||
|
import android.location.LocationListener;
|
||||||
|
import android.location.LocationManager;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
@ -12,11 +17,13 @@ import android.view.MenuInflater;
|
|||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.TextView;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.core.app.ActivityCompat;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import cc.winboll.studio.positions.R;
|
import cc.winboll.studio.positions.R;
|
||||||
import com.hjq.toast.ToastUtils;
|
import android.widget.Button;
|
||||||
|
|
||||||
public class PositionsFragment extends Fragment {
|
public class PositionsFragment extends Fragment {
|
||||||
|
|
||||||
@ -25,6 +32,12 @@ public class PositionsFragment extends Fragment {
|
|||||||
private static final String ARG_PAGE = "ARG_PAGE";
|
private static final String ARG_PAGE = "ARG_PAGE";
|
||||||
private int mPage;
|
private int mPage;
|
||||||
|
|
||||||
|
private LocationManager locationManager;
|
||||||
|
private TextView locationTextView;
|
||||||
|
double latitudeLock;
|
||||||
|
double longitudeLock;
|
||||||
|
|
||||||
|
|
||||||
// public static PositionsFragment newInstance(int page) {
|
// public static PositionsFragment newInstance(int page) {
|
||||||
// Bundle args = new Bundle();
|
// Bundle args = new Bundle();
|
||||||
// args.putInt(ARG_PAGE, page);
|
// args.putInt(ARG_PAGE, page);
|
||||||
@ -50,6 +63,23 @@ public class PositionsFragment extends Fragment {
|
|||||||
// Toolbar toolbar = viewMain.findViewById(R.id.toolbar);
|
// Toolbar toolbar = viewMain.findViewById(R.id.toolbar);
|
||||||
// getActivity().getMenuInflater().inflate(R.menu.toolbar_positions, toolbar.getMenu());
|
// getActivity().getMenuInflater().inflate(R.menu.toolbar_positions, toolbar.getMenu());
|
||||||
//
|
//
|
||||||
|
locationTextView = viewMain.findViewById(R.id.current_position_tv);
|
||||||
|
locationManager = (LocationManager) getActivity().getSystemService(getActivity().LOCATION_SERVICE);
|
||||||
|
|
||||||
|
Button btnLockingPosition = viewMain.findViewById(R.id.locking_position_btn);
|
||||||
|
btnLockingPosition.setOnClickListener(new View.OnClickListener(){
|
||||||
|
@Override
|
||||||
|
public void onClick(View p1) {
|
||||||
|
TXMSFragment.moveToLocation(latitudeLock, longitudeLock);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 请求GPS定位
|
||||||
|
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, gpsLocationListener);
|
||||||
|
|
||||||
|
// 请求基站(网络)定位
|
||||||
|
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, networkLocationListener);
|
||||||
|
|
||||||
return viewMain;
|
return viewMain;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,6 +89,20 @@ public class PositionsFragment extends Fragment {
|
|||||||
super.onCreateOptionsMenu(menu, inflater);
|
super.onCreateOptionsMenu(menu, inflater);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
if (locationManager != null) {
|
||||||
|
if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
|
||||||
|
ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
locationManager.removeUpdates(gpsLocationListener);
|
||||||
|
locationManager.removeUpdates(networkLocationListener);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
@ -72,4 +116,51 @@ public class PositionsFragment extends Fragment {
|
|||||||
// }
|
// }
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private LocationListener gpsLocationListener = new LocationListener() {
|
||||||
|
@Override
|
||||||
|
public void onLocationChanged(Location location) {
|
||||||
|
// 处理GPS定位结果
|
||||||
|
updateLocation(location);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStatusChanged(String provider, int status, Bundle extras) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onProviderEnabled(String provider) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onProviderDisabled(String provider) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
private LocationListener networkLocationListener = new LocationListener() {
|
||||||
|
@Override
|
||||||
|
public void onLocationChanged(Location location) {
|
||||||
|
// 处理基站(网络)定位结果
|
||||||
|
updateLocation(location);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStatusChanged(String provider, int status, Bundle extras) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onProviderEnabled(String provider) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onProviderDisabled(String provider) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
private void updateLocation(Location location) {
|
||||||
|
if (location != null) {
|
||||||
|
double latitude = location.getLatitude();
|
||||||
|
double longitude = location.getLongitude();
|
||||||
|
|
||||||
|
latitudeLock = latitude;
|
||||||
|
longitudeLock = longitude;
|
||||||
|
|
||||||
|
// 简单的融合示例:这里只是显示最后获取到的位置,实际应用中需要更复杂的融合算法
|
||||||
|
locationTextView.setText("Latitude: " + latitude + "\nLongitude: " + longitude);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -77,11 +77,13 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission
|
|||||||
private MyLocationStyle mMyLocationStyle;
|
private MyLocationStyle mMyLocationStyle;
|
||||||
ArrayList<PostionModel> locationPostionModelList;
|
ArrayList<PostionModel> locationPostionModelList;
|
||||||
Location lastLocation;
|
Location lastLocation;
|
||||||
|
static TXMSFragment _TXMSFragment;
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
|
||||||
@Nullable Bundle savedInstanceState) {
|
@Nullable Bundle savedInstanceState) {
|
||||||
|
_TXMSFragment = TXMSFragment.this;
|
||||||
View viewRoot = inflater.inflate(R.layout.fragment_txms, container, false);
|
View viewRoot = inflater.inflate(R.layout.fragment_txms, container, false);
|
||||||
locationPostionModelList = new ArrayList<PostionModel>();
|
locationPostionModelList = new ArrayList<PostionModel>();
|
||||||
|
|
||||||
@ -141,11 +143,11 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission
|
|||||||
//
|
//
|
||||||
// 本机 GPS 定位服务调用服务
|
// 本机 GPS 定位服务调用服务
|
||||||
//
|
//
|
||||||
LocationManager locationManager = (LocationManager) getActivity().getSystemService(getActivity().LOCATION_SERVICE);
|
// LocationManager locationManager = (LocationManager) getActivity().getSystemService(getActivity().LOCATION_SERVICE);
|
||||||
String provider = LocationManager.GPS_PROVIDER;
|
// String provider = LocationManager.GPS_PROVIDER;
|
||||||
Location location = locationManager.getLastKnownLocation(provider);
|
// Location location = locationManager.getLastKnownLocation(provider);
|
||||||
locationManager.requestLocationUpdates(provider, 2000, 10, locationListener);
|
// locationManager.requestLocationUpdates(provider, 2000, 10, locationListener);
|
||||||
moveToLocation(location);
|
// moveToLocation(location);
|
||||||
|
|
||||||
return viewRoot;
|
return viewRoot;
|
||||||
}
|
}
|
||||||
@ -208,6 +210,21 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 创建Location对象方法
|
||||||
|
private Location createLocationFromLatLng(double latitudeLock, double longitudeLock) {
|
||||||
|
Location location = new Location("Tencent_Map_Manual");
|
||||||
|
|
||||||
|
// 设置基础坐标
|
||||||
|
location.setLatitude(latitudeLock);
|
||||||
|
location.setLongitude(longitudeLock);
|
||||||
|
|
||||||
|
// 设置必要元数据
|
||||||
|
location.setTime(System.currentTimeMillis());
|
||||||
|
location.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
|
||||||
|
location.setAccuracy(5.0f); // 手动点击精度设为5米
|
||||||
|
|
||||||
|
return location;
|
||||||
|
}
|
||||||
|
|
||||||
// 创建Location对象方法
|
// 创建Location对象方法
|
||||||
private Location createLocationFromLatLng(LatLng latLng) {
|
private Location createLocationFromLatLng(LatLng latLng) {
|
||||||
@ -328,6 +345,13 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission
|
|||||||
return bitmap;
|
return bitmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void moveToLocation(double latitudeLock, double longitudeLock) {
|
||||||
|
if (_TXMSFragment != null) {
|
||||||
|
Location location = _TXMSFragment.createLocationFromLatLng(latitudeLock, longitudeLock);
|
||||||
|
_TXMSFragment.moveToLocation(location);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void moveToLocation(Location location) {
|
private void moveToLocation(Location location) {
|
||||||
ToastUtils.show(String.format("%s", location.toString()));
|
ToastUtils.show(String.format("%s", location.toString()));
|
||||||
|
|
||||||
|
@ -12,11 +12,9 @@ import android.content.Intent;
|
|||||||
import android.content.ServiceConnection;
|
import android.content.ServiceConnection;
|
||||||
import android.os.Binder;
|
import android.os.Binder;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
import cc.winboll.studio.positions.beans.MainServiceBean;
|
import cc.winboll.studio.positions.beans.MainServiceBean;
|
||||||
import cc.winboll.studio.positions.services.MainService;
|
import cc.winboll.studio.positions.services.MainService;
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
|
||||||
import cc.winboll.studio.libappbase.SOS;
|
|
||||||
import cc.winboll.studio.libappbase.bean.APPSOSBean;
|
|
||||||
|
|
||||||
public class AssistantService extends Service {
|
public class AssistantService extends Service {
|
||||||
|
|
||||||
|
@ -18,8 +18,9 @@ import android.content.ServiceConnection;
|
|||||||
import android.os.Binder;
|
import android.os.Binder;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
import cc.winboll.studio.libappbase.SOS;
|
import cc.winboll.studio.libappbase.sos.SOS;
|
||||||
import cc.winboll.studio.libappbase.bean.APPSOSBean;
|
import cc.winboll.studio.libappbase.sos.WinBoll;
|
||||||
|
import cc.winboll.studio.positions.App;
|
||||||
import cc.winboll.studio.positions.beans.MainServiceBean;
|
import cc.winboll.studio.positions.beans.MainServiceBean;
|
||||||
import cc.winboll.studio.positions.handlers.MainServiceHandler;
|
import cc.winboll.studio.positions.handlers.MainServiceHandler;
|
||||||
import cc.winboll.studio.positions.receivers.MainReceiver;
|
import cc.winboll.studio.positions.receivers.MainReceiver;
|
||||||
@ -89,7 +90,11 @@ public class MainService extends Service {
|
|||||||
// 唤醒守护进程
|
// 唤醒守护进程
|
||||||
wakeupAndBindAssistant();
|
wakeupAndBindAssistant();
|
||||||
// 召唤 WinBoll APP 绑定本服务
|
// 召唤 WinBoll APP 绑定本服务
|
||||||
SOS.bindToAPPService(this, new APPSOSBean(getPackageName(), MainService.class.getName()));
|
if (App.isDebuging()) {
|
||||||
|
WinBoll.bindToAPPBaseBeta(this, MainService.class.getName());
|
||||||
|
} else {
|
||||||
|
WinBoll.bindToAPPBase(this, MainService.class.getName());
|
||||||
|
}
|
||||||
|
|
||||||
if (mMainReceiver == null) {
|
if (mMainReceiver == null) {
|
||||||
// 注册广播接收器
|
// 注册广播接收器
|
||||||
@ -172,7 +177,11 @@ public class MainService extends Service {
|
|||||||
if (mMainServiceBean.isEnable()) {
|
if (mMainServiceBean.isEnable()) {
|
||||||
// 唤醒守护进程
|
// 唤醒守护进程
|
||||||
wakeupAndBindAssistant();
|
wakeupAndBindAssistant();
|
||||||
SOS.sosWinBollService(getApplicationContext(), new APPSOSBean(getPackageName(), MainService.class.getName()));
|
if (App.isDebuging()) {
|
||||||
|
SOS.sosToAppBaseBeta(MainService.this, MainService.class.getName());
|
||||||
|
} else {
|
||||||
|
SOS.sosToAppBase(MainService.this, MainService.class.getName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
isBound = false;
|
isBound = false;
|
||||||
mAssistantService = null;
|
mAssistantService = null;
|
||||||
|
@ -5,12 +5,8 @@ package cc.winboll.studio.positions.threads;
|
|||||||
* @Date 2025/02/14 03:46:44
|
* @Date 2025/02/14 03:46:44
|
||||||
*/
|
*/
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import cc.winboll.studio.positions.handlers.MainServiceHandler;
|
|
||||||
import cc.winboll.studio.positions.services.MainService;
|
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
import cc.winboll.studio.libappbase.SOS;
|
import cc.winboll.studio.positions.handlers.MainServiceHandler;
|
||||||
import cc.winboll.studio.libappbase.bean.APPSOSBean;
|
|
||||||
import com.hjq.toast.ToastUtils;
|
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
|
|
||||||
public class MainServiceThread extends Thread {
|
public class MainServiceThread extends Thread {
|
||||||
|
17
positions/src/main/res/layout/activity_main2.xml
Normal file
17
positions/src/main/res/layout/activity_main2.xml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="#FFCAFECC">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Text"
|
||||||
|
android:id="@+id/location_text_view"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
@ -6,9 +6,26 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="fragment_positions"
|
||||||
|
android:layout_weight="1.0"
|
||||||
|
android:id="@+id/current_position_tv"/>
|
||||||
|
|
||||||
|
<Button
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="fragment_positions"/>
|
android:text="定位"
|
||||||
|
android:id="@+id/locking_position_btn"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
<item
|
<item
|
||||||
android:id="@+id/item_testmapview"
|
android:id="@+id/item_testmapview"
|
||||||
android:title="TestMapViewActivity"/>
|
android:title="TestMapViewActivity"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/item_joint_positioning"
|
||||||
|
android:title="JointPositioningActivity"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/item_demomain"
|
android:id="@+id/item_demomain"
|
||||||
android:title="DemoMainActivity"/>
|
android:title="DemoMainActivity"/>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user