命名应用的中文化名称。调整一些按钮的响应逻辑。
This commit is contained in:
		| @@ -1,8 +1,8 @@ | |||||||
| #Created by .winboll/winboll_app_build.gradle | #Created by .winboll/winboll_app_build.gradle | ||||||
| #Wed Oct 01 12:10:23 GMT 2025 | #Wed Oct 01 12:59:11 GMT 2025 | ||||||
| stageCount=4 | stageCount=4 | ||||||
| libraryProject= | libraryProject= | ||||||
| baseVersion=15.0 | baseVersion=15.0 | ||||||
| publishVersion=15.0.3 | publishVersion=15.0.3 | ||||||
| buildCount=58 | buildCount=63 | ||||||
| baseBetaVersion=15.0.4 | baseBetaVersion=15.0.4 | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								positions/src/beta/res/values-zh/strings.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								positions/src/beta/res/values-zh/strings.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <resources> | ||||||
|  |     <string name="app_name">@笨笨龙@</string> | ||||||
|  | </resources> | ||||||
| @@ -41,6 +41,7 @@ import java.util.Arrays; | |||||||
| import java.util.Date; | import java.util.Date; | ||||||
| import java.util.LinkedHashMap; | import java.util.LinkedHashMap; | ||||||
| import java.util.concurrent.atomic.AtomicBoolean; | import java.util.concurrent.atomic.AtomicBoolean; | ||||||
|  | import cc.winboll.studio.libaes.utils.WinBoLLActivityManager; | ||||||
|  |  | ||||||
| public class App extends GlobalApplication { | public class App extends GlobalApplication { | ||||||
|  |  | ||||||
| @@ -51,6 +52,8 @@ public class App extends GlobalApplication { | |||||||
|         super.onCreate(); |         super.onCreate(); | ||||||
| 		setIsDebuging(BuildConfig.DEBUG); | 		setIsDebuging(BuildConfig.DEBUG); | ||||||
| 		 | 		 | ||||||
|  | 		WinBoLLActivityManager.init(this); | ||||||
|  | 		 | ||||||
|         // 初始化 Toast 框架 |         // 初始化 Toast 框架 | ||||||
|         ToastUtils.init(this); |         ToastUtils.init(this); | ||||||
|         // 设置 Toast 布局样式 |         // 设置 Toast 布局样式 | ||||||
|   | |||||||
| @@ -1,21 +1,20 @@ | |||||||
| package cc.winboll.studio.positions; | package cc.winboll.studio.positions; | ||||||
|  |  | ||||||
| import android.content.ComponentName; | import android.app.Activity; | ||||||
| import android.content.Context; |  | ||||||
| import android.content.Intent; | import android.content.Intent; | ||||||
| import android.content.ServiceConnection; |  | ||||||
| import android.content.pm.PackageManager; | import android.content.pm.PackageManager; | ||||||
| import android.os.Build; | import android.os.Build; | ||||||
| import android.os.Bundle; | import android.os.Bundle; | ||||||
| import android.os.IBinder; |  | ||||||
| import android.view.View; | import android.view.View; | ||||||
|  | import android.widget.Button; | ||||||
| import android.widget.CompoundButton; | import android.widget.CompoundButton; | ||||||
| import android.widget.Switch; | import android.widget.Switch; | ||||||
| import androidx.appcompat.app.AppCompatActivity; |  | ||||||
| import androidx.appcompat.widget.Toolbar; | import androidx.appcompat.widget.Toolbar; | ||||||
| import cc.winboll.studio.libappbase.LogActivity; | import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity; | ||||||
|  | import cc.winboll.studio.libaes.utils.WinBoLLActivityManager; | ||||||
| import cc.winboll.studio.libappbase.LogUtils; | import cc.winboll.studio.libappbase.LogUtils; | ||||||
| import cc.winboll.studio.positions.activities.LocationActivity; | import cc.winboll.studio.positions.activities.LocationActivity; | ||||||
|  | import cc.winboll.studio.positions.activities.WinBoLLActivity; | ||||||
| import cc.winboll.studio.positions.services.MainService; | import cc.winboll.studio.positions.services.MainService; | ||||||
| import cc.winboll.studio.positions.utils.AppConfigsUtil; | import cc.winboll.studio.positions.utils.AppConfigsUtil; | ||||||
| import com.hjq.toast.ToastUtils; | import com.hjq.toast.ToastUtils; | ||||||
| @@ -26,17 +25,29 @@ import com.hjq.toast.ToastUtils; | |||||||
|  * 2. 跳转至“位置管理页(LocationActivity)”和“日志页(LogActivity)” |  * 2. 跳转至“位置管理页(LocationActivity)”和“日志页(LogActivity)” | ||||||
|  * 3. Java 7 语法适配:无 Lambda、显式接口实现、兼容低版本 |  * 3. Java 7 语法适配:无 Lambda、显式接口实现、兼容低版本 | ||||||
|  */ |  */ | ||||||
| public class MainActivity extends AppCompatActivity { | public class MainActivity extends WinBoLLActivity implements IWinBoLLActivity { | ||||||
|     public static final String TAG = "MainActivity"; |     public static final String TAG = "MainActivity"; | ||||||
|     // 位置权限请求码(自定义唯一标识) |     // 位置权限请求码(自定义唯一标识) | ||||||
|     private static final int REQUEST_LOCATION_PERMISSIONS = 1001; |     private static final int REQUEST_LOCATION_PERMISSIONS = 1001; | ||||||
|  |  | ||||||
|     // UI 控件:服务控制开关、顶部工具栏 |     // UI 控件:服务控制开关、顶部工具栏 | ||||||
|     private Switch mServiceSwitch; |     private Switch mServiceSwitch; | ||||||
|  | 	private Button mManagePositionsButton; | ||||||
|     private Toolbar mToolbar; |     private Toolbar mToolbar; | ||||||
|     // 服务相关:服务实例、绑定状态标记 |     // 服务相关:服务实例、绑定状态标记 | ||||||
|     //private DistanceRefreshService mDistanceService; |     //private DistanceRefreshService mDistanceService; | ||||||
|     private boolean isServiceBound = false; |     private boolean isServiceBound = false; | ||||||
|  | 	 | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public Activity getActivity() { | ||||||
|  |         return this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public String getTag() { | ||||||
|  |         return TAG; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     // ---------------------- 服务连接回调(仅用于获取服务状态,不依赖服务执行核心逻辑) ---------------------- |     // ---------------------- 服务连接回调(仅用于获取服务状态,不依赖服务执行核心逻辑) ---------------------- | ||||||
| //    private final ServiceConnection mServiceConn = new ServiceConnection() { | //    private final ServiceConnection mServiceConn = new ServiceConnection() { | ||||||
| @@ -69,8 +80,8 @@ public class MainActivity extends AppCompatActivity { | |||||||
|  |  | ||||||
|         // 1. 初始化顶部 Toolbar(保留原逻辑,设置页面标题) |         // 1. 初始化顶部 Toolbar(保留原逻辑,设置页面标题) | ||||||
|         initToolbar(); |         initToolbar(); | ||||||
|         // 2. 初始化服务控制开关(核心功能:绑定开关点击事件) |         // 2. 初始化其他控件 | ||||||
|         initServiceSwitch(); |         initViews(); | ||||||
|         // 3. 检查并申请位置权限(含后台GPS权限,确保服务启动前权限就绪) |         // 3. 检查并申请位置权限(含后台GPS权限,确保服务启动前权限就绪) | ||||||
|         if (!checkLocationPermissions()) { |         if (!checkLocationPermissions()) { | ||||||
|             requestLocationPermissions(); |             requestLocationPermissions(); | ||||||
| @@ -106,9 +117,12 @@ public class MainActivity extends AppCompatActivity { | |||||||
|     /** |     /** | ||||||
|      * 初始化服务控制开关:读取SP状态、绑定点击事件(含权限检查) |      * 初始化服务控制开关:读取SP状态、绑定点击事件(含权限检查) | ||||||
|      */ |      */ | ||||||
|     private void initServiceSwitch() { |     private void initViews() { | ||||||
|         mServiceSwitch = (Switch) findViewById(R.id.switch_service_control); // 显式强转 |         mServiceSwitch = (Switch) findViewById(R.id.switch_service_control); // 显式强转 | ||||||
| 		mServiceSwitch.setChecked(AppConfigsUtil.getInstance(this).isEnableMainService(true)); | 		mServiceSwitch.setChecked(AppConfigsUtil.getInstance(this).isEnableMainService(true)); | ||||||
|  | 		 | ||||||
|  | 		mManagePositionsButton = (Button) findViewById(R.id.btn_manage_positions); | ||||||
|  | 		mManagePositionsButton.setEnabled(mServiceSwitch.isChecked()); | ||||||
|  |  | ||||||
|         // Java 7 用匿名内部类实现 CompoundButton.OnCheckedChangeListener |         // Java 7 用匿名内部类实现 CompoundButton.OnCheckedChangeListener | ||||||
|         mServiceSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { |         mServiceSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { | ||||||
| @@ -136,6 +150,8 @@ public class MainActivity extends AppCompatActivity { | |||||||
| //						} | //						} | ||||||
| 						stopService(new Intent(MainActivity.this, MainService.class)); | 						stopService(new Intent(MainActivity.this, MainService.class)); | ||||||
| 					} | 					} | ||||||
|  |  | ||||||
|  | 					mManagePositionsButton.setEnabled(isChecked); | ||||||
| 				} | 				} | ||||||
| 			}); | 			}); | ||||||
|     } |     } | ||||||
| @@ -166,7 +182,7 @@ public class MainActivity extends AppCompatActivity { | |||||||
|      * 无服务状态限制,直接跳转 |      * 无服务状态限制,直接跳转 | ||||||
|      */ |      */ | ||||||
|     public void onLog(View view) { |     public void onLog(View view) { | ||||||
|         LogActivity.startLogActivity(this); // 调用LogActivity静态方法跳转(保留原逻辑) |         WinBoLLActivityManager.getInstance().startLogActivity(this); // 调用LogActivity静态方法跳转(保留原逻辑) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // ---------------------- 新增:位置权限处理(适配Java7 + 后台GPS权限) ---------------------- |     // ---------------------- 新增:位置权限处理(适配Java7 + 后台GPS权限) ---------------------- | ||||||
|   | |||||||
| @@ -5,15 +5,16 @@ package cc.winboll.studio.positions.activities; | |||||||
|  * @Date 2025/09/29 18:22 |  * @Date 2025/09/29 18:22 | ||||||
|  * @Describe 位置列表页面(直连服务数据+移除绑定,兼容服务私有字段) |  * @Describe 位置列表页面(直连服务数据+移除绑定,兼容服务私有字段) | ||||||
|  */ |  */ | ||||||
|  | import android.app.Activity; | ||||||
| import android.content.Context; | import android.content.Context; | ||||||
| import android.content.SharedPreferences; | import android.content.SharedPreferences; | ||||||
| import android.os.Bundle; | import android.os.Bundle; | ||||||
| import android.view.View; | import android.view.View; | ||||||
| import android.view.inputmethod.InputMethodManager; | import android.view.inputmethod.InputMethodManager; | ||||||
| import android.widget.Toast; | import android.widget.Toast; | ||||||
| import androidx.appcompat.app.AppCompatActivity; |  | ||||||
| import androidx.recyclerview.widget.LinearLayoutManager; | import androidx.recyclerview.widget.LinearLayoutManager; | ||||||
| import androidx.recyclerview.widget.RecyclerView; | import androidx.recyclerview.widget.RecyclerView; | ||||||
|  | import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity; | ||||||
| import cc.winboll.studio.libappbase.LogUtils; | import cc.winboll.studio.libappbase.LogUtils; | ||||||
| import cc.winboll.studio.positions.R; | import cc.winboll.studio.positions.R; | ||||||
| import cc.winboll.studio.positions.adapters.PositionAdapter; | import cc.winboll.studio.positions.adapters.PositionAdapter; | ||||||
| @@ -29,7 +30,7 @@ import java.util.ArrayList; | |||||||
|  * 3. 保留“直连服务实例”的核心需求,避免绑定,但尊重服务数据私有性 |  * 3. 保留“直连服务实例”的核心需求,避免绑定,但尊重服务数据私有性 | ||||||
|  * 4. 兼容Java 7语法,无Lambda、显式类型转换 |  * 4. 兼容Java 7语法,无Lambda、显式类型转换 | ||||||
|  */ |  */ | ||||||
| public class LocationActivity extends AppCompatActivity { | public class LocationActivity extends WinBoLLActivity implements IWinBoLLActivity { | ||||||
|     public static final String TAG = "LocationActivity"; |     public static final String TAG = "LocationActivity"; | ||||||
| 	 | 	 | ||||||
| 	// SP配置常量(判断服务是否运行) | 	// SP配置常量(判断服务是否运行) | ||||||
| @@ -43,6 +44,17 @@ public class LocationActivity extends AppCompatActivity { | |||||||
|     // 缓存服务数据(从服务PUBLIC方法获取,避免重复调用) |     // 缓存服务数据(从服务PUBLIC方法获取,避免重复调用) | ||||||
|     private ArrayList<PositionModel> mCachedPositionList;  |     private ArrayList<PositionModel> mCachedPositionList;  | ||||||
|     private ArrayList<PositionTaskModel> mCachedTaskList; |     private ArrayList<PositionTaskModel> mCachedTaskList; | ||||||
|  | 	 | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public Activity getActivity() { | ||||||
|  |         return this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public String getTag() { | ||||||
|  |         return TAG; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     // ---------------------- 页面生命周期(简化资源管理,无服务绑定) ---------------------- |     // ---------------------- 页面生命周期(简化资源管理,无服务绑定) ---------------------- | ||||||
|     @Override |     @Override | ||||||
|   | |||||||
| @@ -0,0 +1,60 @@ | |||||||
|  | package cc.winboll.studio.positions.activities; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * @Author ZhanGSKen&豆包大模型<zhangsken@qq.com> | ||||||
|  |  * @Date 2025/09/29 00:11 | ||||||
|  |  * @Describe WinBoLL 窗口基础类 | ||||||
|  |  */ | ||||||
|  | import android.app.Activity; | ||||||
|  | import android.os.Bundle; | ||||||
|  | import android.view.MenuItem; | ||||||
|  | import androidx.appcompat.app.AppCompatActivity; | ||||||
|  | import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity; | ||||||
|  | import cc.winboll.studio.libaes.utils.WinBoLLActivityManager; | ||||||
|  | import cc.winboll.studio.libappbase.LogUtils; | ||||||
|  |  | ||||||
|  | public class WinBoLLActivity extends AppCompatActivity implements IWinBoLLActivity { | ||||||
|  |  | ||||||
|  |     public static final String TAG = "WinBoLLActivity"; | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public Activity getActivity() { | ||||||
|  |         return this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public String getTag() { | ||||||
|  |         return TAG; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     protected void onResume() { | ||||||
|  |         super.onResume(); | ||||||
|  |         LogUtils.d(TAG, String.format("onResume %s", getTag())); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public boolean onOptionsItemSelected(MenuItem item) { | ||||||
|  |         /*if (item.getItemId() == R.id.item_log) { | ||||||
|  |             WinBoLLActivityManager.getInstance().startLogActivity(this); | ||||||
|  |             return true; | ||||||
|  |         } else if (item.getItemId() == R.id.item_home) { | ||||||
|  | 			startActivity(new Intent(this, MainActivity.class)); | ||||||
|  |             return true; | ||||||
|  |         }*/ | ||||||
|  |         // 在switch语句中处理每个ID,并在处理完后返回true,未处理的情况返回false。 | ||||||
|  |         return super.onOptionsItemSelected(item); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     protected void onPostCreate(Bundle savedInstanceState) { | ||||||
|  |         super.onPostCreate(savedInstanceState); | ||||||
|  |         WinBoLLActivityManager.getInstance().add(this); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     protected void onDestroy() { | ||||||
|  |         super.onDestroy(); | ||||||
|  |         WinBoLLActivityManager.getInstance().registeRemove(this); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -25,7 +25,8 @@ | |||||||
| 		android:layout_height="wrap_content" | 		android:layout_height="wrap_content" | ||||||
| 		android:layout_margin="16dp" | 		android:layout_margin="16dp" | ||||||
| 		android:onClick="onPositions" | 		android:onClick="onPositions" | ||||||
| 		android:text="进入位置管理"/> | 		android:text="进入位置管理" | ||||||
|  | 		android:id="@+id/btn_manage_positions"/> | ||||||
|  |  | ||||||
| 	<Button | 	<Button | ||||||
| 		android:layout_width="match_parent" | 		android:layout_width="match_parent" | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								positions/src/main/res/values-zh/strings.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								positions/src/main/res/values-zh/strings.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <resources> | ||||||
|  |     <string name="app_name">~笨笨龙~</string> | ||||||
|  | </resources> | ||||||
| @@ -1,4 +1,3 @@ | |||||||
| <resources> | <resources> | ||||||
|     <string name="app_name">Positions</string> |     <string name="app_name">Positions</string> | ||||||
|      |  | ||||||
| </resources> | </resources> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 ZhanGSKen
					ZhanGSKen