From e0e001c417cb6245195ec1216e88a241e33b3e11 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Fri, 28 Feb 2025 10:43:35 +0800 Subject: [PATCH 01/35] =?UTF-8?q?=E5=BA=94=E7=94=A8=E5=B8=83=E5=B1=80?= =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E8=AE=BE=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- positions/build.gradle | 3 +- positions/build.properties | 4 +- positions/src/main/AndroidManifest.xml | 5 +- .../{Main2Activity.java => MainActivity.java} | 230 ++++++++---------- ...PagerAdapter.java => MyPagerAdapter2.java} | 25 +- .../positions/fragments/GmsFragment.java | 111 --------- ...tsFragment.java => PositionsFragment.java} | 16 +- .../positions/fragments/TXMSFragment.java | 75 +++--- .../positions/fragments/TasksFragment.java | 59 +++++ .../{activity_main2.xml => activity_main.xml} | 10 +- .../src/main/res/layout/fragment_log.xml | 10 +- ...nt_contacts.xml => fragment_positions.xml} | 8 +- .../{fragment_gms.xml => fragment_tasks.xml} | 13 +- .../src/main/res/layout/fragment_txms.xml | 21 +- .../src/main/res/menu/toolbar_positions.xml | 10 + positions/src/main/res/menu/toolbar_tasks.xml | 10 + 16 files changed, 273 insertions(+), 337 deletions(-) rename positions/src/main/java/cc/winboll/studio/positions/{Main2Activity.java => MainActivity.java} (64%) rename positions/src/main/java/cc/winboll/studio/positions/adapters/{MyPagerAdapter.java => MyPagerAdapter2.java} (52%) delete mode 100644 positions/src/main/java/cc/winboll/studio/positions/fragments/GmsFragment.java rename positions/src/main/java/cc/winboll/studio/positions/fragments/{ContactsFragment.java => PositionsFragment.java} (69%) create mode 100644 positions/src/main/java/cc/winboll/studio/positions/fragments/TasksFragment.java rename positions/src/main/res/layout/{activity_main2.xml => activity_main.xml} (75%) rename positions/src/main/res/layout/{fragment_contacts.xml => fragment_positions.xml} (66%) rename positions/src/main/res/layout/{fragment_gms.xml => fragment_tasks.xml} (50%) create mode 100644 positions/src/main/res/menu/toolbar_positions.xml create mode 100644 positions/src/main/res/menu/toolbar_tasks.xml diff --git a/positions/build.gradle b/positions/build.gradle index 62567e9..be04383 100644 --- a/positions/build.gradle +++ b/positions/build.gradle @@ -58,10 +58,11 @@ android { } dependencies { + implementation fileTree(include: ['*.jar'], dir: 'libs') + // 定位服务 implementation 'com.google.android.gms:play-services-location:20.0.0' - implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.recyclerview:recyclerview:1.1.0' implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.viewpager:viewpager:1.0.0' diff --git a/positions/build.properties b/positions/build.properties index 311254f..ae32d21 100644 --- a/positions/build.properties +++ b/positions/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue Feb 25 05:04:52 GMT 2025 +#Fri Feb 28 02:42:20 GMT 2025 stageCount=0 libraryProject= baseVersion=1.0 publishVersion=1.0.0 -buildCount=184 +buildCount=197 baseBetaVersion=1.0.1 diff --git a/positions/src/main/AndroidManifest.xml b/positions/src/main/AndroidManifest.xml index 7bf84d9..3e34983 100644 --- a/positions/src/main/AndroidManifest.xml +++ b/positions/src/main/AndroidManifest.xml @@ -47,7 +47,7 @@ tools:ignore="AllowBackup,GoogleAppIndexingWarning" tools:targetApi="q"> - + @@ -59,8 +59,7 @@ - - + diff --git a/positions/src/main/java/cc/winboll/studio/positions/Main2Activity.java b/positions/src/main/java/cc/winboll/studio/positions/MainActivity.java similarity index 64% rename from positions/src/main/java/cc/winboll/studio/positions/Main2Activity.java rename to positions/src/main/java/cc/winboll/studio/positions/MainActivity.java index fbecf27..0958231 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/Main2Activity.java +++ b/positions/src/main/java/cc/winboll/studio/positions/MainActivity.java @@ -7,7 +7,6 @@ import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.telecom.TelecomManager; -import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -17,6 +16,10 @@ import android.widget.LinearLayout; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; +import androidx.fragment.app.FragmentTransaction; import androidx.viewpager.widget.ViewPager; import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.LogView; @@ -25,18 +28,18 @@ import cc.winboll.studio.libapputils.app.WinBollActivityManager; import cc.winboll.studio.libapputils.bean.APPInfo; import cc.winboll.studio.libapputils.view.YesNoAlertDialog; import cc.winboll.studio.positions.R; -import com.tencent.map.vector.demo.DemoMainActivity; import cc.winboll.studio.positions.activities.SettingsActivity; -import cc.winboll.studio.positions.adapters.MyPagerAdapter; import cc.winboll.studio.positions.beans.MainServiceBean; -import cc.winboll.studio.positions.services.MainService; +import cc.winboll.studio.positions.fragments.LogFragment; +import cc.winboll.studio.positions.fragments.PositionsFragment; +import cc.winboll.studio.positions.fragments.TXMSFragment; +import cc.winboll.studio.positions.fragments.TasksFragment; import com.google.android.material.tabs.TabLayout; +import com.tencent.map.vector.demo.AbsActivity; import java.util.ArrayList; import java.util.List; -import com.tencent.map.vector.demo.AbsListActivity; -import com.tencent.map.vector.demo.AbsActivity; -final public class MainSimpleActivity extends AbsActivity implements IWinBollActivity, ViewPager.OnPageChangeListener, View.OnClickListener { +final public class MainActivity extends AbsActivity implements IWinBollActivity, ViewPager.OnPageChangeListener, View.OnClickListener { public static final String TAG = "MainActivity"; @@ -46,10 +49,11 @@ final public class MainSimpleActivity extends AbsActivity implements IWinBollAct public static final String ACTION_SOS = "cc.winboll.studio.libappbase.WinBoll.ACTION_SOS"; LogView mLogView; - Toolbar mToolbar; + //Toolbar mToolbar; CheckBox cbMainService; MainServiceBean mMainServiceBean; - ViewPager viewPager; + private TabLayout tabLayout; + private ViewPager viewPager; private List views; //用来存放放进ViewPager里面的布局 //实例化存储imageView(导航原点)的集合 ImageView[] imageViews; @@ -67,19 +71,19 @@ final public class MainSimpleActivity extends AbsActivity implements IWinBollAct @Override public APPInfo getAppInfo() { -// String szBranchName = "contacts"; +// String szBranchName = "positions"; // // APPInfo appInfo = AboutActivityFactory.buildDefaultAPPInfo(); -// appInfo.setAppName("Contacts"); +// appInfo.setAppName("Positions"); // appInfo.setAppIcon(cc.winboll.studio.libapputils.R.drawable.ic_winboll); -// appInfo.setAppDescription("Contacts Description"); +// appInfo.setAppDescription("Positions Description"); // appInfo.setAppGitName("APP"); // appInfo.setAppGitOwner("Studio"); // appInfo.setAppGitAPPBranch(szBranchName); // appInfo.setAppGitAPPSubProjectFolder(szBranchName); -// appInfo.setAppHomePage("https://www.winboll.cc/studio/details.php?app=Contacts"); -// appInfo.setAppAPKName("Contacts"); -// appInfo.setAppAPKFolderName("Contacts"); +// appInfo.setAppHomePage("https://www.winboll.cc/studio/details.php?app=Positions"); +// appInfo.setAppAPKName("Positions"); +// appInfo.setAppAPKFolderName("Positions"); // return appInfo; return null; } @@ -92,72 +96,97 @@ final public class MainSimpleActivity extends AbsActivity implements IWinBollAct super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - // 初始化工具栏 - mToolbar = findViewById(R.id.activitymainToolbar1); - setSupportActionBar(mToolbar); - if (isEnableDisplayHomeAsUp()) { - // 显示后退按钮 - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - } - getSupportActionBar().setSubtitle(getTag()); - - initData(); - initView(); - //initPoint();//调用初始化导航原点的方法 - viewPager.addOnPageChangeListener(this);//滑动事件 - - ViewPager viewPager = findViewById(R.id.activitymainViewPager1); - MyPagerAdapter pagerAdapter = new MyPagerAdapter(getSupportFragmentManager()); - viewPager.setAdapter(pagerAdapter); - TabLayout tabLayout = findViewById(R.id.activitymainTabLayout1); - tabLayout.setupWithViewPager(viewPager); - -// mMainServiceBean = MainServiceBean.loadBean(this, MainServiceBean.class); -// if (mMainServiceBean == null) { -// mMainServiceBean = new MainServiceBean(); +// // 初始化工具栏 +// mToolbar = findViewById(R.id.toolbar); +// setSupportActionBar(mToolbar); +// if (isEnableDisplayHomeAsUp()) { +// // 显示后退按钮 +// getSupportActionBar().setDisplayHomeAsUpEnabled(true); // } -// cbMainService = findViewById(R.id.activitymainCheckBox1); -// cbMainService.setChecked(mMainServiceBean.isEnable()); -// cbMainService.setOnClickListener(new View.OnClickListener(){ -// @Override -// public void onClick(View view) { -// if (cbMainService.isChecked()) { -// MainService.startMainService(MainActivity.this); -// } else { -// MainService.stopMainService(MainActivity.this); -// } -// } -// }); - MainService.startMainService(Main2Activity.this); - } +// getSupportActionBar().setSubtitle(getTag()); + // 初始化地图视图 + // 创建Fragment实例 + TXMSFragment myFragment = TXMSFragment.newInstance(0); + // 获取FragmentTransaction + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + // 将Fragment添加到FrameLayout容器中 + transaction.add(R.id.frameLayout, myFragment); + transaction.commit(); + + tabLayout = findViewById(R.id.tabLayout); + viewPager = findViewById(R.id.viewPager); + + // 创建Fragment列表和标题列表 + List fragmentList = new ArrayList<>(); + List tabTitleList = new ArrayList<>(); + fragmentList.add(PositionsFragment.newInstance(0)); + fragmentList.add(TasksFragment.newInstance(1)); + fragmentList.add(LogFragment.newInstance(2)); + tabTitleList.add("位置"); + tabTitleList.add("任务"); + tabTitleList.add("日志"); + + // 设置ViewPager的适配器 + MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager(), fragmentList, tabTitleList); + viewPager.setAdapter(adapter); + + // 关联TabLayout和ViewPager + tabLayout.setupWithViewPager(viewPager); + } + + + // ViewPager的适配器 + private class MyPagerAdapter extends FragmentPagerAdapter { + + private List fragmentList; + private List tabTitleList; + + public MyPagerAdapter(FragmentManager fm, List fragmentList, List tabTitleList) { + super(fm); + this.fragmentList = fragmentList; + this.tabTitleList = tabTitleList; + } + + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return tabTitleList.get(position); + } + } //初始化view,即显示的图片 - void initView() { - viewPager = findViewById(R.id.activitymainViewPager1); - pagerAdapter = new MyPagerAdapter(getSupportFragmentManager()); - viewPager.setAdapter(pagerAdapter); - //adapter = new MyPagerAdapter(views); - //viewPager = findViewById(R.id.activitymainViewPager1); - //viewPager.setAdapter(adapter); - //linearLayout = findViewById(R.id.activitymainLinearLayout1); - //initPoint();//初始化页面下方的点 - viewPager.setOnPageChangeListener(this); - - } +// void initViewPager() { +// pagerAdapter = new MyPagerAdapter(getSupportFragmentManager()); +// mViewPager.setAdapter(pagerAdapter); +// //adapter = new MyPagerAdapter(views); +// //viewPager = findViewById(R.id.activitymainViewPager1); +// //viewPager.setAdapter(adapter); +// //linearLayout = findViewById(R.id.activitymainLinearLayout1); +// //initPoint();//初始化页面下方的点 +// mViewPager.setOnPageChangeListener(this); +// } //初始化所要显示的布局 - void initData() { - ViewPager viewPager = findViewById(R.id.activitymainViewPager1); - LayoutInflater inflater = LayoutInflater.from(getActivity()); - View view1 = inflater.inflate(R.layout.fragment_gms, viewPager, false); - View view2 = inflater.inflate(R.layout.fragment_contacts, viewPager, false); - View view3 = inflater.inflate(R.layout.fragment_log, viewPager, false); - - views = new ArrayList<>(); - views.add(view1); - views.add(view2); - views.add(view3); - } +// void initLayoutData() { +// LayoutInflater inflater = LayoutInflater.from(getActivity()); +// View view1 = inflater.inflate(R.layout.fragment_gms, mViewPager, false); +// View view2 = inflater.inflate(R.layout.fragment_contacts, mViewPager, false); +// View view3 = inflater.inflate(R.layout.fragment_log, mViewPager, false); +// +// views = new ArrayList<>(); +// views.add(view1); +// views.add(view2); +// views.add(view3); +// } // void initPoint() { // imageViews = new ImageView[5];//实例化5个图片 @@ -225,51 +254,6 @@ final public class MainSimpleActivity extends AbsActivity implements IWinBollAct LogUtils.d(TAG, "onDestroy() SOS"); } - - - // - // 处理传入的 Intent 数据 - // -// boolean prosessIntents(Intent intent) { -// if (intent == null -// || intent.getAction() == null -// || intent.getAction().equals("")) -// return false; -// -// if (intent.getAction().equals(StringToQrCodeView.ACTION_UNITTEST_QRCODE)) { -// try { -// WinBollActivity clazzActivity = UnitTestActivity.class.newInstance(); -// String tag = clazzActivity.getTag(); -// LogUtils.d(TAG, "String tag = clazzActivity.getTag(); tag " + tag); -// Intent subIntent = new Intent(this, UnitTestActivity.class); -// subIntent.setAction(intent.getAction()); -// File file = new File(getCacheDir(), UUID.randomUUID().toString()); -// //取出文件uri -// Uri uri = intent.getData(); -// if (uri == null) { -// uri = intent.getParcelableExtra(Intent.EXTRA_STREAM); -// } -// //获取文件真实地址 -// String szSrcPath = UriUtils.getFileFromUri(getApplication(), uri); -// if (TextUtils.isEmpty(szSrcPath)) { -// return false; -// } -// -// Files.copy(Paths.get(szSrcPath), Paths.get(file.getPath())); -// //startWinBollActivity(subIntent, tag); -// WinBollActivityManager.getInstance(this).startWinBollActivity(this, subIntent, UnitTestActivity.class); -// } catch (IllegalAccessException | InstantiationException | IOException e) { -// LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); -// // 函数处理异常返回失败 -// return false; -// } -// } else { -// LogUtils.d(TAG, "prosessIntents|" + intent.getAction() + "|yet"); -// return false; -// } -// return true; -// } - @Override public String getTag() { return TAG; @@ -277,7 +261,7 @@ final public class MainSimpleActivity extends AbsActivity implements IWinBollAct @Override public Toolbar initToolBar() { - return findViewById(R.id.activitymainToolbar1); + return findViewById(R.id.toolbar); } @Override @@ -386,7 +370,7 @@ final public class MainSimpleActivity extends AbsActivity implements IWinBollAct // } if (requestCode == DIALER_REQUEST_CODE) { if (resultCode == Activity.RESULT_OK) { - Toast.makeText(Main2Activity.this, getString(R.string.app_name) + " 已成为默认电话应用", + Toast.makeText(MainActivity.this, getString(R.string.app_name) + " 已成为默认电话应用", Toast.LENGTH_SHORT).show(); } } diff --git a/positions/src/main/java/cc/winboll/studio/positions/adapters/MyPagerAdapter.java b/positions/src/main/java/cc/winboll/studio/positions/adapters/MyPagerAdapter2.java similarity index 52% rename from positions/src/main/java/cc/winboll/studio/positions/adapters/MyPagerAdapter.java rename to positions/src/main/java/cc/winboll/studio/positions/adapters/MyPagerAdapter2.java index e550d46..d523d13 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/adapters/MyPagerAdapter.java +++ b/positions/src/main/java/cc/winboll/studio/positions/adapters/MyPagerAdapter2.java @@ -9,29 +9,30 @@ import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentPagerAdapter; -import cc.winboll.studio.positions.fragments.GmsFragment; -import cc.winboll.studio.positions.fragments.ContactsFragment; +import cc.winboll.studio.positions.fragments.TasksFragment; +import cc.winboll.studio.positions.fragments.PositionsFragment; import cc.winboll.studio.positions.fragments.LogFragment; -public class MyPagerAdapter extends FragmentPagerAdapter { - public static final String TAG = "MyPagerAdapter"; +public class MyPagerAdapter2 extends FragmentPagerAdapter { + public static final String TAG = "MyPagerAdapter2"; private static final int PAGE_COUNT = 3; - public MyPagerAdapter(@NonNull FragmentManager fm) { + public MyPagerAdapter2(@NonNull FragmentManager fm) { super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); } @NonNull @Override public Fragment getItem(int position) { - if(position == 1) { - return ContactsFragment.newInstance(position); - } else if(position == 2) { - return LogFragment.newInstance(position); - } else { - return GmsFragment.newInstance(position); - } +// if(position == 0) { +// return PositionsFragment.newInstance(position); +// } else if(position == 1) { +// return TasksFragment.newInstance(position); +// } else { +// return LogFragment.newInstance(position); +// } + return null; } @Override diff --git a/positions/src/main/java/cc/winboll/studio/positions/fragments/GmsFragment.java b/positions/src/main/java/cc/winboll/studio/positions/fragments/GmsFragment.java deleted file mode 100644 index a1157e6..0000000 --- a/positions/src/main/java/cc/winboll/studio/positions/fragments/GmsFragment.java +++ /dev/null @@ -1,111 +0,0 @@ -package cc.winboll.studio.positions.fragments; - -/** - * @Author ZhanGSKen@AliYun.Com - * @Date 2025/02/20 12:57:00 - * @Describe 拨号 - */ -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import androidx.fragment.app.Fragment; -import cc.winboll.studio.positions.R; -import cc.winboll.studio.libappbase.LogView; -import androidx.annotation.Nullable; -import androidx.annotation.NonNull; -import android.graphics.Color; -import android.widget.TextView; -import cc.winboll.studio.positions.views.GridMapView; -import com.tencent.tencentmap.mapsdk.maps.MapView; -import com.tencent.tencentmap.mapsdk.maps.TencentMap; -import com.tencent.tencentmap.mapsdk.maps.TextureMapView; - -public class GmsFragment extends Fragment { - - public static final String TAG = "GmsFragment"; - - private static final String ARG_PAGE = "ARG_PAGE"; - private int mPage; - private TextureMapView mapView; - protected TencentMap tencentMap; - - public static GmsFragment newInstance(int page) { - Bundle args = new Bundle(); - args.putInt(ARG_PAGE, page); - GmsFragment fragment = new GmsFragment(); - fragment.setArguments(args); - return fragment; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (getArguments()!= null) { - mPage = getArguments().getInt(ARG_PAGE); - } - } - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_gms, container, false); - -// // 初始化视图 -// GridMapView mapView = (GridMapView) view.findViewById(R.id.map_view); -// -// // 设置网格参数 -// mapView.setGridParameters(10000f, 10000f, 10f); -// -// // 初始化显示区域(中心点400,300,显示范围2000x200) -// mapView.initViewport(5000f, 5000f, 1000f, 1000f); -// -// // 绘制图形 -// mapView.drawPoint(5000f, 5000f, Color.RED, 8f); -// mapView.drawCircle(5000f, 5000f, 50f, Color.BLUE, 8f); -// mapView.drawLine(4975f, 4975f, 5025f, 5025f, Color.GREEN, 2f); - - // 初始化地图视图 - mapView = view.findViewById(R.id.mapView); - mapView.setOpaque(false); - //创建tencentMap地图对象,可以完成对地图的几乎所有操作 - tencentMap = mapView.getMap(); - - return view; - } - - - /** - * mapview的生命周期管理 - */ - @Override - public void onStart() { - super.onStart(); - mapView.onStart(); - } - - @Override - public void onResume() { - super.onResume(); - mapView.onResume(); - } - - @Override - public void onPause() { - super.onPause(); - mapView.onPause(); - } - - @Override - public void onStop() { - super.onStop(); - mapView.onStop(); - } - - @Override - public void onDestroy() { - super.onDestroy(); - mapView.onDestroy(); - } -} diff --git a/positions/src/main/java/cc/winboll/studio/positions/fragments/ContactsFragment.java b/positions/src/main/java/cc/winboll/studio/positions/fragments/PositionsFragment.java similarity index 69% rename from positions/src/main/java/cc/winboll/studio/positions/fragments/ContactsFragment.java rename to positions/src/main/java/cc/winboll/studio/positions/fragments/PositionsFragment.java index 16b3880..75cfea5 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/fragments/ContactsFragment.java +++ b/positions/src/main/java/cc/winboll/studio/positions/fragments/PositionsFragment.java @@ -14,18 +14,19 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import cc.winboll.studio.positions.R; +import androidx.appcompat.widget.Toolbar; -public class ContactsFragment extends Fragment { +public class PositionsFragment extends Fragment { public static final String TAG = "ContactsFragment"; private static final String ARG_PAGE = "ARG_PAGE"; private int mPage; - public static ContactsFragment newInstance(int page) { + public static PositionsFragment newInstance(int page) { Bundle args = new Bundle(); args.putInt(ARG_PAGE, page); - ContactsFragment fragment = new ContactsFragment(); + PositionsFragment fragment = new PositionsFragment(); fragment.setArguments(args); return fragment; } @@ -42,9 +43,10 @@ public class ContactsFragment extends Fragment { @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_contacts, container, false); - TextView textView = view.findViewById(R.id.page_text); - textView.setText("这是第 " + mPage + " 页"); - return view; + View viewMain = inflater.inflate(R.layout.fragment_positions, container, false); + Toolbar toolbar = viewMain.findViewById(R.id.toolbar); + getActivity().getMenuInflater().inflate(R.menu.toolbar_positions, toolbar.getMenu()); + + return viewMain; } } diff --git a/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java b/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java index 38b65d5..7c12cdc 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java +++ b/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java @@ -71,10 +71,11 @@ import com.tencent.tencentmap.mapsdk.maps.TencentMap; import com.tencent.tencentmap.mapsdk.maps.TextureMapView; public class TXMSFragment extends Fragment implements EasyPermissions.PermissionCallbacks,LocationSource, TencentLocationListener { - + public static final String TAG = "TXMSFragment"; - - + + private static final int PERMISSION_REQUEST_CODE = 1; + private static final String ARG_PAGE = "ARG_PAGE"; private int mPage; private TextureMapView mapView; @@ -90,7 +91,7 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission public static TXMSFragment newInstance(int page) { Bundle args = new Bundle(); args.putInt(ARG_PAGE, page); - TXMSFragment fragment = new GmsFragment(); + TXMSFragment fragment = new TXMSFragment(); fragment.setArguments(args); return fragment; } @@ -98,7 +99,7 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (getArguments()!= null) { + if (getArguments() != null) { mPage = getArguments().getInt(ARG_PAGE); } } @@ -107,14 +108,11 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - View viewRoot = inflater.inflate(R.layout.fragment_gms, container, false); + View viewRoot = inflater.inflate(R.layout.fragment_txms, container, false); locationJsonList = new ArrayList(); - mLogView = viewRoot.findViewById(R.id.logview); - mLogView.start(); - - TencentMapInitializer.setAgreePrivacy(this, true); - TencentMapInitializer.start(this); + TencentMapInitializer.setAgreePrivacy(getActivity(), true); + TencentMapInitializer.start(getActivity()); TencentLocationManager.setUserAgreePrivacy(true); @@ -123,13 +121,13 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission //创建tencentMap地图对象,可以完成对地图的几乎所有操作 tencentMap = mapView.getMap(); - FloatingActionButton fab = viewRoot.findViewById(R.id.fab); - fab.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Snackbar.make(view, "点击了悬浮按钮", Snackbar.LENGTH_LONG).show(); - } - }); +// FloatingActionButton fab = viewRoot.findViewById(R.id.fab); +// fab.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View view) { +// Snackbar.make(view, "点击了悬浮按钮", Snackbar.LENGTH_LONG).show(); +// } +// }); mtvInfo = viewRoot.findViewById(R.id.tv_info); @@ -169,10 +167,11 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission } }); + loadLocations(); return viewRoot; } - + void loadLocations() { // 存储位置数据 // Location location = new Location("gps"); @@ -186,7 +185,7 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission // LocationFileStorage.saveToFile(this, locations); // 读取数据 - locationJsonList = LocationFileStorage.loadFromFile(this); + locationJsonList = LocationFileStorage.loadFromFile(getActivity()); for (LocationJson lj : locationJsonList) { tencentMap.addMarker(new MarkerOptions(toTencentLatLng(lj.toLocation()))); @@ -204,7 +203,7 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission // 方式1:保存到文件 //List locations = new ArrayList<>(); locationJsonList.add(new LocationJson(location)); - LocationFileStorage.saveToFile(this, locationJsonList); + LocationFileStorage.saveToFile(getActivity(), locationJsonList); // 读取数据 // List loaded = LocationFileStorage.loadFromFile(this); @@ -282,18 +281,6 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission super.onDestroy(); mapView.onDestroy(); } - - - @Override - protected void onPostCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); -// LatLng center = new LatLng(39.904556, 116.427242); -// tencentMap.moveCamera( -// CameraUpdateFactory.newLatLngZoom(center, 13f) // 注意 13 → 13f -// ); - loadLocations(); - } - /** * 设置定位图标样式 @@ -334,7 +321,7 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission */ private void initLocation() { //用于访问腾讯定位服务的类, 周期性向客户端提供位置更新 - locationManager = TencentLocationManager.getInstance(this); + locationManager = TencentLocationManager.getInstance(getActivity()); //设置坐标系 locationManager.setCoordinateType(TencentLocationManager.COORDINATE_TYPE_GCJ02); //创建定位请求 @@ -369,7 +356,7 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission locationChangedListener.onLocationChanged(location); //显示回调的实时位置信息 - runOnUiThread(new Runnable() { + getActivity().runOnUiThread(new Runnable() { @Override public void run() { // Rules.getEffectInfo(location); @@ -401,13 +388,13 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission int err = locationManager.requestLocationUpdates(locationRequest, this, Looper.myLooper()); switch (err) { case 1: - Toast.makeText(this, "设备缺少使用腾讯定位服务需要的基本条件", Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), "设备缺少使用腾讯定位服务需要的基本条件", Toast.LENGTH_SHORT).show(); break; case 2: - Toast.makeText(this, "manifest 中配置的 key 不正确", Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), "manifest 中配置的 key 不正确", Toast.LENGTH_SHORT).show(); break; case 3: - Toast.makeText(this, "自动加载libtencentloc.so失败", Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), "自动加载libtencentloc.so失败", Toast.LENGTH_SHORT).show(); break; default: @@ -434,9 +421,9 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission } private void checkLocationPermission() { - if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED - || ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { - ActivityCompat.requestPermissions(this, + if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED + || ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_CODE); } else { @@ -452,10 +439,10 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission //startLocationUpdates(); } else { // 用户拒绝了权限请求 - Toast.makeText(this, "请授予定位权限", Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), "请授予定位权限", Toast.LENGTH_SHORT).show(); } } } - - + + } diff --git a/positions/src/main/java/cc/winboll/studio/positions/fragments/TasksFragment.java b/positions/src/main/java/cc/winboll/studio/positions/fragments/TasksFragment.java new file mode 100644 index 0000000..89d1a30 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/fragments/TasksFragment.java @@ -0,0 +1,59 @@ +package cc.winboll.studio.positions.fragments; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/20 12:57:00 + * @Describe 拨号 + */ +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import androidx.fragment.app.Fragment; +import cc.winboll.studio.positions.R; +import cc.winboll.studio.libappbase.LogView; +import androidx.annotation.Nullable; +import androidx.annotation.NonNull; +import android.graphics.Color; +import android.widget.TextView; +import cc.winboll.studio.positions.views.GridMapView; +import com.tencent.tencentmap.mapsdk.maps.MapView; +import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.TextureMapView; +import androidx.appcompat.widget.Toolbar; + +public class TasksFragment extends Fragment { + + public static final String TAG = "GmsFragment"; + + private static final String ARG_PAGE = "ARG_PAGE"; + private int mPage; + + public static TasksFragment newInstance(int page) { + Bundle args = new Bundle(); + args.putInt(ARG_PAGE, page); + TasksFragment fragment = new TasksFragment(); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments()!= null) { + mPage = getArguments().getInt(ARG_PAGE); + } + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View viewMain = inflater.inflate(R.layout.fragment_tasks, container, false); + Toolbar toolbar = viewMain.findViewById(R.id.toolbar); + getActivity().getMenuInflater().inflate(R.menu.toolbar_tasks, toolbar.getMenu()); + + + return viewMain; + } +} diff --git a/positions/src/main/res/layout/activity_main2.xml b/positions/src/main/res/layout/activity_main.xml similarity index 75% rename from positions/src/main/res/layout/activity_main2.xml rename to positions/src/main/res/layout/activity_main.xml index 5376c86..4ce52f2 100644 --- a/positions/src/main/res/layout/activity_main2.xml +++ b/positions/src/main/res/layout/activity_main.xml @@ -7,21 +7,21 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - + android:layout_height="400dp" + android:id="@+id/frameLayout"/> + android:id="@+id/viewPager"/> + android:id="@+id/tabLayout"/> diff --git a/positions/src/main/res/layout/fragment_log.xml b/positions/src/main/res/layout/fragment_log.xml index 7636182..2be3b39 100644 --- a/positions/src/main/res/layout/fragment_log.xml +++ b/positions/src/main/res/layout/fragment_log.xml @@ -5,8 +5,10 @@ android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> - + + + diff --git a/positions/src/main/res/layout/fragment_contacts.xml b/positions/src/main/res/layout/fragment_positions.xml similarity index 66% rename from positions/src/main/res/layout/fragment_contacts.xml rename to positions/src/main/res/layout/fragment_positions.xml index aeec420..0f70fd2 100644 --- a/positions/src/main/res/layout/fragment_contacts.xml +++ b/positions/src/main/res/layout/fragment_positions.xml @@ -6,10 +6,14 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + + + android:text="fragment_positions"/> diff --git a/positions/src/main/res/layout/fragment_gms.xml b/positions/src/main/res/layout/fragment_tasks.xml similarity index 50% rename from positions/src/main/res/layout/fragment_gms.xml rename to positions/src/main/res/layout/fragment_tasks.xml index 20cd5c3..4f35eb0 100644 --- a/positions/src/main/res/layout/fragment_gms.xml +++ b/positions/src/main/res/layout/fragment_tasks.xml @@ -6,10 +6,15 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - + + + diff --git a/positions/src/main/res/layout/fragment_txms.xml b/positions/src/main/res/layout/fragment_txms.xml index 20d3b56..007b6c0 100644 --- a/positions/src/main/res/layout/fragment_txms.xml +++ b/positions/src/main/res/layout/fragment_txms.xml @@ -6,16 +6,9 @@ android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> - - - + android:layout_height="match_parent"> - - - + diff --git a/positions/src/main/res/menu/toolbar_positions.xml b/positions/src/main/res/menu/toolbar_positions.xml new file mode 100644 index 0000000..34ef902 --- /dev/null +++ b/positions/src/main/res/menu/toolbar_positions.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/positions/src/main/res/menu/toolbar_tasks.xml b/positions/src/main/res/menu/toolbar_tasks.xml new file mode 100644 index 0000000..d35153f --- /dev/null +++ b/positions/src/main/res/menu/toolbar_tasks.xml @@ -0,0 +1,10 @@ + + + + + + From 1ac91f5c1e11ddf0a06f170247090011255a04f4 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Fri, 28 Feb 2025 11:08:29 +0800 Subject: [PATCH 02/35] =?UTF-8?q?=E5=88=86=E9=A1=B5=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- positions/build.properties | 4 +- .../studio/positions/MainActivity.java | 13 +++--- .../fragments/PositionsFragment.java | 33 +++++++++++--- .../positions/fragments/TasksFragment.java | 44 +++++++++++++------ .../src/main/res/layout/activity_main.xml | 5 +++ .../main/res/layout/fragment_positions.xml | 5 --- positions/src/main/res/menu/toolbar_tasks.xml | 4 +- 7 files changed, 76 insertions(+), 32 deletions(-) diff --git a/positions/build.properties b/positions/build.properties index ae32d21..36a0074 100644 --- a/positions/build.properties +++ b/positions/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Fri Feb 28 02:42:20 GMT 2025 +#Fri Feb 28 03:07:27 GMT 2025 stageCount=0 libraryProject= baseVersion=1.0 publishVersion=1.0.0 -buildCount=197 +buildCount=207 baseBetaVersion=1.0.1 diff --git a/positions/src/main/java/cc/winboll/studio/positions/MainActivity.java b/positions/src/main/java/cc/winboll/studio/positions/MainActivity.java index 0958231..ee97c5d 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/MainActivity.java +++ b/positions/src/main/java/cc/winboll/studio/positions/MainActivity.java @@ -35,6 +35,7 @@ import cc.winboll.studio.positions.fragments.PositionsFragment; import cc.winboll.studio.positions.fragments.TXMSFragment; import cc.winboll.studio.positions.fragments.TasksFragment; import com.google.android.material.tabs.TabLayout; +import com.hjq.toast.ToastUtils; import com.tencent.map.vector.demo.AbsActivity; import java.util.ArrayList; import java.util.List; @@ -49,7 +50,7 @@ final public class MainActivity extends AbsActivity implements IWinBollActivity, public static final String ACTION_SOS = "cc.winboll.studio.libappbase.WinBoll.ACTION_SOS"; LogView mLogView; - //Toolbar mToolbar; + Toolbar mToolbar; CheckBox cbMainService; MainServiceBean mMainServiceBean; private TabLayout tabLayout; @@ -96,14 +97,14 @@ final public class MainActivity extends AbsActivity implements IWinBollActivity, super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); -// // 初始化工具栏 -// mToolbar = findViewById(R.id.toolbar); -// setSupportActionBar(mToolbar); + // 初始化工具栏 + mToolbar = findViewById(R.id.toolbar); + setSupportActionBar(mToolbar); // if (isEnableDisplayHomeAsUp()) { // // 显示后退按钮 // getSupportActionBar().setDisplayHomeAsUpEnabled(true); // } -// getSupportActionBar().setSubtitle(getTag()); + getSupportActionBar().setTitle(""); // 初始化地图视图 // 创建Fragment实例 @@ -134,7 +135,7 @@ final public class MainActivity extends AbsActivity implements IWinBollActivity, // 关联TabLayout和ViewPager tabLayout.setupWithViewPager(viewPager); } - + // ViewPager的适配器 private class MyPagerAdapter extends FragmentPagerAdapter { diff --git a/positions/src/main/java/cc/winboll/studio/positions/fragments/PositionsFragment.java b/positions/src/main/java/cc/winboll/studio/positions/fragments/PositionsFragment.java index 75cfea5..5042541 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/fragments/PositionsFragment.java +++ b/positions/src/main/java/cc/winboll/studio/positions/fragments/PositionsFragment.java @@ -7,14 +7,16 @@ package cc.winboll.studio.positions.fragments; */ import android.os.Bundle; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import cc.winboll.studio.positions.R; -import androidx.appcompat.widget.Toolbar; +import com.hjq.toast.ToastUtils; public class PositionsFragment extends Fragment { @@ -37,6 +39,7 @@ public class PositionsFragment extends Fragment { if (getArguments()!= null) { mPage = getArguments().getInt(ARG_PAGE); } + setHasOptionsMenu(true); } @Nullable @@ -44,9 +47,29 @@ public class PositionsFragment extends Fragment { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View viewMain = inflater.inflate(R.layout.fragment_positions, container, false); - Toolbar toolbar = viewMain.findViewById(R.id.toolbar); - getActivity().getMenuInflater().inflate(R.menu.toolbar_positions, toolbar.getMenu()); - +// Toolbar toolbar = viewMain.findViewById(R.id.toolbar); +// getActivity().getMenuInflater().inflate(R.menu.toolbar_positions, toolbar.getMenu()); +// return viewMain; } + + @Override + public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { + inflater.inflate(R.menu.toolbar_positions, menu); + super.onCreateOptionsMenu(menu, inflater); + } + + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == R.id.item_addposition) { + ToastUtils.show("item_addposition"); + } +// } else +// if (item.getItemId() == R.id.item_exit) { +// exit(); +// return true; +// } + return super.onOptionsItemSelected(item); + } } diff --git a/positions/src/main/java/cc/winboll/studio/positions/fragments/TasksFragment.java b/positions/src/main/java/cc/winboll/studio/positions/fragments/TasksFragment.java index 89d1a30..c99d6a6 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/fragments/TasksFragment.java +++ b/positions/src/main/java/cc/winboll/studio/positions/fragments/TasksFragment.java @@ -7,20 +7,16 @@ package cc.winboll.studio.positions.fragments; */ import android.os.Bundle; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import cc.winboll.studio.positions.R; -import cc.winboll.studio.libappbase.LogView; -import androidx.annotation.Nullable; -import androidx.annotation.NonNull; -import android.graphics.Color; -import android.widget.TextView; -import cc.winboll.studio.positions.views.GridMapView; -import com.tencent.tencentmap.mapsdk.maps.MapView; -import com.tencent.tencentmap.mapsdk.maps.TencentMap; -import com.tencent.tencentmap.mapsdk.maps.TextureMapView; -import androidx.appcompat.widget.Toolbar; +import com.hjq.toast.ToastUtils; public class TasksFragment extends Fragment { @@ -43,6 +39,7 @@ public class TasksFragment extends Fragment { if (getArguments()!= null) { mPage = getArguments().getInt(ARG_PAGE); } + setHasOptionsMenu(true); } @Nullable @@ -50,10 +47,31 @@ public class TasksFragment extends Fragment { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View viewMain = inflater.inflate(R.layout.fragment_tasks, container, false); - Toolbar toolbar = viewMain.findViewById(R.id.toolbar); - getActivity().getMenuInflater().inflate(R.menu.toolbar_tasks, toolbar.getMenu()); - +// Toolbar toolbar = viewMain.findViewById(R.id.toolbar); +// getActivity().getMenuInflater().inflate(R.menu.toolbar_tasks, toolbar.getMenu()); +// return viewMain; } + + + @Override + public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { + inflater.inflate(R.menu.toolbar_tasks, menu); + super.onCreateOptionsMenu(menu, inflater); + } + + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == R.id.item_addtask) { + ToastUtils.show("item_addtask"); + } +// } else +// if (item.getItemId() == R.id.item_exit) { +// exit(); +// return true; +// } + return super.onOptionsItemSelected(item); + } } diff --git a/positions/src/main/res/layout/activity_main.xml b/positions/src/main/res/layout/activity_main.xml index 4ce52f2..7a2197f 100644 --- a/positions/src/main/res/layout/activity_main.xml +++ b/positions/src/main/res/layout/activity_main.xml @@ -12,6 +12,11 @@ android:layout_height="400dp" android:id="@+id/frameLayout"/> + + - - + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + tools:context=".MainActivity"> Date: Fri, 28 Feb 2025 11:11:44 +0800 Subject: [PATCH 03/35] =?UTF-8?q?=E6=B8=85=E7=90=86=E5=86=97=E4=BD=99?= =?UTF-8?q?=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- positions/build.properties | 4 ++-- positions/src/main/res/layout/fragment_tasks.xml | 5 ----- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/positions/build.properties b/positions/build.properties index 36a0074..9fce9a3 100644 --- a/positions/build.properties +++ b/positions/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Fri Feb 28 03:07:27 GMT 2025 +#Fri Feb 28 03:10:56 GMT 2025 stageCount=0 libraryProject= baseVersion=1.0 publishVersion=1.0.0 -buildCount=207 +buildCount=208 baseBetaVersion=1.0.1 diff --git a/positions/src/main/res/layout/fragment_tasks.xml b/positions/src/main/res/layout/fragment_tasks.xml index 4f35eb0..cf8b473 100644 --- a/positions/src/main/res/layout/fragment_tasks.xml +++ b/positions/src/main/res/layout/fragment_tasks.xml @@ -6,11 +6,6 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - Date: Fri, 28 Feb 2025 11:14:12 +0800 Subject: [PATCH 04/35] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=B8=85=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- positions/build.properties | 4 ++-- positions/src/main/res/menu/toolbar_tasks.xml | 4 +--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/positions/build.properties b/positions/build.properties index 9fce9a3..f189bf8 100644 --- a/positions/build.properties +++ b/positions/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Fri Feb 28 03:10:56 GMT 2025 +#Fri Feb 28 03:13:40 GMT 2025 stageCount=0 libraryProject= baseVersion=1.0 publishVersion=1.0.0 -buildCount=208 +buildCount=209 baseBetaVersion=1.0.1 diff --git a/positions/src/main/res/menu/toolbar_tasks.xml b/positions/src/main/res/menu/toolbar_tasks.xml index 4cbed6a..d35153f 100644 --- a/positions/src/main/res/menu/toolbar_tasks.xml +++ b/positions/src/main/res/menu/toolbar_tasks.xml @@ -1,8 +1,6 @@ + xmlns:app="http://schemas.android.com/apk/res-auto"> Date: Fri, 28 Feb 2025 19:57:42 +0800 Subject: [PATCH 05/35] 1957 --- positions/build.properties | 4 +- .../studio/positions/MainActivity.java | 16 +- .../studio/positions/MainSimpleActivity.java | 10 +- .../{LocationJson.java => PostionModel.java} | 34 ++- .../positions/fragments/LogFragment.java | 30 +-- .../fragments/PositionsFragment.java | 26 +- .../positions/fragments/TXMSFragment.java | 254 +++++++++++++----- .../positions/fragments/TasksFragment.java | 20 +- .../positions/utils/LocationFileStorage.java | 12 +- .../src/main/res/menu/toolbar_positions.xml | 9 +- 10 files changed, 280 insertions(+), 135 deletions(-) rename positions/src/main/java/cc/winboll/studio/positions/beans/{LocationJson.java => PostionModel.java} (82%) diff --git a/positions/build.properties b/positions/build.properties index f189bf8..831b032 100644 --- a/positions/build.properties +++ b/positions/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Fri Feb 28 03:13:40 GMT 2025 +#Fri Feb 28 11:55:01 GMT 2025 stageCount=0 libraryProject= baseVersion=1.0 publishVersion=1.0.0 -buildCount=209 +buildCount=230 baseBetaVersion=1.0.1 diff --git a/positions/src/main/java/cc/winboll/studio/positions/MainActivity.java b/positions/src/main/java/cc/winboll/studio/positions/MainActivity.java index ee97c5d..a1f7476 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/MainActivity.java +++ b/positions/src/main/java/cc/winboll/studio/positions/MainActivity.java @@ -6,6 +6,7 @@ import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Bundle; +import android.os.Message; import android.telecom.TelecomManager; import android.view.Menu; import android.view.MenuItem; @@ -49,6 +50,7 @@ final public class MainActivity extends AbsActivity implements IWinBollActivity, public static final String ACTION_SOS = "cc.winboll.studio.libappbase.WinBoll.ACTION_SOS"; + TXMSFragment mTXMSFragment; LogView mLogView; Toolbar mToolbar; CheckBox cbMainService; @@ -108,11 +110,11 @@ final public class MainActivity extends AbsActivity implements IWinBollActivity, // 初始化地图视图 // 创建Fragment实例 - TXMSFragment myFragment = TXMSFragment.newInstance(0); + mTXMSFragment = new TXMSFragment(); // 获取FragmentTransaction FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); // 将Fragment添加到FrameLayout容器中 - transaction.add(R.id.frameLayout, myFragment); + transaction.add(R.id.frameLayout, mTXMSFragment); transaction.commit(); tabLayout = findViewById(R.id.tabLayout); @@ -121,9 +123,9 @@ final public class MainActivity extends AbsActivity implements IWinBollActivity, // 创建Fragment列表和标题列表 List fragmentList = new ArrayList<>(); List tabTitleList = new ArrayList<>(); - fragmentList.add(PositionsFragment.newInstance(0)); - fragmentList.add(TasksFragment.newInstance(1)); - fragmentList.add(LogFragment.newInstance(2)); + fragmentList.add(new PositionsFragment()); + fragmentList.add(new TasksFragment()); + fragmentList.add(new LogFragment()); tabTitleList.add("位置"); tabTitleList.add("任务"); tabTitleList.add("日志"); @@ -312,6 +314,10 @@ final public class MainActivity extends AbsActivity implements IWinBollActivity, Intent intent = new Intent(this, com.tencent.map.vector.demo.DemoMainActivity.class); startActivity(intent); //WinBollActivityManager.getInstance(this).startWinBollActivity(this, CallActivity.class); + } else if (item.getItemId() == R.id.item_positionnow) { + mTXMSFragment.sendRealTimePositioningMessage(); + } else if (item.getItemId() == R.id.item_addnewposition) { + ToastUtils.show("item_addnewpositon"); } // } else // if (item.getItemId() == R.id.item_exit) { diff --git a/positions/src/main/java/cc/winboll/studio/positions/MainSimpleActivity.java b/positions/src/main/java/cc/winboll/studio/positions/MainSimpleActivity.java index 140aae9..8f47304 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/MainSimpleActivity.java +++ b/positions/src/main/java/cc/winboll/studio/positions/MainSimpleActivity.java @@ -52,7 +52,7 @@ import com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle; import java.util.ArrayList; import java.util.List; import pub.devrel.easypermissions.EasyPermissions; -import cc.winboll.studio.positions.beans.LocationJson; +import cc.winboll.studio.positions.beans.PostionModel; public class MainSimpleActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks,LocationSource, TencentLocationListener { @@ -69,7 +69,7 @@ public class MainSimpleActivity extends AppCompatActivity implements EasyPermiss private TencentLocationManager locationManager; private TencentLocationRequest locationRequest; private MyLocationStyle locationStyle; - ArrayList locationJsonList; + ArrayList locationJsonList; LogView mLogView; @Override @@ -77,7 +77,7 @@ public class MainSimpleActivity extends AppCompatActivity implements EasyPermiss super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_simple); - locationJsonList = new ArrayList(); + locationJsonList = new ArrayList(); // 初始化工具栏 mToolbar = findViewById(R.id.activitymainToolbar1); @@ -161,7 +161,7 @@ public class MainSimpleActivity extends AppCompatActivity implements EasyPermiss // 读取数据 locationJsonList = LocationFileStorage.loadFromFile(this); - for (LocationJson lj : locationJsonList) { + for (PostionModel lj : locationJsonList) { tencentMap.addMarker(new MarkerOptions(toTencentLatLng(lj.toLocation()))); //LogUtils.d("Location", "Lat: " + loc.getLatitude() + ", Lng: " + loc.getLongitude()); } @@ -176,7 +176,7 @@ public class MainSimpleActivity extends AppCompatActivity implements EasyPermiss // 方式1:保存到文件 //List locations = new ArrayList<>(); - locationJsonList.add(new LocationJson(location)); + locationJsonList.add(new PostionModel(location)); LocationFileStorage.saveToFile(this, locationJsonList); // 读取数据 diff --git a/positions/src/main/java/cc/winboll/studio/positions/beans/LocationJson.java b/positions/src/main/java/cc/winboll/studio/positions/beans/PostionModel.java similarity index 82% rename from positions/src/main/java/cc/winboll/studio/positions/beans/LocationJson.java rename to positions/src/main/java/cc/winboll/studio/positions/beans/PostionModel.java index 92a38b1..d5f21ea 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/beans/LocationJson.java +++ b/positions/src/main/java/cc/winboll/studio/positions/beans/PostionModel.java @@ -11,18 +11,26 @@ import android.util.JsonWriter; import cc.winboll.studio.libappbase.BaseBean; import java.io.IOException; import android.location.Location; +import java.util.UUID; -public class LocationJson extends BaseBean { - - public static final String TAG = "LocationJson"; +public class PostionModel extends BaseBean { + public static final String TAG = "PostionModel"; + + // UUID 唯一位置标识 + private String uuid; + // 纬度 private double latitude; + // 经度 private double longitude; + // 标记时间 private long timestamp; + // 精确度 private double accuracy; private String provider; - public LocationJson() { + public PostionModel() { + this.uuid = UUID.randomUUID().toString(); this.latitude = 0.0f; this.longitude = 0.0f; this.timestamp = 0L; @@ -30,7 +38,8 @@ public class LocationJson extends BaseBean { this.provider = ""; } - public LocationJson(Location location) { + public PostionModel(Location location) { + this.uuid = UUID.randomUUID().toString(); this.latitude = location.getLatitude(); this.longitude = location.getLongitude(); this.timestamp = location.getTime(); @@ -38,6 +47,14 @@ public class LocationJson extends BaseBean { this.provider = location.getProvider(); } + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getUuid() { + return uuid; + } + public void setLatitude(double latitude) { this.latitude = latitude; } @@ -81,12 +98,13 @@ public class LocationJson extends BaseBean { @Override public String getName() { - return LocationJson.class.getName(); + return PostionModel.class.getName(); } @Override public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException { super.writeThisToJsonWriter(jsonWriter); + jsonWriter.name("uuid").value(getUuid()); jsonWriter.name("latitude").value(getLatitude()); jsonWriter.name("longitude").value(getLongitude()); jsonWriter.name("timestamp").value(getTimestamp()); @@ -98,7 +116,9 @@ public class LocationJson extends BaseBean { @Override public boolean initObjectsFromJsonReader(JsonReader jsonReader, String name) throws IOException { if (super.initObjectsFromJsonReader(jsonReader, name)) { return true; } else { - if (name.equals("latitude")) { + if (name.equals("uuid")) { + setUuid(jsonReader.nextString()); + } else if (name.equals("latitude")) { setLatitude(jsonReader.nextDouble()); } else if (name.equals("longitude")) { setLongitude(jsonReader.nextDouble()); diff --git a/positions/src/main/java/cc/winboll/studio/positions/fragments/LogFragment.java b/positions/src/main/java/cc/winboll/studio/positions/fragments/LogFragment.java index 491cc40..e0d35e6 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/fragments/LogFragment.java +++ b/positions/src/main/java/cc/winboll/studio/positions/fragments/LogFragment.java @@ -22,21 +22,21 @@ public class LogFragment extends Fragment { private static final String ARG_PAGE = "ARG_PAGE"; private int mPage; - public static LogFragment newInstance(int page) { - Bundle args = new Bundle(); - args.putInt(ARG_PAGE, page); - LogFragment fragment = new LogFragment(); - fragment.setArguments(args); - return fragment; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (getArguments() != null) { - mPage = getArguments().getInt(ARG_PAGE); - } - } +// public static LogFragment newInstance(int page) { +// Bundle args = new Bundle(); +// args.putInt(ARG_PAGE, page); +// LogFragment fragment = new LogFragment(); +// fragment.setArguments(args); +// return fragment; +// } +// +// @Override +// public void onCreate(Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// if (getArguments() != null) { +// mPage = getArguments().getInt(ARG_PAGE); +// } +// } @Nullable @Override diff --git a/positions/src/main/java/cc/winboll/studio/positions/fragments/PositionsFragment.java b/positions/src/main/java/cc/winboll/studio/positions/fragments/PositionsFragment.java index 5042541..424891e 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/fragments/PositionsFragment.java +++ b/positions/src/main/java/cc/winboll/studio/positions/fragments/PositionsFragment.java @@ -25,20 +25,20 @@ public class PositionsFragment extends Fragment { private static final String ARG_PAGE = "ARG_PAGE"; private int mPage; - public static PositionsFragment newInstance(int page) { - Bundle args = new Bundle(); - args.putInt(ARG_PAGE, page); - PositionsFragment fragment = new PositionsFragment(); - fragment.setArguments(args); - return fragment; - } +// public static PositionsFragment newInstance(int page) { +// Bundle args = new Bundle(); +// args.putInt(ARG_PAGE, page); +// PositionsFragment fragment = new PositionsFragment(); +// fragment.setArguments(args); +// return fragment; +// } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (getArguments()!= null) { - mPage = getArguments().getInt(ARG_PAGE); - } +// if (getArguments()!= null) { +// mPage = getArguments().getInt(ARG_PAGE); +// } setHasOptionsMenu(true); } @@ -62,9 +62,9 @@ public class PositionsFragment extends Fragment { @Override public boolean onOptionsItemSelected(MenuItem item) { - if (item.getItemId() == R.id.item_addposition) { - ToastUtils.show("item_addposition"); - } +// if (item.getItemId() == R.id.item_addposition) { +// ToastUtils.show("item_addposition"); +// } // } else // if (item.getItemId() == R.id.item_exit) { // exit(); diff --git a/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java b/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java index 7c12cdc..f197636 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java +++ b/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java @@ -6,33 +6,32 @@ package cc.winboll.studio.positions.fragments; * @Describe 腾讯地图服务视图 */ import android.Manifest; -import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.location.Location; +import android.location.LocationManager; import android.os.Bundle; +import android.os.Handler; import android.os.Looper; +import android.os.Message; import android.os.SystemClock; import android.util.Log; -import android.view.Menu; -import android.view.MenuItem; +import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; +import androidx.annotation.Nullable; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; -import cc.winboll.studio.libappbase.LogView; +import androidx.fragment.app.Fragment; import cc.winboll.studio.positions.R; -import cc.winboll.studio.positions.activities.SettingsActivity; -import cc.winboll.studio.positions.activities.TestMapViewActivity; +import cc.winboll.studio.positions.beans.PostionModel; import cc.winboll.studio.positions.utils.LocationFileStorage; -import com.google.android.material.floatingactionbutton.FloatingActionButton; -import com.google.android.material.snackbar.Snackbar; +import com.hjq.toast.ToastUtils; import com.tencent.map.geolocation.TencentLocation; import com.tencent.map.geolocation.TencentLocationListener; import com.tencent.map.geolocation.TencentLocationManager; @@ -53,22 +52,6 @@ import com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle; import java.util.ArrayList; import java.util.List; import pub.devrel.easypermissions.EasyPermissions; -import cc.winboll.studio.positions.beans.LocationJson; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import androidx.fragment.app.Fragment; -import cc.winboll.studio.positions.R; -import cc.winboll.studio.libappbase.LogView; -import androidx.annotation.Nullable; -import androidx.annotation.NonNull; -import android.graphics.Color; -import android.widget.TextView; -import cc.winboll.studio.positions.views.GridMapView; -import com.tencent.tencentmap.mapsdk.maps.MapView; -import com.tencent.tencentmap.mapsdk.maps.TencentMap; -import com.tencent.tencentmap.mapsdk.maps.TextureMapView; public class TXMSFragment extends Fragment implements EasyPermissions.PermissionCallbacks,LocationSource, TencentLocationListener { @@ -86,30 +69,31 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission private TencentLocationManager locationManager; private TencentLocationRequest locationRequest; private MyLocationStyle locationStyle; - ArrayList locationJsonList; + ArrayList locationJsonList; + Location lastLocation; - public static TXMSFragment newInstance(int page) { - Bundle args = new Bundle(); - args.putInt(ARG_PAGE, page); - TXMSFragment fragment = new TXMSFragment(); - fragment.setArguments(args); - return fragment; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (getArguments() != null) { - mPage = getArguments().getInt(ARG_PAGE); - } - } +// public static TXMSFragment newInstance(int page) { +// Bundle args = new Bundle(); +// args.putInt(ARG_PAGE, page); +// TXMSFragment fragment = new TXMSFragment(); +// fragment.setArguments(args); +// return fragment; +// } +// +// @Override +// public void onCreate(Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// if (getArguments() != null) { +// mPage = getArguments().getInt(ARG_PAGE); +// } +// } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View viewRoot = inflater.inflate(R.layout.fragment_txms, container, false); - locationJsonList = new ArrayList(); + locationJsonList = new ArrayList(); TencentMapInitializer.setAgreePrivacy(getActivity(), true); TencentMapInitializer.start(getActivity()); @@ -134,18 +118,19 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission checkLocationPermission(); //设置显示定位的图标 - TencentLocationManager.setUserAgreePrivacy(true); - //建立定位 - //initLocation(); - //对地图操作类进行操作 - CameraUpdate cameraSigma = - CameraUpdateFactory.newCameraPosition(new CameraPosition( - new LatLng(22.984066, 116.307548), - 15, - 0f, - 0f)); - //移动地图 - tencentMap.moveCamera(cameraSigma); +// TencentLocationManager.setUserAgreePrivacy(true); +// // 启动实时定位 +// doRealTimePosition(); + +// //对地图操作类进行操作 +// CameraUpdate cameraSigma = +// CameraUpdateFactory.newCameraPosition(new CameraPosition( +// new LatLng(22.984066, 116.307548), +// 15, +// 0f, +// 0f)); +// //移动地图 +// tencentMap.moveCamera(cameraSigma); // 设置地图点击监听 tencentMap.setOnMapClickListener(new TencentMap.OnMapClickListener(){ @@ -156,7 +141,7 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission //LatLng position = new LatLng(40.011313,116.391907); BitmapDescriptor custom = BitmapDescriptorFactory.fromResource(R.drawable.marker); Location location = createLocationFromLatLng(latLng); - addLocationJson(location); + addLocationToMap(location); Marker mCustomMarker = tencentMap.addMarker(new MarkerOptions(latLng)); //创建Marker对象之后,修改属性 @@ -168,7 +153,12 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission }); loadLocations(); - + + // 启动实时定位 + //pickUpPosition(); + //realTimePositioning(); + sendRealTimePositioningMessage(); + return viewRoot; } @@ -187,13 +177,13 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission // 读取数据 locationJsonList = LocationFileStorage.loadFromFile(getActivity()); - for (LocationJson lj : locationJsonList) { - tencentMap.addMarker(new MarkerOptions(toTencentLatLng(lj.toLocation()))); + for (PostionModel lj : locationJsonList) { + tencentMap.addMarker(new MarkerOptions(convertToLatLng(lj.toLocation()))); //LogUtils.d("Location", "Lat: " + loc.getLatitude() + ", Lng: " + loc.getLongitude()); } } - void addLocationJson(Location location) { + void addLocationToMap(Location location) { // 存储位置数据 // Location location = new Location("gps"); // location.setLatitude(22.984066); @@ -202,7 +192,7 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission // 方式1:保存到文件 //List locations = new ArrayList<>(); - locationJsonList.add(new LocationJson(location)); + locationJsonList.add(new PostionModel(location)); LocationFileStorage.saveToFile(getActivity(), locationJsonList); // 读取数据 @@ -213,11 +203,31 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission // } } + public void addCurrentLocationToMap() { + ToastUtils.show("addCurrentLocationToMap"); + locationJsonList.add(new PostionModel(createCurrentLocation())); + LocationFileStorage.saveToFile(getActivity(), locationJsonList); + } -// 创建Location对象方法 + // 创建Location对象方法 + private Location createCurrentLocation() { + // 获取位置管理器 + LocationManager locationManager = (LocationManager) getActivity().getSystemService(getActivity().LOCATION_SERVICE); + // 获取最后已知位置 + Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); + if (location != null) { + // 获取位置提供程序名称 + String provider = location.getProvider(); + System.out.println("定位来源:" + provider); + } + + return location; + } + + // 创建Location对象方法 private Location createLocationFromLatLng(LatLng latLng) { - Location location = new Location("tencent_map_manual"); + Location location = new Location("Tencent_Map_Manual"); // 设置基础坐标 location.setLatitude(latLng.getLatitude()); @@ -231,8 +241,16 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission return location; } - - public LatLng toTencentLatLng(Location location) { + public static LatLng convertToLatLng(TencentLocation location) { + if (location != null) { + double latitude = location.getLatitude(); + double longitude = location.getLongitude(); + return new LatLng(latitude, longitude); + } + return null; + } + + public static LatLng convertToLatLng(Location location) { return new LatLng( location.getLatitude(), location.getLongitude() @@ -249,6 +267,21 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission tencentMap.addMarker(options); } + public static final int REALTIME_POSITIONING = 1; + private Handler handler = new Handler(Looper.getMainLooper()) { + @Override + public void handleMessage(@NonNull Message msg) { + switch (msg.what) { + case REALTIME_POSITIONING: + // 在这里处理接收到消息后的逻辑,比如更新 UI + singleTimePositioning(); + break; + default: + break; + } + } + }; + /** * mapview的生命周期管理 */ @@ -314,20 +347,74 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission return bitmap; } + private void pickUpCurrentPosition() { + Location location = createCurrentLocation(); + ToastUtils.show(String.format("%s", location.toString())); + //对地图操作类进行操作 + CameraUpdate cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + convertToLatLng(location), + 15, + 0f, + 0f)); + //移动地图 + tencentMap.moveCamera(cameraSigma); + addLocationToMap(location); + } + + public void sendRealTimePositioningMessage() { + Message message = Message.obtain(); + message.what = TXMSFragment.REALTIME_POSITIONING; + handler.sendMessage(message); + } /** * 定位的一些初始化设置 */ - private void initLocation() { - //用于访问腾讯定位服务的类, 周期性向客户端提供位置更新 + public void singleTimePositioning() { + TencentMapInitializer.setAgreePrivacy(getActivity(), true); + TencentMapInitializer.start(getActivity()); + TencentLocationManager.setUserAgreePrivacy(true); + + //用于访问腾讯定位服务的类, 提供一次位置信息 locationManager = TencentLocationManager.getInstance(getActivity()); //设置坐标系 locationManager.setCoordinateType(TencentLocationManager.COORDINATE_TYPE_GCJ02); //创建定位请求 locationRequest = TencentLocationRequest.create(); - //设置定位周期(位置监听器回调周期)为3s - locationRequest.setInterval(3000); + // 设置定位模式为单次定位 + locationRequest.setInterval(0); // 设置为0表示只定位一次 + //locationRequest.setFastestInterval(0); + + // 实现 TencentLocationListener 接口来接收定位结果 + locationManager.requestLocationUpdates(locationRequest, new TencentLocationListener() { + @Override + public void onLocationChanged(TencentLocation location, int errorCode, String errorInfo) { + if (errorCode == TencentLocation.ERROR_OK) { + // 定位成功,处理定位数据 + double latitude = location.getLatitude(); + double longitude = location.getLongitude(); + // 在这里可以将定位数据传递给其他需要的地方 + //对地图操作类进行操作 + CameraUpdate cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + convertToLatLng(location), + 15, + 0f, + 0f)); + //移动地图 + tencentMap.moveCamera(cameraSigma); + } else { + // 定位失败,处理错误信息 + } + } + + @Override + public void onStatusUpdate(String name, int statusCode, String statusInfo) { + // 位置状态更新,根据需要处理 + } + }, Looper.getMainLooper()); //地图上设置定位数据源 tencentMap.setLocationSource(this); @@ -335,9 +422,10 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission tencentMap.setMyLocationEnabled(true); //设置定位图标样式 setLocMarkerStyle(); -// locationStyle = locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE); tencentMap.setMyLocationStyle(locationStyle); } + + /** * 实现位置监听 * @param tencentLocation @@ -359,6 +447,16 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission getActivity().runOnUiThread(new Runnable() { @Override public void run() { + + //对地图操作类进行操作 + CameraUpdate cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + convertToLatLng(location), + 15, + 0f, + 0f)); + //移动地图 + tencentMap.moveCamera(cameraSigma); // Rules.getEffectInfo(location); // double distance = DistanceUtils.getDistance( // locationA.getLatitude(), @@ -371,6 +469,22 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission // Toast.makeText(getApplicationContext(), new Gson().toJson(location), Toast.LENGTH_LONG).show(); } }); + + // 保存最后定位信息 + lastLocation = new Location(tencentLocation.getProvider());; + lastLocation.setLatitude(tencentLocation.getLatitude()); + lastLocation.setLongitude(tencentLocation.getLongitude()); + lastLocation.setAccuracy(tencentLocation.getAccuracy()); + + // 当不再需要定位时 + // 取消定位监听 + if (locationManager != null) { + locationManager.removeUpdates(this); + } + // 关闭当前位置显示 +// if (tencentMap != null) { +// tencentMap.setMyLocationEnabled(false); +// } } } diff --git a/positions/src/main/java/cc/winboll/studio/positions/fragments/TasksFragment.java b/positions/src/main/java/cc/winboll/studio/positions/fragments/TasksFragment.java index c99d6a6..aca7911 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/fragments/TasksFragment.java +++ b/positions/src/main/java/cc/winboll/studio/positions/fragments/TasksFragment.java @@ -25,20 +25,20 @@ public class TasksFragment extends Fragment { private static final String ARG_PAGE = "ARG_PAGE"; private int mPage; - public static TasksFragment newInstance(int page) { - Bundle args = new Bundle(); - args.putInt(ARG_PAGE, page); - TasksFragment fragment = new TasksFragment(); - fragment.setArguments(args); - return fragment; - } +// public static TasksFragment newInstance(int page) { +// Bundle args = new Bundle(); +// args.putInt(ARG_PAGE, page); +// TasksFragment fragment = new TasksFragment(); +// fragment.setArguments(args); +// return fragment; +// } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (getArguments()!= null) { - mPage = getArguments().getInt(ARG_PAGE); - } +// if (getArguments()!= null) { +// mPage = getArguments().getInt(ARG_PAGE); +// } setHasOptionsMenu(true); } diff --git a/positions/src/main/java/cc/winboll/studio/positions/utils/LocationFileStorage.java b/positions/src/main/java/cc/winboll/studio/positions/utils/LocationFileStorage.java index 2a77d2f..8a45af5 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/utils/LocationFileStorage.java +++ b/positions/src/main/java/cc/winboll/studio/positions/utils/LocationFileStorage.java @@ -15,25 +15,25 @@ import java.util.ArrayList; import java.util.List; import org.json.JSONArray; import cc.winboll.studio.libappbase.LogUtils; -import cc.winboll.studio.positions.beans.LocationJson; +import cc.winboll.studio.positions.beans.PostionModel; public class LocationFileStorage { public static final String TAG = "LocationFileStorage"; private static final String FILE_NAME = "locations.json"; - public static void saveToFile(Context context, ArrayList locations) { + public static void saveToFile(Context context, ArrayList locations) { try { - LocationJson.saveBeanList(context, locations, LocationJson.class); + PostionModel.saveBeanList(context, locations, PostionModel.class); } catch (Exception e) { LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); } } - public static ArrayList loadFromFile(Context context) { - ArrayList result = new ArrayList(); + public static ArrayList loadFromFile(Context context) { + ArrayList result = new ArrayList(); try { - LocationJson.loadBeanList(context, result, LocationJson.class); + PostionModel.loadBeanList(context, result, PostionModel.class); } catch (Exception e) { LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); } diff --git a/positions/src/main/res/menu/toolbar_positions.xml b/positions/src/main/res/menu/toolbar_positions.xml index 34ef902..391cc99 100644 --- a/positions/src/main/res/menu/toolbar_positions.xml +++ b/positions/src/main/res/menu/toolbar_positions.xml @@ -1,10 +1,15 @@ + + From 23892192b928d4925d8b2a05b50c43a1dc0c7aa3 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sat, 1 Mar 2025 11:09:34 +0800 Subject: [PATCH 06/35] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E6=9C=AC=E6=9C=BAGPS?= =?UTF-8?q?=E5=92=8C=E8=85=BE=E8=AE=AFSDK=E4=B8=A4=E7=A7=8D=E5=AE=9A?= =?UTF-8?q?=E4=BD=8D=E6=96=B9=E6=B3=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- positions/build.properties | 4 +- .../positions/fragments/TXMSFragment.java | 279 +++++++----------- 2 files changed, 106 insertions(+), 177 deletions(-) diff --git a/positions/build.properties b/positions/build.properties index 831b032..733fb63 100644 --- a/positions/build.properties +++ b/positions/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Fri Feb 28 11:55:01 GMT 2025 +#Sat Mar 01 03:07:55 GMT 2025 stageCount=0 libraryProject= baseVersion=1.0 publishVersion=1.0.0 -buildCount=230 +buildCount=246 baseBetaVersion=1.0.1 diff --git a/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java b/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java index f197636..d56761d 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java +++ b/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java @@ -6,11 +6,13 @@ package cc.winboll.studio.positions.fragments; * @Describe 腾讯地图服务视图 */ import android.Manifest; +import cc.winboll.studio.positions.R; import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.location.Location; +import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.os.Handler; @@ -28,7 +30,7 @@ import androidx.annotation.Nullable; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; -import cc.winboll.studio.positions.R; +import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.positions.beans.PostionModel; import cc.winboll.studio.positions.utils.LocationFileStorage; import com.hjq.toast.ToastUtils; @@ -42,6 +44,7 @@ import com.tencent.tencentmap.mapsdk.maps.LocationSource; import com.tencent.tencentmap.mapsdk.maps.TencentMap; import com.tencent.tencentmap.mapsdk.maps.TencentMapInitializer; import com.tencent.tencentmap.mapsdk.maps.TextureMapView; +import com.tencent.tencentmap.mapsdk.maps.UiSettings; import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; @@ -59,6 +62,9 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission private static final int PERMISSION_REQUEST_CODE = 1; + private LocationManager mLocationManager; + private LocationListener mLocationListener; + private static final String ARG_PAGE = "ARG_PAGE"; private int mPage; private TextureMapView mapView; @@ -66,72 +72,32 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission TextView mtvInfo; private LocationSource.OnLocationChangedListener locationChangedListener; - private TencentLocationManager locationManager; - private TencentLocationRequest locationRequest; - private MyLocationStyle locationStyle; - ArrayList locationJsonList; + private TencentLocationManager mTencentLocationManager; + private TencentLocationRequest mTencentLocationRequest; + private MyLocationStyle mMyLocationStyle; + ArrayList locationPostionModelList; Location lastLocation; -// public static TXMSFragment newInstance(int page) { -// Bundle args = new Bundle(); -// args.putInt(ARG_PAGE, page); -// TXMSFragment fragment = new TXMSFragment(); -// fragment.setArguments(args); -// return fragment; -// } -// -// @Override -// public void onCreate(Bundle savedInstanceState) { -// super.onCreate(savedInstanceState); -// if (getArguments() != null) { -// mPage = getArguments().getInt(ARG_PAGE); -// } -// } - @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View viewRoot = inflater.inflate(R.layout.fragment_txms, container, false); - locationJsonList = new ArrayList(); + locationPostionModelList = new ArrayList(); TencentMapInitializer.setAgreePrivacy(getActivity(), true); TencentMapInitializer.start(getActivity()); TencentLocationManager.setUserAgreePrivacy(true); - mapView = viewRoot.findViewById(R.id.mapview); mapView.setOpaque(false); //创建tencentMap地图对象,可以完成对地图的几乎所有操作 tencentMap = mapView.getMap(); -// FloatingActionButton fab = viewRoot.findViewById(R.id.fab); -// fab.setOnClickListener(new View.OnClickListener() { -// @Override -// public void onClick(View view) { -// Snackbar.make(view, "点击了悬浮按钮", Snackbar.LENGTH_LONG).show(); -// } -// }); - mtvInfo = viewRoot.findViewById(R.id.tv_info); checkLocationPermission(); - //设置显示定位的图标 -// TencentLocationManager.setUserAgreePrivacy(true); -// // 启动实时定位 -// doRealTimePosition(); - -// //对地图操作类进行操作 -// CameraUpdate cameraSigma = -// CameraUpdateFactory.newCameraPosition(new CameraPosition( -// new LatLng(22.984066, 116.307548), -// 15, -// 0f, -// 0f)); -// //移动地图 -// tencentMap.moveCamera(cameraSigma); - // 设置地图点击监听 tencentMap.setOnMapClickListener(new TencentMap.OnMapClickListener(){ @@ -154,76 +120,94 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission loadLocations(); - // 启动实时定位 - //pickUpPosition(); - //realTimePositioning(); - sendRealTimePositioningMessage(); + /*UiSettings uiSettings = tencentMap.getUiSettings(); + uiSettings.setAllGesturesEnabled(true); + mTencentLocationManager = TencentLocationManager.getInstance(getActivity()); + //创建定位请求 + mTencentLocationRequest = TencentLocationRequest.create(); + mTencentLocationManager.requestLocationUpdates(mTencentLocationRequest, this); + + //地图上设置定位数据源 + tencentMap.setLocationSource(this); + //设置当前位置可见 + tencentMap.setMyLocationEnabled(true); + //设置定位图标样式 + MyLocationStyle myLocationStyle = new MyLocationStyle(); + tencentMap.setMyLocationEnabled(true); + tencentMap.setMyLocationStyle(myLocationStyle); + //startLocation(); + */ + + // + // 本机 GPS 定位服务调用服务 + // + LocationManager locationManager = (LocationManager) getActivity().getSystemService(getActivity().LOCATION_SERVICE); + String provider = LocationManager.GPS_PROVIDER; + Location location = locationManager.getLastKnownLocation(provider); + locationManager.requestLocationUpdates(provider, 2000, 10, locationListener); + moveToLocation(location); return viewRoot; } + private void startLocation() { + mTencentLocationManager.requestLocationUpdates(mTencentLocationRequest, this); + MyLocationStyle myLocationStyle = new MyLocationStyle(); + tencentMap.setMyLocationEnabled(true); + tencentMap.setMyLocationStyle(myLocationStyle); + } + + private void stopLocation() { + if (mTencentLocationManager != null) { + mTencentLocationManager.removeUpdates(this); + //mTencentLocationManager.removeLocationListener(this); + } + } + void loadLocations() { - // 存储位置数据 -// Location location = new Location("gps"); -// location.setLatitude(22.984066); -// location.setLongitude(116.307548); -// location.setTime(System.currentTimeMillis()); -// -// // 方式1:保存到文件 -// List locations = new ArrayList<>(); -// locations.add(location); -// LocationFileStorage.saveToFile(this, locations); - // 读取数据 - locationJsonList = LocationFileStorage.loadFromFile(getActivity()); + locationPostionModelList = LocationFileStorage.loadFromFile(getActivity()); - for (PostionModel lj : locationJsonList) { + for (PostionModel lj : locationPostionModelList) { tencentMap.addMarker(new MarkerOptions(convertToLatLng(lj.toLocation()))); - //LogUtils.d("Location", "Lat: " + loc.getLatitude() + ", Lng: " + loc.getLongitude()); } } void addLocationToMap(Location location) { - // 存储位置数据 -// Location location = new Location("gps"); -// location.setLatitude(22.984066); -// location.setLongitude(116.307548); -// location.setTime(System.currentTimeMillis()); - - // 方式1:保存到文件 - //List locations = new ArrayList<>(); - locationJsonList.add(new PostionModel(location)); - LocationFileStorage.saveToFile(getActivity(), locationJsonList); - - // 读取数据 -// List loaded = LocationFileStorage.loadFromFile(this); -// for (Location loc : loaded) { -// tencentMap.addMarker(new MarkerOptions(toTencentLatLng(loc))); -// //LogUtils.d("Location", "Lat: " + loc.getLatitude() + ", Lng: " + loc.getLongitude()); -// } + locationPostionModelList.add(new PostionModel(location)); + LocationFileStorage.saveToFile(getActivity(), locationPostionModelList); } - public void addCurrentLocationToMap() { - ToastUtils.show("addCurrentLocationToMap"); - locationJsonList.add(new PostionModel(createCurrentLocation())); - LocationFileStorage.saveToFile(getActivity(), locationJsonList); - } +// public void addCurrentLocationToMap() { +// ToastUtils.show("addCurrentLocationToMap"); +// Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); +// locationPostionModelList.add(new PostionModel(getCurrentGPSLocation())); +// LocationFileStorage.saveToFile(getActivity(), locationPostionModelList); +// } - - // 创建Location对象方法 - private Location createCurrentLocation() { - // 获取位置管理器 - LocationManager locationManager = (LocationManager) getActivity().getSystemService(getActivity().LOCATION_SERVICE); - // 获取最后已知位置 - Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); - if (location != null) { - // 获取位置提供程序名称 - String provider = location.getProvider(); - System.out.println("定位来源:" + provider); + LocationListener locationListener = new LocationListener() { + @Override + public void onLocationChanged(Location location) { + // 位置变化时的处理逻辑 +// double latitude = location.getLatitude(); +// double longitude = location.getLongitude(); + String szTemp = String.format("Latitude %f, Longitude %f, Accuracy %f", location.getLatitude(), location.getLongitude(), location.getAccuracy()); + LogUtils.d(TAG, szTemp); + + moveToLocation(location); } - return location; - } + @Override + public void onProviderDisabled(String provider) {} + + @Override + public void onProviderEnabled(String provider) {} + + @Override + public void onStatusChanged(String provider, int status, Bundle extras) {} + }; + + // 创建Location对象方法 private Location createLocationFromLatLng(LatLng latLng) { @@ -249,7 +233,7 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission } return null; } - + public static LatLng convertToLatLng(Location location) { return new LatLng( location.getLatitude(), @@ -257,7 +241,6 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission ); } - // 添加标记方法 private void addMarker(LatLng latLng) { tencentMap.clearAllOverlays(); @@ -274,7 +257,7 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission switch (msg.what) { case REALTIME_POSITIONING: // 在这里处理接收到消息后的逻辑,比如更新 UI - singleTimePositioning(); + break; default: break; @@ -319,20 +302,18 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission * 设置定位图标样式 */ private void setLocMarkerStyle() { - locationStyle = new MyLocationStyle(); + mMyLocationStyle = new MyLocationStyle(); //创建图标 BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.marker)); - locationStyle.icon(bitmapDescriptor); + mMyLocationStyle.icon(bitmapDescriptor); //设置定位圆形区域的边框宽度 - locationStyle.strokeWidth(3); + mMyLocationStyle.strokeWidth(3); //设置圆区域的颜色 - locationStyle.fillColor(R.color.style); + mMyLocationStyle.fillColor(R.color.style); - tencentMap.setMyLocationStyle(locationStyle); + tencentMap.setMyLocationStyle(mMyLocationStyle); } - - private Bitmap getBitMap(int resourceId) { Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId); int width = bitmap.getWidth(); @@ -347,8 +328,7 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission return bitmap; } - private void pickUpCurrentPosition() { - Location location = createCurrentLocation(); + private void moveToLocation(Location location) { ToastUtils.show(String.format("%s", location.toString())); //对地图操作类进行操作 @@ -360,7 +340,7 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission 0f)); //移动地图 tencentMap.moveCamera(cameraSigma); - addLocationToMap(location); + //addLocationToMap(location); } public void sendRealTimePositioningMessage() { @@ -369,63 +349,9 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission handler.sendMessage(message); } - /** - * 定位的一些初始化设置 - */ - public void singleTimePositioning() { - TencentMapInitializer.setAgreePrivacy(getActivity(), true); - TencentMapInitializer.start(getActivity()); - TencentLocationManager.setUserAgreePrivacy(true); - - //用于访问腾讯定位服务的类, 提供一次位置信息 - locationManager = TencentLocationManager.getInstance(getActivity()); - //设置坐标系 - locationManager.setCoordinateType(TencentLocationManager.COORDINATE_TYPE_GCJ02); - //创建定位请求 - locationRequest = TencentLocationRequest.create(); - // 设置定位模式为单次定位 - locationRequest.setInterval(0); // 设置为0表示只定位一次 - //locationRequest.setFastestInterval(0); - - // 实现 TencentLocationListener 接口来接收定位结果 - locationManager.requestLocationUpdates(locationRequest, new TencentLocationListener() { - @Override - public void onLocationChanged(TencentLocation location, int errorCode, String errorInfo) { - if (errorCode == TencentLocation.ERROR_OK) { - // 定位成功,处理定位数据 - double latitude = location.getLatitude(); - double longitude = location.getLongitude(); - // 在这里可以将定位数据传递给其他需要的地方 - //对地图操作类进行操作 - CameraUpdate cameraSigma = - CameraUpdateFactory.newCameraPosition(new CameraPosition( - convertToLatLng(location), - 15, - 0f, - 0f)); - //移动地图 - tencentMap.moveCamera(cameraSigma); - } else { - // 定位失败,处理错误信息 - } - } - - @Override - public void onStatusUpdate(String name, int statusCode, String statusInfo) { - // 位置状态更新,根据需要处理 - } - }, Looper.getMainLooper()); - - //地图上设置定位数据源 - tencentMap.setLocationSource(this); - //设置当前位置可见 - tencentMap.setMyLocationEnabled(true); - //设置定位图标样式 - setLocMarkerStyle(); - tencentMap.setMyLocationStyle(locationStyle); - } + /** * 实现位置监听 * @param tencentLocation @@ -441,6 +367,7 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission location.setLatitude(tencentLocation.getLatitude()); location.setLongitude(tencentLocation.getLongitude()); location.setAccuracy(tencentLocation.getAccuracy()); + locationChangedListener.onLocationChanged(location); //显示回调的实时位置信息 @@ -464,22 +391,24 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission // locationB.getLatitude(), // locationB.getLongitude() // ); - mtvInfo.setText(String.format("\n%f %f", location.getLatitude(), location.getLongitude())); + String szTemp = String.format("Latitude %f, Longitude %f, Accuracy %f", location.getLatitude(), location.getLongitude(), location.getAccuracy()); + mtvInfo.setText(szTemp); + LogUtils.d(TAG, szTemp); //打印tencentLocation的json字符串 // Toast.makeText(getApplicationContext(), new Gson().toJson(location), Toast.LENGTH_LONG).show(); } }); // 保存最后定位信息 - lastLocation = new Location(tencentLocation.getProvider());; + lastLocation = new Location(tencentLocation.getProvider()); lastLocation.setLatitude(tencentLocation.getLatitude()); lastLocation.setLongitude(tencentLocation.getLongitude()); lastLocation.setAccuracy(tencentLocation.getAccuracy()); // 当不再需要定位时 // 取消定位监听 - if (locationManager != null) { - locationManager.removeUpdates(this); + if (mTencentLocationManager != null) { + mTencentLocationManager.removeUpdates(this); } // 关闭当前位置显示 // if (tencentMap != null) { @@ -499,7 +428,7 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission public void activate(OnLocationChangedListener onLocationChangedListener) { locationChangedListener = onLocationChangedListener; - int err = locationManager.requestLocationUpdates(locationRequest, this, Looper.myLooper()); + int err = mTencentLocationManager.requestLocationUpdates(mTencentLocationRequest, this, Looper.myLooper()); switch (err) { case 1: Toast.makeText(getActivity(), "设备缺少使用腾讯定位服务需要的基本条件", Toast.LENGTH_SHORT).show(); @@ -518,9 +447,9 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission @Override public void deactivate() { - locationManager.removeUpdates(this); - locationManager = null; - locationRequest = null; + mTencentLocationManager.removeUpdates(this); + mTencentLocationManager = null; + mTencentLocationRequest = null; locationChangedListener = null; } From 4fd636090ed6c9838839cd814dd4432c4c851e64 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Mon, 10 Mar 2025 21:11:05 +0800 Subject: [PATCH 07/35] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=88=9D=E6=AD=A5?= =?UTF-8?q?=E8=81=94=E5=90=88=E5=AE=9A=E4=BD=8D=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- positions/build.gradle | 53 ++++--- positions/build.properties | 4 +- positions/src/main/AndroidManifest.xml | 3 + .../studio/positions/MainActivity.java | 6 +- .../studio/positions/MainSimpleActivity.java | 2 +- .../positions/activities/GridMapActivity.java | 4 - .../activities/JointPositioningActivity.java | 129 ++++++++++++++++++ .../activities/SettingsActivity.java | 6 +- .../activities/TestMapViewActivity.java | 11 +- .../fragments/PositionsFragment.java | 93 ++++++++++++- .../positions/fragments/TXMSFragment.java | 70 ++++++---- .../positions/services/AssistantService.java | 4 +- .../positions/services/MainService.java | 19 ++- .../positions/threads/MainServiceThread.java | 6 +- .../src/main/res/layout/activity_main2.xml | 17 +++ .../main/res/layout/fragment_positions.xml | 37 +++-- positions/src/main/res/menu/toolbar_main.xml | 3 + 17 files changed, 381 insertions(+), 86 deletions(-) create mode 100644 positions/src/main/java/cc/winboll/studio/positions/activities/JointPositioningActivity.java create mode 100644 positions/src/main/res/layout/activity_main2.xml diff --git a/positions/build.gradle b/positions/build.gradle index be04383..6b37ca8 100644 --- a/positions/build.gradle +++ b/positions/build.gradle @@ -51,35 +51,52 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } } 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 '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.openmap:foundation:0.5.6.9be4e02' implementation 'com.tencent.map:sdk-utilities:1.0.9' implementation 'com.tencent.map.geolocation:TencentLocationSdk-openplatform:7.5.4.3' 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 'com.github.getActivity:ToastUtils:10.5' + // 网络连接类库 + implementation 'com.squareup.okhttp3:okhttp:4.4.1' - implementation 'cc.winboll.studio:libapputils:9.3.2' - implementation 'cc.winboll.studio:libappbase:1.5.6' + // Android 类库 + 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' } diff --git a/positions/build.properties b/positions/build.properties index 733fb63..67c3d9e 100644 --- a/positions/build.properties +++ b/positions/build.properties @@ -1,8 +1,8 @@ #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 libraryProject= baseVersion=1.0 publishVersion=1.0.0 -buildCount=246 +buildCount=252 baseBetaVersion=1.0.1 diff --git a/positions/src/main/AndroidManifest.xml b/positions/src/main/AndroidManifest.xml index 3e34983..5a919d4 100644 --- a/positions/src/main/AndroidManifest.xml +++ b/positions/src/main/AndroidManifest.xml @@ -60,6 +60,7 @@ + @@ -735,6 +736,8 @@ + + diff --git a/positions/src/main/java/cc/winboll/studio/positions/MainActivity.java b/positions/src/main/java/cc/winboll/studio/positions/MainActivity.java index a1f7476..5e56b02 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/MainActivity.java +++ b/positions/src/main/java/cc/winboll/studio/positions/MainActivity.java @@ -6,7 +6,6 @@ import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Bundle; -import android.os.Message; import android.telecom.TelecomManager; import android.view.Menu; 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.view.YesNoAlertDialog; 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.beans.MainServiceBean; 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); startActivity(intent); //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) { Intent intent = new Intent(this, com.tencent.map.vector.demo.DemoMainActivity.class); startActivity(intent); diff --git a/positions/src/main/java/cc/winboll/studio/positions/MainSimpleActivity.java b/positions/src/main/java/cc/winboll/studio/positions/MainSimpleActivity.java index 8f47304..39eab31 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/MainSimpleActivity.java +++ b/positions/src/main/java/cc/winboll/studio/positions/MainSimpleActivity.java @@ -29,6 +29,7 @@ import cc.winboll.studio.libappbase.LogView; import cc.winboll.studio.positions.R; import cc.winboll.studio.positions.activities.SettingsActivity; import cc.winboll.studio.positions.activities.TestMapViewActivity; +import cc.winboll.studio.positions.beans.PostionModel; import cc.winboll.studio.positions.utils.LocationFileStorage; import com.google.android.material.floatingactionbutton.FloatingActionButton; 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.List; import pub.devrel.easypermissions.EasyPermissions; -import cc.winboll.studio.positions.beans.PostionModel; public class MainSimpleActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks,LocationSource, TencentLocationListener { diff --git a/positions/src/main/java/cc/winboll/studio/positions/activities/GridMapActivity.java b/positions/src/main/java/cc/winboll/studio/positions/activities/GridMapActivity.java index 704d2d9..fba81c1 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/activities/GridMapActivity.java +++ b/positions/src/main/java/cc/winboll/studio/positions/activities/GridMapActivity.java @@ -6,13 +6,9 @@ package cc.winboll.studio.positions.activities; */ import android.graphics.Color; import android.os.Bundle; -import android.widget.Button; -import android.widget.FrameLayout; import androidx.appcompat.app.AppCompatActivity; import cc.winboll.studio.positions.R; import cc.winboll.studio.positions.views.GridMapView; -import android.view.View.OnClickListener; -import android.view.View; public class GridMapActivity extends AppCompatActivity { diff --git a/positions/src/main/java/cc/winboll/studio/positions/activities/JointPositioningActivity.java b/positions/src/main/java/cc/winboll/studio/positions/activities/JointPositioningActivity.java new file mode 100644 index 0000000..23c3c29 --- /dev/null +++ b/positions/src/main/java/cc/winboll/studio/positions/activities/JointPositioningActivity.java @@ -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); + } + } +} + diff --git a/positions/src/main/java/cc/winboll/studio/positions/activities/SettingsActivity.java b/positions/src/main/java/cc/winboll/studio/positions/activities/SettingsActivity.java index 5639791..8bca04d 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/activities/SettingsActivity.java +++ b/positions/src/main/java/cc/winboll/studio/positions/activities/SettingsActivity.java @@ -16,12 +16,12 @@ import android.view.WindowManager; import android.widget.Toast; import androidx.appcompat.app.AlertDialog; 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 com.hjq.toast.ToastUtils; 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 { diff --git a/positions/src/main/java/cc/winboll/studio/positions/activities/TestMapViewActivity.java b/positions/src/main/java/cc/winboll/studio/positions/activities/TestMapViewActivity.java index 22c8a63..cd9cfe6 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/activities/TestMapViewActivity.java +++ b/positions/src/main/java/cc/winboll/studio/positions/activities/TestMapViewActivity.java @@ -4,20 +4,11 @@ package cc.winboll.studio.positions.activities; * @Author ZhanGSKen@AliYun.Com * @Date 2025/02/24 12:14:04 */ -import androidx.appcompat.app.AppCompatActivity; - -import android.content.Intent; import android.os.Bundle; -import android.util.Log; -import android.view.View; - +import androidx.appcompat.app.AppCompatActivity; 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.TencentMapOptions; import com.tencent.tencentmap.mapsdk.maps.TextureMapView; -import com.tencent.tencentmap.mapsdk.maps.model.LatLng; public class TestMapViewActivity extends AppCompatActivity { diff --git a/positions/src/main/java/cc/winboll/studio/positions/fragments/PositionsFragment.java b/positions/src/main/java/cc/winboll/studio/positions/fragments/PositionsFragment.java index 424891e..378f2f0 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/fragments/PositionsFragment.java +++ b/positions/src/main/java/cc/winboll/studio/positions/fragments/PositionsFragment.java @@ -5,6 +5,11 @@ package cc.winboll.studio.positions.fragments; * @Date 2025/02/20 12:57:50 * @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.view.LayoutInflater; import android.view.Menu; @@ -12,11 +17,13 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; import androidx.fragment.app.Fragment; import cc.winboll.studio.positions.R; -import com.hjq.toast.ToastUtils; +import android.widget.Button; public class PositionsFragment extends Fragment { @@ -25,6 +32,12 @@ public class PositionsFragment extends Fragment { private static final String ARG_PAGE = "ARG_PAGE"; private int mPage; + private LocationManager locationManager; + private TextView locationTextView; + double latitudeLock; + double longitudeLock; + + // public static PositionsFragment newInstance(int page) { // Bundle args = new Bundle(); // args.putInt(ARG_PAGE, page); @@ -50,6 +63,23 @@ public class PositionsFragment extends Fragment { // Toolbar toolbar = viewMain.findViewById(R.id.toolbar); // 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; } @@ -58,6 +88,20 @@ public class PositionsFragment extends Fragment { inflater.inflate(R.menu.toolbar_positions, menu); 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 @@ -72,4 +116,51 @@ public class PositionsFragment extends Fragment { // } 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); + } + } } diff --git a/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java b/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java index d56761d..27ad211 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java +++ b/positions/src/main/java/cc/winboll/studio/positions/fragments/TXMSFragment.java @@ -77,11 +77,13 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission private MyLocationStyle mMyLocationStyle; ArrayList locationPostionModelList; Location lastLocation; + static TXMSFragment _TXMSFragment; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + _TXMSFragment = TXMSFragment.this; View viewRoot = inflater.inflate(R.layout.fragment_txms, container, false); locationPostionModelList = new ArrayList(); @@ -121,31 +123,31 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission loadLocations(); /*UiSettings uiSettings = tencentMap.getUiSettings(); - uiSettings.setAllGesturesEnabled(true); - mTencentLocationManager = TencentLocationManager.getInstance(getActivity()); - //创建定位请求 - mTencentLocationRequest = TencentLocationRequest.create(); - mTencentLocationManager.requestLocationUpdates(mTencentLocationRequest, this); + uiSettings.setAllGesturesEnabled(true); + mTencentLocationManager = TencentLocationManager.getInstance(getActivity()); + //创建定位请求 + mTencentLocationRequest = TencentLocationRequest.create(); + mTencentLocationManager.requestLocationUpdates(mTencentLocationRequest, this); - //地图上设置定位数据源 - tencentMap.setLocationSource(this); - //设置当前位置可见 - tencentMap.setMyLocationEnabled(true); - //设置定位图标样式 - MyLocationStyle myLocationStyle = new MyLocationStyle(); - tencentMap.setMyLocationEnabled(true); - tencentMap.setMyLocationStyle(myLocationStyle); - //startLocation(); - */ + //地图上设置定位数据源 + tencentMap.setLocationSource(this); + //设置当前位置可见 + tencentMap.setMyLocationEnabled(true); + //设置定位图标样式 + MyLocationStyle myLocationStyle = new MyLocationStyle(); + tencentMap.setMyLocationEnabled(true); + tencentMap.setMyLocationStyle(myLocationStyle); + //startLocation(); + */ // // 本机 GPS 定位服务调用服务 // - LocationManager locationManager = (LocationManager) getActivity().getSystemService(getActivity().LOCATION_SERVICE); - String provider = LocationManager.GPS_PROVIDER; - Location location = locationManager.getLastKnownLocation(provider); - locationManager.requestLocationUpdates(provider, 2000, 10, locationListener); - moveToLocation(location); +// LocationManager locationManager = (LocationManager) getActivity().getSystemService(getActivity().LOCATION_SERVICE); +// String provider = LocationManager.GPS_PROVIDER; +// Location location = locationManager.getLastKnownLocation(provider); +// locationManager.requestLocationUpdates(provider, 2000, 10, locationListener); +// moveToLocation(location); return viewRoot; } @@ -193,7 +195,7 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission // double longitude = location.getLongitude(); String szTemp = String.format("Latitude %f, Longitude %f, Accuracy %f", location.getLatitude(), location.getLongitude(), location.getAccuracy()); LogUtils.d(TAG, szTemp); - + moveToLocation(location); } @@ -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对象方法 private Location createLocationFromLatLng(LatLng latLng) { @@ -257,7 +274,7 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission switch (msg.what) { case REALTIME_POSITIONING: // 在这里处理接收到消息后的逻辑,比如更新 UI - + break; default: break; @@ -328,6 +345,13 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission 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) { ToastUtils.show(String.format("%s", location.toString())); @@ -349,7 +373,7 @@ public class TXMSFragment extends Fragment implements EasyPermissions.Permission handler.sendMessage(message); } - + /** diff --git a/positions/src/main/java/cc/winboll/studio/positions/services/AssistantService.java b/positions/src/main/java/cc/winboll/studio/positions/services/AssistantService.java index 192d8c2..65e3353 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/services/AssistantService.java +++ b/positions/src/main/java/cc/winboll/studio/positions/services/AssistantService.java @@ -12,11 +12,9 @@ import android.content.Intent; import android.content.ServiceConnection; import android.os.Binder; import android.os.IBinder; +import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.positions.beans.MainServiceBean; 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 { diff --git a/positions/src/main/java/cc/winboll/studio/positions/services/MainService.java b/positions/src/main/java/cc/winboll/studio/positions/services/MainService.java index 1288821..c818675 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/services/MainService.java +++ b/positions/src/main/java/cc/winboll/studio/positions/services/MainService.java @@ -18,8 +18,9 @@ import android.content.ServiceConnection; import android.os.Binder; import android.os.IBinder; import cc.winboll.studio.libappbase.LogUtils; -import cc.winboll.studio.libappbase.SOS; -import cc.winboll.studio.libappbase.bean.APPSOSBean; +import cc.winboll.studio.libappbase.sos.SOS; +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.handlers.MainServiceHandler; import cc.winboll.studio.positions.receivers.MainReceiver; @@ -89,14 +90,18 @@ public class MainService extends Service { // 唤醒守护进程 wakeupAndBindAssistant(); // 召唤 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) { // 注册广播接收器 mMainReceiver = new MainReceiver(this); mMainReceiver.registerAction(this); } - + MainServiceThread.getInstance(this, mMainServiceHandler).start(); @@ -172,7 +177,11 @@ public class MainService extends Service { if (mMainServiceBean.isEnable()) { // 唤醒守护进程 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; mAssistantService = null; diff --git a/positions/src/main/java/cc/winboll/studio/positions/threads/MainServiceThread.java b/positions/src/main/java/cc/winboll/studio/positions/threads/MainServiceThread.java index c0eab8c..8cb99ae 100644 --- a/positions/src/main/java/cc/winboll/studio/positions/threads/MainServiceThread.java +++ b/positions/src/main/java/cc/winboll/studio/positions/threads/MainServiceThread.java @@ -5,12 +5,8 @@ package cc.winboll.studio.positions.threads; * @Date 2025/02/14 03:46:44 */ 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.SOS; -import cc.winboll.studio.libappbase.bean.APPSOSBean; -import com.hjq.toast.ToastUtils; +import cc.winboll.studio.positions.handlers.MainServiceHandler; import java.lang.ref.WeakReference; public class MainServiceThread extends Thread { diff --git a/positions/src/main/res/layout/activity_main2.xml b/positions/src/main/res/layout/activity_main2.xml new file mode 100644 index 0000000..07434d4 --- /dev/null +++ b/positions/src/main/res/layout/activity_main2.xml @@ -0,0 +1,17 @@ + + + + + + + diff --git a/positions/src/main/res/layout/fragment_positions.xml b/positions/src/main/res/layout/fragment_positions.xml index 0572b9e..f559f5c 100644 --- a/positions/src/main/res/layout/fragment_positions.xml +++ b/positions/src/main/res/layout/fragment_positions.xml @@ -1,14 +1,31 @@ + 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"> + + + + + +