应用模式切换功能完成。

This commit is contained in:
ZhanGSKen
2025-11-13 08:44:34 +08:00
parent 80a83cba4c
commit 1896b72469
12 changed files with 45 additions and 66 deletions

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle #Created by .winboll/winboll_app_build.gradle
#Wed Nov 12 23:59:20 GMT 2025 #Thu Nov 13 00:41:27 GMT 2025
stageCount=0 stageCount=0
libraryProject= libraryProject=
baseVersion=15.11 baseVersion=15.11
publishVersion=15.11.0 publishVersion=15.11.0
buildCount=6 buildCount=14
baseBetaVersion=15.11.1 baseBetaVersion=15.11.1

View File

@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="app_name">悟空笔记#</string> <string name="app_name">悟空笔记#</string>
<string name="appplus_name">老君到說#</string>
</resources> </resources>

View File

@@ -2,5 +2,6 @@
<resources> <resources>
<string name="app_name">Positions</string> <string name="app_name">Positions</string>
<string name="appplus_name">PositionsPlus+</string>
</resources> </resources>

View File

@@ -9,7 +9,7 @@
android:shortcutLongLabel="@string/open_appplus" android:shortcutLongLabel="@string/open_appplus"
android:shortcutDisabledMessage="@string/appplus_open_disabled"> android:shortcutDisabledMessage="@string/appplus_open_disabled">
<intent <intent
android:action="cc.winboll.studio.positions.MainActivity" android:action="cc.winboll.studio.positions.MainActivity.ACTION_OPEN_APPPLUS"
android:targetPackage="cc.winboll.studio.positions.beta" android:targetPackage="cc.winboll.studio.positions.beta"
android:targetClass="cc.winboll.studio.positions.MainActivity" android:targetClass="cc.winboll.studio.positions.MainActivity"
android:data="open_appplus" /> android:data="open_appplus" />

View File

@@ -9,9 +9,9 @@
android:shortcutLongLabel="@string/close_appplus" android:shortcutLongLabel="@string/close_appplus"
android:shortcutDisabledMessage="@string/appplus_close_disabled"> android:shortcutDisabledMessage="@string/appplus_close_disabled">
<intent <intent
android:action="cc.winboll.studio.positions.PlusActivity.ACTION_CLOSE_APPPLUS" android:action="cc.winboll.studio.positions.MainActivity.ACTION_CLOSE_APPPLUS"
android:targetPackage="cc.winboll.studio.positions.beta" android:targetPackage="cc.winboll.studio.positions.beta"
android:targetClass="cc.winboll.studio.positions.PlusActivity" android:targetClass="cc.winboll.studio.positions.MainActivity"
android:data="close_appplus" /> android:data="close_appplus" />
<categories android:name="android.shortcut.conversation" /> <categories android:name="android.shortcut.conversation" />

View File

@@ -60,7 +60,7 @@
android:targetActivity=".MainActivity" android:targetActivity=".MainActivity"
android:exported="true" android:exported="true"
android:label="@string/appplus_name" android:label="@string/appplus_name"
android:icon="@mipmap/ic_launcher" android:icon="@drawable/ic_positions_plus"
android:enabled="false"> android:enabled="false">
<intent-filter> <intent-filter>

View File

