Compare commits
3 Commits
positions-
...
positions-
| Author | SHA1 | Date | |
|---|---|---|---|
| a0f88a423a | |||
|
|
81b5141608 | ||
|
|
ddda54bd75 |
@@ -1,8 +1,8 @@
|
|||||||
#Created by .winboll/winboll_app_build.gradle
|
#Created by .winboll/winboll_app_build.gradle
|
||||||
#Wed Oct 01 21:01:10 HKT 2025
|
#Wed Oct 01 21:03:35 HKT 2025
|
||||||
stageCount=5
|
stageCount=6
|
||||||
libraryProject=
|
libraryProject=
|
||||||
baseVersion=15.0
|
baseVersion=15.0
|
||||||
publishVersion=15.0.4
|
publishVersion=15.0.5
|
||||||
buildCount=0
|
buildCount=0
|
||||||
baseBetaVersion=15.0.5
|
baseBetaVersion=15.0.6
|
||||||
|
|||||||
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,18 +25,30 @@ 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,10 +117,13 @@ 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() {
|
||||||
@Override
|
@Override
|
||||||
@@ -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配置常量(判断服务是否运行)
|
||||||
@@ -44,6 +45,17 @@ public class LocationActivity extends AppCompatActivity {
|
|||||||
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
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
|||||||
@@ -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