@@ -22,7 +22,7 @@ import cc.winboll.studio.positions.activities.LocationActivity;
import cc.winboll.studio.positions.activities.WinBoLLActivity; import cc.winboll.studio.positions.activities.WinBoLLActivity;
import cc.winboll.studio.positions.utils.AppConfigsUtil; import cc.winboll.studio.positions.utils.AppConfigsUtil;
import cc.winboll.studio.positions.utils.ServiceUtil; import cc.winboll.studio.positions.utils.ServiceUtil;
import cc.winboll.studio.positions.utils.AppIconUtils; import cc.winboll.studio.positions.utils.APPPlusUtils;
/** /**
* 主页面:仅负责 * 主页面:仅负责
@@ -32,6 +32,10 @@ import cc.winboll.studio.positions.utils.AppIconUtils;
*/ */
public class MainActivity extends WinBoLLActivity implements IWinBoLLActivity { public class MainActivity extends WinBoLLActivity implements IWinBoLLActivity {
public static final String TAG = "MainActivity"; public static final String TAG = "MainActivity";
public static final String COMPONENT_WUKONG = "cc.winboll.studio.positions.MainActivityWukong";
public static final String COMPONENT_LAOJUN = "cc.winboll.studio.positions.MainActivityLaojun";
public static final String ACTION_OPEN_APPPLUS = "cc.winboll.studio.positions.MainActivity.ACTION_OPEN_APPPLUS";
public static final String ACTION_CLOSE_APPPLUS = "cc.winboll.studio.positions.MainActivity.ACTION_CLOSE_APPPLUS";
// 权限请求码(建议定义为类常量,避免魔法值) // 权限请求码(建议定义为类常量,避免魔法值)
private static final int REQUEST_LOCATION_PERMISSIONS = 1001; private static final int REQUEST_LOCATION_PERMISSIONS = 1001;
private static final int REQUEST_BACKGROUND_LOCATION_PERMISSION = 1002; private static final int REQUEST_BACKGROUND_LOCATION_PERMISSION = 1002;
@@ -106,9 +110,15 @@ public class MainActivity extends WinBoLLActivity implements IWinBoLLActivity {
*/ */
private void handleSwitchRequest() { private void handleSwitchRequest() {
Intent intent = getIntent(); Intent intent = getIntent();
if (intent != null && "open_app_plus".equals(intent.getDataString())) { if (intent != null && "open_appplus".equals(intent.getDataString())) {
ToastUtils.show("已添加" + getString(R.string.app_name) + "附加组件"); ToastUtils.show("已添加" + getString(R.string.app_name) + "附加组件");
AppIconUtils.addPlusIcon(this); APPPlusUtils.openAPPPlus(this);
moveTaskToBack(true);
}
if (intent != null && "close_appplus".equals(intent.getDataString())) {
ToastUtils.show("已移除" + getString(R.string.app_name) + "附加组件");
APPPlusUtils.closeAPPPlus(this);
moveTaskToBack(true);
} }
} }

View File

@@ -1,36 +0,0 @@
package cc.winboll.studio.positions.activities;
import android.content.Intent;
import android.os.Bundle;
import cc.winboll.studio.libappbase.ToastUtils;
import cc.winboll.studio.positions.MainActivity;
import cc.winboll.studio.positions.R;
import cc.winboll.studio.positions.utils.AppIconUtils;
/**
* @Author ZhanGSKen&豆包大模型<zhangsken@qq.com>
* @Date 2025/11/10 18:17
*/
public class PlusActivity extends MainActivity {
public static final String TAG = "PlusActivity";
public static final String ACTION_HIDE_APP_PLUS = "cc.winboll.studio.positions.PlusActivity.ACTION_HIDE_APP_PLUS";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
handleSwitchRequest();
}
/**
* 处理应用图标快捷菜单的请求
*/
private void handleSwitchRequest() {
Intent intent = getIntent();
if (intent != null && "hide_app_plus".equals(intent.getDataString())) {
ToastUtils.show("已移除" + getString(R.string.app_name) + "附加组件");
AppIconUtils.addPlusIcon(this);
}
}
}

View File

@@ -10,14 +10,12 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.Build; import android.os.Build;
import android.util.Log;
import android.widget.Toast; import android.widget.Toast;
import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.positions.R; import cc.winboll.studio.positions.MainActivity;
import cc.winboll.studio.positions.activities.PlusActivity;
public class AppIconUtils { public class APPPlusUtils {
public static final String TAG = "AppIconUtils"; public static final String TAG = "APPPlusUtils";
// 快捷方式配置名称+图标需与实际资源匹配 // 快捷方式配置名称+图标需与实际资源匹配
// private static final String PLUS_SHORTCUT_NAME = "位置服务-Laojun"; // private static final String PLUS_SHORTCUT_NAME = "位置服务-Laojun";
@@ -26,7 +24,7 @@ public class AppIconUtils {
/** /**
* 添加Plus组件与图标 * 添加Plus组件与图标
*/ */
public static boolean addPlusIcon(Context context) { public static boolean openAPPPlus(Context context) {
if (context == null) { if (context == null) {
LogUtils.d(TAG, "切换失败:上下文为空"); LogUtils.d(TAG, "切换失败:上下文为空");
Toast.makeText(context, "图标切换失败", Toast.LENGTH_SHORT).show(); Toast.makeText(context, "图标切换失败", Toast.LENGTH_SHORT).show();
@@ -34,10 +32,12 @@ public class AppIconUtils {
} }
PackageManager pm = context.getPackageManager(); PackageManager pm = context.getPackageManager();
ComponentName plusComponent = new ComponentName(context, PlusActivity.ACTION_HIDE_APP_PLUS); ComponentName plusComponentLaojun = new ComponentName(context, MainActivity.COMPONENT_LAOJUN);
ComponentName plusComponentWuKong = new ComponentName(context, MainActivity.COMPONENT_WUKONG);
try { try {
enableComponent(pm, plusComponent); disableComponent(pm, plusComponentWuKong);
enableComponent(pm, plusComponentLaojun);
// 2. 创建 Laojun 组件对应的快捷方式自动去重 // 2. 创建 Laojun 组件对应的快捷方式自动去重
// boolean shortcutCreated = createComponentShortcut(context, plusComponent, PLUS_SHORTCUT_NAME, PLUS_SHORTCUT_ICON); // boolean shortcutCreated = createComponentShortcut(context, plusComponent, PLUS_SHORTCUT_NAME, PLUS_SHORTCUT_ICON);
@@ -62,12 +62,12 @@ public class AppIconUtils {
return false; return false;
} }
} }
/** /**
* 移除Plus组件 * 移除Plus组件
*/ */
public static boolean removePlusIcon(Context context) { public static boolean closeAPPPlus(Context context) {
if (context == null) { if (context == null) {
LogUtils.d(TAG, "切换失败:上下文为空"); LogUtils.d(TAG, "切换失败:上下文为空");
Toast.makeText(context, "图标切换失败", Toast.LENGTH_SHORT).show(); Toast.makeText(context, "图标切换失败", Toast.LENGTH_SHORT).show();
@@ -75,15 +75,13 @@ public class AppIconUtils {
} }
PackageManager pm = context.getPackageManager(); PackageManager pm = context.getPackageManager();
ComponentName plusComponent = new ComponentName(context, PlusActivity.ACTION_HIDE_APP_PLUS); ComponentName plusComponentLaojun = new ComponentName(context, MainActivity.COMPONENT_LAOJUN);
ComponentName plusComponentWuKong = new ComponentName(context, MainActivity.COMPONENT_WUKONG);
disableComponent(pm, plusComponentLaojun);
enableComponent(pm, plusComponentWuKong);
try { return true;
disableComponent(pm, plusComponent);
return true;
} catch (Exception e) {
LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
return false;
}
} }
/** /**

View File

@@ -1,4 +1,9 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="app_name">悟空笔记</string> <string name="app_name">悟空笔记</string>
<string name="appplus_name">老君到說</string>
<string name="open_appplus">开疆扩土</string>
<string name="close_appplus">返璞归真</string>
<string name="appplus_open_disabled">余力不足</string>
<string name="appplus_close_disabled">辎重难返</string>
</resources> </resources>

View File

@@ -9,7 +9,7 @@
android:shortcutLongLabel="@string/open_appplus" android:shortcutLongLabel="@string/open_appplus"
android:shortcutDisabledMessage="@string/appplus_open_disabled"> android:shortcutDisabledMessage="@string/appplus_open_disabled">
<intent <intent
android:action="cc.winboll.studio.positions.MainActivity" android:action="cc.winboll.studio.positions.MainActivity.ACTION_OPEN_APPPLUS"
android:targetPackage="cc.winboll.studio.positions" android:targetPackage="cc.winboll.studio.positions"
android:targetClass="cc.winboll.studio.positions.MainActivity" android:targetClass="cc.winboll.studio.positions.MainActivity"
android:data="open_appplus" /> android:data="open_appplus" />

View File

@@ -9,9 +9,9 @@
android:shortcutLongLabel="@string/close_appplus" android:shortcutLongLabel="@string/close_appplus"
android:shortcutDisabledMessage="@string/appplus_close_disabled"> android:shortcutDisabledMessage="@string/appplus_close_disabled">
<intent <intent
android:action="cc.winboll.studio.positions.PlusActivity.ACTION_HIDE_APP_PLUS" android:action="cc.winboll.studio.positions.MainActivity.ACTIO_CLOSE_APPPLUS"
android:targetPackage="cc.winboll.studio.positions" android:targetPackage="cc.winboll.studio.positions"
android:targetClass="cc.winboll.studio.positions.PlusActivity" android:targetClass="cc.winboll.studio.positions.MainActivity"
android:data="close_appplus" /> android:data="close_appplus" />
<categories android:name="android.shortcut.conversation" /> <categories android:name="android.shortcut.conversation" />