diff --git a/appbase/build.gradle b/appbase/build.gradle index 4dd0737..3043907 100644 --- a/appbase/build.gradle +++ b/appbase/build.gradle @@ -29,7 +29,7 @@ android { // versionName 更新后需要手动设置 // .winboll/winbollBuildProps.properties 文件的 stageCount=0 // Gradle编译环境下合起来的 versionName 就是 "${versionName}.0" - versionName "2.0" + versionName "2.1" if(true) { versionName = genVersionName("${versionName}") } diff --git a/appbase/build.properties b/appbase/build.properties index 631b0a2..cb0c2af 100644 --- a/appbase/build.properties +++ b/appbase/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Fri Mar 07 04:36:05 GMT 2025 -stageCount=3 +#Fri Mar 07 06:49:58 GMT 2025 +stageCount=0 libraryProject=libappbase -baseVersion=2.0 -publishVersion=2.0.2 -buildCount=7 -baseBetaVersion=2.0.3 +baseVersion=2.1 +publishVersion=2.1.0 +buildCount=1 +baseBetaVersion=2.1.1 diff --git a/appbase/src/main/AndroidManifest.xml b/appbase/src/main/AndroidManifest.xml index 1ada098..4fdc630 100644 --- a/appbase/src/main/AndroidManifest.xml +++ b/appbase/src/main/AndroidManifest.xml @@ -54,19 +54,25 @@ + + - - + + + + + + - + - + - + @@ -91,6 +97,11 @@ android:name="android.max_aspect" android:value="4.0"/> + + + diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/MainActivity.java b/appbase/src/main/java/cc/winboll/studio/appbase/MainActivity.java index 58976a1..32d7431 100644 --- a/appbase/src/main/java/cc/winboll/studio/appbase/MainActivity.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/MainActivity.java @@ -1,6 +1,5 @@ package cc.winboll.studio.appbase; -import android.content.ComponentName; import android.content.Intent; import android.os.Bundle; import android.view.View; @@ -9,13 +8,16 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import cc.winboll.studio.appbase.R; import cc.winboll.studio.appbase.services.MainService; +import cc.winboll.studio.appbase.services.TestDemoBindService; +import cc.winboll.studio.appbase.services.TestDemoService; import cc.winboll.studio.libappbase.GlobalApplication; import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.LogView; -import cc.winboll.studio.libappbase.services.TestService; import cc.winboll.studio.libappbase.widgets.StatusWidget; import com.hjq.toast.ToastUtils; +import android.content.ComponentName; import cc.winboll.studio.libappbase.sos.SOS; +import cc.winboll.studio.libappbase.sos.SOSObject; public class MainActivity extends AppCompatActivity { @@ -66,49 +68,74 @@ public class MainActivity extends AppCompatActivity { MainService.stopMainService(this); } - public void onTestStopWithoutSettingEnable(View view) { -// LogUtils.d(TAG, "onTestStopWithoutSettingEnable"); -// stopService(new Intent(this, SimpleOperateSignalCenterService.class)); + public void onTestStopMainServiceWithoutSettingEnable(View view) { + LogUtils.d(TAG, "onTestStopMainServiceWithoutSettingEnable"); + stopService(new Intent(this, MainService.class)); } - public void onTestStartWithString(View view) { - LogUtils.d(TAG, "onTestStartWithString"); + public void onTestUseComponentStartService(View view) { + LogUtils.d(TAG, "onTestUseComponentStartService"); // 目标服务的包名和类名 -// String packageName = this.getPackageName(); -// String serviceClassName = SimpleOperateSignalCenterService.class.getName(); -// -// // 构建Intent -// Intent intentService = new Intent(); -// intentService.setComponent(new ComponentName(packageName, serviceClassName)); -// -// startService(intentService); + String packageName = this.getPackageName(); + String serviceClassName = TestDemoService.class.getName(); + + // 构建Intent + Intent intentService = new Intent(); + intentService.setComponent(new ComponentName(packageName, serviceClassName)); + + startService(intentService); } - public void onSOS(View view) { -// Intent intent = new Intent(this, TestService.class); -// stopService(intent); -// SOS.se(this, new APPNewsBean(getPackageName(), TestService.class.getName())); + public void onTestSOS(View view) { + Intent intent = new Intent(this, TestDemoService.class); + stopService(intent); + if(App.isDebuging()) { + SOS.sosToAppBaseBeta(this, TestDemoService.class.getName()); + } else { + SOS.sosToAppBase(this, TestDemoService.class.getName()); + } } - public void onStartTestService(View view) { -// Intent intent = new Intent(this, TestService.class); -// intent.setAction(WinBoll.ACTION_SERVICE_ENABLE); -// startService(intent); + public void onSartTestDemoService(View view) { + Intent intent = new Intent(this, TestDemoService.class); + intent.setAction(TestDemoService.ACTION_ENABLE); + startService(intent); } - public void onStopTestService(View view) { -// Intent intent = new Intent(this, TestService.class); -// intent.setAction(WinBoll.ACTION_SERVICE_DISABLE); -// startService(intent); -// -// Intent intentStop = new Intent(this, TestService.class); -// stopService(intentStop); + public void onStopTestDemoService(View view) { + Intent intent = new Intent(this, TestDemoService.class); + intent.setAction(TestDemoService.ACTION_DISABLE); + startService(intent); + + Intent intentStop = new Intent(this, TestDemoService.class); + stopService(intentStop); } - public void onStopTestServiceNoSettings(View view) { - Intent intent = new Intent(this, TestService.class); + public void onStopTestDemoServiceNoSettings(View view) { + Intent intent = new Intent(this, TestDemoService.class); + stopService(intent); + } + + public void onSartTestDemoBindService(View view) { + Intent intent = new Intent(this, TestDemoBindService.class); + intent.setAction(TestDemoBindService.ACTION_ENABLE); + startService(intent); + + } + + public void onStopTestDemoBindService(View view) { + Intent intent = new Intent(this, TestDemoBindService.class); + intent.setAction(TestDemoBindService.ACTION_DISABLE); + startService(intent); + + Intent intentStop = new Intent(this, TestDemoBindService.class); + stopService(intentStop); + } + + public void onStopTestDemoBindServiceNoSettings(View view) { + Intent intent = new Intent(this, TestDemoBindService.class); stopService(intent); } } diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/beans/MainServiceBean.java b/appbase/src/main/java/cc/winboll/studio/appbase/beans/MainServiceBean.java index 81a3a7a..580b6e5 100644 --- a/appbase/src/main/java/cc/winboll/studio/appbase/beans/MainServiceBean.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/beans/MainServiceBean.java @@ -35,8 +35,7 @@ public class MainServiceBean extends BaseBean { @Override public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException { super.writeThisToJsonWriter(jsonWriter); - MainServiceBean bean = this; - jsonWriter.name("isEnable").value(bean.isEnable()); + jsonWriter.name("isEnable").value(isEnable()); } diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/bean/TestServiceBean.java b/appbase/src/main/java/cc/winboll/studio/appbase/beans/TestDemoBindServiceBean.java similarity index 87% rename from libappbase/src/main/java/cc/winboll/studio/libappbase/bean/TestServiceBean.java rename to appbase/src/main/java/cc/winboll/studio/appbase/beans/TestDemoBindServiceBean.java index 30d8cfe..59649a6 100644 --- a/libappbase/src/main/java/cc/winboll/studio/libappbase/bean/TestServiceBean.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/beans/TestDemoBindServiceBean.java @@ -1,8 +1,8 @@ -package cc.winboll.studio.libappbase.bean; +package cc.winboll.studio.appbase.beans; /** * @Author ZhanGSKen@AliYun.Com - * @Date 2025/02/19 13:34:52 + * @Date 2025/03/07 12:47:22 * @Describe TestServiceBean */ import android.util.JsonReader; @@ -10,13 +10,13 @@ import android.util.JsonWriter; import cc.winboll.studio.libappbase.BaseBean; import java.io.IOException; -public class TestServiceBean extends BaseBean { +public class TestDemoBindServiceBean extends BaseBean { public static final String TAG = "TestServiceBean"; boolean isEnable; - public TestServiceBean() { + public TestDemoBindServiceBean() { this.isEnable = false; } @@ -30,7 +30,7 @@ public class TestServiceBean extends BaseBean { @Override public String getName() { - return TestServiceBean.class.getName(); + return TestDemoBindServiceBean.class.getName(); } @Override diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/beans/TestDemoServiceBean.java b/appbase/src/main/java/cc/winboll/studio/appbase/beans/TestDemoServiceBean.java new file mode 100644 index 0000000..680d2e4 --- /dev/null +++ b/appbase/src/main/java/cc/winboll/studio/appbase/beans/TestDemoServiceBean.java @@ -0,0 +1,68 @@ +package cc.winboll.studio.appbase.beans; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/03/07 12:49:21 + * @Describe TestDemoServiceBean + */ +import android.util.JsonReader; +import android.util.JsonWriter; +import cc.winboll.studio.libappbase.BaseBean; +import java.io.IOException; + +public class TestDemoServiceBean extends BaseBean { + + public static final String TAG = "TestDemoServiceBean"; + + boolean isEnable; + + public TestDemoServiceBean() { + this.isEnable = false; + } + + public void setIsEnable(boolean isEnable) { + this.isEnable = isEnable; + } + + public boolean isEnable() { + return isEnable; + } + + @Override + public String getName() { + return TestDemoServiceBean.class.getName(); + } + + @Override + public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException { + super.writeThisToJsonWriter(jsonWriter); + jsonWriter.name("isEnable").value(isEnable()); + + } + + @Override + public boolean initObjectsFromJsonReader(JsonReader jsonReader, String name) throws IOException { + if (super.initObjectsFromJsonReader(jsonReader, name)) { return true; } else { + if (name.equals("isEnable")) { + setIsEnable(jsonReader.nextBoolean()); + } else { + return false; + } + } + return true; + } + + @Override + public BaseBean readBeanFromJsonReader(JsonReader jsonReader) throws IOException { + jsonReader.beginObject(); + while (jsonReader.hasNext()) { + String name = jsonReader.nextName(); + if (!initObjectsFromJsonReader(jsonReader, name)) { + jsonReader.skipValue(); + } + } + // 结束 JSON 对象 + jsonReader.endObject(); + return this; + } +} diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/receivers/MainReceiver.java b/appbase/src/main/java/cc/winboll/studio/appbase/receivers/MainReceiver.java index ad553dc..4b82474 100644 --- a/appbase/src/main/java/cc/winboll/studio/appbase/receivers/MainReceiver.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/receivers/MainReceiver.java @@ -47,31 +47,27 @@ public class MainReceiver extends BroadcastReceiver { LogUtils.d(TAG, "ACTION_BIND"); LogUtils.d(TAG, String.format("context.getPackageName() %s", context.getPackageName())); LogUtils.d(TAG, String.format("intent.getAction() %s", intent.getAction())); - String SOS = intent.getStringExtra("SOS"); - LogUtils.d(TAG, String.format("SOS %s", SOS)); - if (SOS != null && SOS.equals("Service")) { - String szAPPSOSBean = intent.getStringExtra("APPSOSBean"); - LogUtils.d(TAG, String.format("szAPPSOSBean %s", szAPPSOSBean)); - if (szAPPSOSBean != null && !szAPPSOSBean.equals("")) { - try { - APPModel bean = APPModel.parseStringToBean(szAPPSOSBean, APPModel.class); - if (bean != null) { - String szAppPackageName = bean.getAppPackageName(); - LogUtils.d(TAG, String.format("szAppPackageName %s", szAppPackageName)); - String szAppMainServiveName = bean.getAppMainServiveName(); - LogUtils.d(TAG, String.format("szNewsClassName %s", szAppMainServiveName)); - mwrService.get().bindSOSConnection(bean); - } - } catch (IOException e) { - LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); + String szAPPModel = intent.getStringExtra(WinBoll.EXTRA_APPMODEL); + LogUtils.d(TAG, String.format("szAPPModel %s", szAPPModel)); + if (szAPPModel != null && !szAPPModel.equals("")) { + try { + APPModel bean = APPModel.parseStringToBean(szAPPModel, APPModel.class); + if (bean != null) { + String szAppPackageName = bean.getAppPackageName(); + LogUtils.d(TAG, String.format("szAppPackageName %s", szAppPackageName)); + String szAppMainServiveName = bean.getAppMainServiveName(); + LogUtils.d(TAG, String.format("szAppMainServiveName %s", szAppMainServiveName)); + mwrService.get().bindAPPModelConnection(bean); } + } catch (IOException e) { + LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); } } } else if (intent.getAction().equals(SOS.ACTION_SOS)) { LogUtils.d(TAG, "ACTION_SOS"); String sos = intent.getStringExtra(SOS.EXTRA_OBJECT); LogUtils.d(TAG, String.format("SOS %s", sos)); - if (sos != null && sos.equals("")) { + if (sos != null && !sos.equals("")) { SOSObject bean = SOS.parseSOSObject(sos); if (bean != null) { String szObjectPackageName = bean.getObjectPackageName(); diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/services/MainService.java b/appbase/src/main/java/cc/winboll/studio/appbase/services/MainService.java index 0c296f0..41949ef 100644 --- a/appbase/src/main/java/cc/winboll/studio/appbase/services/MainService.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/services/MainService.java @@ -45,7 +45,7 @@ public class MainService extends Service { AssistantService mAssistantService; boolean isBound = false; MainReceiver mMainReceiver; - ArrayList mSOSConnectionList; + ArrayList mAPPModelConnectionList; @Override public IBinder onBind(Intent intent) { @@ -60,7 +60,7 @@ public class MainService extends Service { public void onCreate() { super.onCreate(); LogUtils.d(TAG, "onCreate()"); - mSOSConnectionList = new ArrayList(); + mAPPModelConnectionList = new ArrayList(); _mControlCenterService = MainService.this; isServiceRunning = false; @@ -117,21 +117,11 @@ public class MainService extends Service { // void wakeupAndBindAssistant() { LogUtils.d(TAG, "wakeupAndBindAssistant()"); -// if (ServiceUtils.isServiceAlive(getApplicationContext(), AssistantService.class.getName()) == false) { -// startService(new Intent(MainService.this, AssistantService.class)); -// //LogUtils.d(TAG, "call wakeupAndBindAssistant() : Binding... AssistantService"); -// bindService(new Intent(MainService.this, AssistantService.class), mMyServiceConnection, Context.BIND_IMPORTANT); -// } + Intent intent = new Intent(this, AssistantService.class); startService(intent); // 绑定服务的Intent - //Intent intent = new Intent(this, AssistantService.class); bindService(intent, mMyServiceConnection, Context.BIND_IMPORTANT); - -// Intent intent = new Intent(this, AssistantService.class); -// startService(intent); -// LogUtils.d(TAG, "startService(intent)"); -// bindService(new Intent(this, AssistantService.class), mMyServiceConnection, Context.BIND_IMPORTANT); } // 开启提醒铃声线程 @@ -192,24 +182,24 @@ public class MainService extends Service { } } - public void bindSOSConnection(APPModel bean) { - LogUtils.d(TAG, "bindSOSConnection(...)"); + public void bindAPPModelConnection(APPModel bean) { + LogUtils.d(TAG, "bindAPPModelConnection(...)"); // 清理旧的绑定链接 - for (int i = mSOSConnectionList.size() - 1; i > -1; i--) { - SOSConnection item = mSOSConnectionList.get(i); - if (item.isBindToAPPSOSBean(bean)) { + for (int i = mAPPModelConnectionList.size() - 1; i > -1; i--) { + APPConnection item = mAPPModelConnectionList.get(i); + if (item.isBindToAPP(bean)) { LogUtils.d(TAG, "Bind Servive exist."); unbindService(item); - mSOSConnectionList.remove(i); + mAPPModelConnectionList.remove(i); } } // 绑定服务 - SOSConnection sosConnection = new SOSConnection(); + APPConnection appConnection = new APPConnection(); Intent intentService = new Intent(); intentService.setComponent(new ComponentName(bean.getAppPackageName(), bean.getAppMainServiveName())); - bindService(intentService, sosConnection, Context.BIND_IMPORTANT); - mSOSConnectionList.add(sosConnection); + bindService(intentService, appConnection, Context.BIND_IMPORTANT); + mAPPModelConnectionList.add(appConnection); Intent intentWidget = new Intent(this, APPNewsWidget.class); intentWidget.setAction(APPNewsWidget.ACTION_WAKEUP_SERVICE); @@ -218,11 +208,11 @@ public class MainService extends Service { sendBroadcast(intentWidget); } - public class SOSConnection implements ServiceConnection { + public class APPConnection implements ServiceConnection { ComponentName mComponentName; - boolean isBindToAPPSOSBean(APPModel bean) { + boolean isBindToAPP(APPModel bean) { return mComponentName != null && mComponentName.getClassName().equals(bean.getAppMainServiveName()) && mComponentName.getPackageName().equals(bean.getAppPackageName()); @@ -241,13 +231,13 @@ public class MainService extends Service { LogUtils.d(TAG, String.format("onServiceDisconnected : \ngetClassName %s\ngetPackageName %s", name.getClassName(), name.getPackageName())); // 尝试无参数启动一下服务 - String sosPackage = mComponentName.getPackageName(); - LogUtils.d(TAG, String.format("sosPackage %s", sosPackage)); - String sosClassName = mComponentName.getClassName(); - LogUtils.d(TAG, String.format("sosClassName %s", sosClassName)); + String appPackage = mComponentName.getPackageName(); + LogUtils.d(TAG, String.format("appPackage %s", appPackage)); + String appMainServiceClassName = mComponentName.getClassName(); + LogUtils.d(TAG, String.format("appMainServiceClassName %s", appMainServiceClassName)); Intent intentService = new Intent(); - intentService.setComponent(new ComponentName(sosPackage, sosClassName)); + intentService.setComponent(new ComponentName(appPackage, appMainServiceClassName)); startService(intentService); } diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/services/TestDemoBindService.java b/appbase/src/main/java/cc/winboll/studio/appbase/services/TestDemoBindService.java new file mode 100644 index 0000000..a957afa --- /dev/null +++ b/appbase/src/main/java/cc/winboll/studio/appbase/services/TestDemoBindService.java @@ -0,0 +1,178 @@ +package cc.winboll.studio.appbase.services; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/03/07 12:45:49 + * @Describe 启动时申请绑定到APPBase主服务的服务示例 + */ +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.os.Binder; +import android.os.IBinder; +import cc.winboll.studio.appbase.beans.TestDemoBindServiceBean; +import cc.winboll.studio.libappbase.LogUtils; +import cc.winboll.studio.libappbase.sos.WinBoll; +import cc.winboll.studio.appbase.App; +import cc.winboll.studio.libappbase.sos.SOS; + +public class TestDemoBindService extends Service { + + public static final String TAG = "TestDemoBindService"; + + public static final String ACTION_ENABLE = TestDemoBindService.class.getName() + ".ACTION_ENABLE"; + public static final String ACTION_DISABLE = TestDemoBindService.class.getName() + ".ACTION_DISABLE"; + + volatile static TestThread _TestThread; + + volatile static boolean _IsRunning; + + public synchronized static void setIsRunning(boolean isRunning) { + _IsRunning = isRunning; + } + + public static boolean isRunning() { + return _IsRunning; + } + + @Override + public IBinder onBind(Intent intent) { + return new MyBinder(); + } + + public class MyBinder extends Binder { + public TestDemoBindService getService() { + return TestDemoBindService.this; + } + } + + @Override + public void onCreate() { + super.onCreate(); + LogUtils.d(TAG, "onCreate()"); + + run(); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + LogUtils.d(TAG, "onStartCommand(...)"); + TestDemoBindServiceBean bean = TestDemoBindServiceBean.loadBean(this, TestDemoBindServiceBean.class); + if (bean == null) { + bean = new TestDemoBindServiceBean(); + } + + if (intent.getAction() != null) { + if (intent.getAction().equals(ACTION_ENABLE)) { + bean.setIsEnable(true); + LogUtils.d(TAG, "setIsEnable(true);"); + TestDemoBindServiceBean.saveBean(this, bean); + } else if (intent.getAction().equals(ACTION_DISABLE)) { + bean.setIsEnable(false); + LogUtils.d(TAG, "setIsEnable(false);"); + TestDemoBindServiceBean.saveBean(this, bean); + } + } + + run(); + + return (bean.isEnable()) ? START_STICKY : super.onStartCommand(intent, flags, startId); + //return super.onStartCommand(intent, flags, startId); + } + + void run() { + LogUtils.d(TAG, "run()"); + TestDemoBindServiceBean bean = TestDemoBindServiceBean.loadBean(this, TestDemoBindServiceBean.class); + if (bean == null) { + bean = new TestDemoBindServiceBean(); + TestDemoBindServiceBean.saveBean(this, bean); + } + if (bean.isEnable()) { + LogUtils.d(TAG, "run() bean.isEnable()"); + TestThread.getInstance(this).start(); + LogUtils.d(TAG, "_TestThread.start()"); + } + } + + + @Override + public void onDestroy() { + super.onDestroy(); + LogUtils.d(TAG, "onDestroy()"); + TestDemoBindServiceBean bean = TestDemoBindServiceBean.loadBean(this, TestDemoBindServiceBean.class); + if (bean == null) { + bean = new TestDemoBindServiceBean(); + } + + TestThread.getInstance(this).setIsExit(true); + + // 预防 APPBase 应用重启绑定失效。 + // 所以退出时检查本服务是否配置启用,如果启用就发送一个 SOS 信号。 + // 这样 APPBase 就会用组件方式启动本服务。 + if (bean.isEnable()) { + if (App.isDebuging()) { + SOS.sosToAppBaseBeta(this, TestDemoBindService.class.getName()); + } else { + SOS.sosToAppBase(this, TestDemoBindService.class.getName()); + } + } + + _IsRunning = false; + } + + static class TestThread extends Thread { + + volatile static TestThread _TestThread; + Context mContext; + volatile boolean isStarted = false; + volatile boolean isExit = false; + + TestThread(Context context) { + super(); + mContext = context; + } + + public static synchronized TestThread getInstance(Context context) { + if (_TestThread != null) { + _TestThread.setIsExit(true); + } + _TestThread = new TestThread(context); + + return _TestThread; + } + + public synchronized void setIsExit(boolean isExit) { + this.isExit = isExit; + } + + public boolean isExit() { + return isExit; + } + + @Override + public void run() { + if (isStarted == false) { + isStarted = true; + super.run(); + LogUtils.d(TAG, "run() start"); + if (App.isDebuging()) { + WinBoll.bindToAPPBaseBeta(mContext, TestDemoBindService.class.getName()); + } else { + WinBoll.bindToAPPBase(mContext, TestDemoBindService.class.getName()); + } + + while (!isExit()) { + LogUtils.d(TAG, "run()"); + + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); + } + } + + LogUtils.d(TAG, "run() exit"); + } + } + } +} diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/services/TestService.java b/appbase/src/main/java/cc/winboll/studio/appbase/services/TestDemoService.java similarity index 68% rename from libappbase/src/main/java/cc/winboll/studio/libappbase/services/TestService.java rename to appbase/src/main/java/cc/winboll/studio/appbase/services/TestDemoService.java index a73ea97..4739f9c 100644 --- a/libappbase/src/main/java/cc/winboll/studio/libappbase/services/TestService.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/services/TestDemoService.java @@ -1,23 +1,25 @@ -package cc.winboll.studio.libappbase.services; +package cc.winboll.studio.appbase.services; /** * @Author ZhanGSKen@AliYun.Com - * @Date 2025/02/15 20:48:36 - * @Describe TestService + * @Date 2025/03/07 12:39:24 + * @Describe 普通服务示例 */ import android.app.Service; import android.content.Context; import android.content.Intent; import android.os.Binder; import android.os.IBinder; +import cc.winboll.studio.appbase.beans.TestDemoServiceBean; import cc.winboll.studio.libappbase.LogUtils; -import cc.winboll.studio.libappbase.bean.TestServiceBean; import cc.winboll.studio.libappbase.sos.WinBoll; -import cc.winboll.studio.libappbase.sos.APPModel; -public class TestService extends Service { +public class TestDemoService extends Service { - public static final String TAG = "TestService"; + public static final String TAG = "TestDemoService"; + + public static final String ACTION_ENABLE = TestDemoService.class.getName() + ".ACTION_ENABLE"; + public static final String ACTION_DISABLE = TestDemoService.class.getName() + ".ACTION_DISABLE"; volatile static TestThread _TestThread; @@ -37,8 +39,8 @@ public class TestService extends Service { } public class MyBinder extends Binder { - public TestService getService() { - return TestService.this; + public TestDemoService getService() { + return TestDemoService.this; } } @@ -54,29 +56,35 @@ public class TestService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { LogUtils.d(TAG, "onStartCommand(...)"); - TestServiceBean bean = TestServiceBean.loadBean(this, TestServiceBean.class); + TestDemoServiceBean bean = TestDemoServiceBean.loadBean(this, TestDemoServiceBean.class); if (bean == null) { - bean = new TestServiceBean(); + bean = new TestDemoServiceBean(); } -// if (intent.getAction() != null && intent.getAction().equals(WinBoll.ACTION_SERVICE_ENABLE)) { -// bean.setIsEnable(true); -// TestServiceBean.saveBean(this, bean); -// run(); -// } else if (intent.getAction() != null && intent.getAction().equals(WinBoll.ACTION_SERVICE_DISABLE)) { -// bean.setIsEnable(false); -// TestServiceBean.saveBean(this, bean); -// } - LogUtils.d(TAG, String.format("TestServiceBean.saveBean setIsEnable %s", bean.isEnable())); + + if (intent.getAction() != null) { + if (intent.getAction().equals(ACTION_ENABLE)) { + bean.setIsEnable(true); + LogUtils.d(TAG, "setIsEnable(true);"); + TestDemoServiceBean.saveBean(this, bean); + } else if (intent.getAction().equals(ACTION_DISABLE)) { + bean.setIsEnable(false); + LogUtils.d(TAG, "setIsEnable(false);"); + TestDemoServiceBean.saveBean(this, bean); + } + } + + run(); + return (bean.isEnable()) ? START_STICKY : super.onStartCommand(intent, flags, startId); //return super.onStartCommand(intent, flags, startId); } void run() { LogUtils.d(TAG, "run()"); - TestServiceBean bean = TestServiceBean.loadBean(this, TestServiceBean.class); + TestDemoServiceBean bean = TestDemoServiceBean.loadBean(this, TestDemoServiceBean.class); if (bean == null) { - bean = new TestServiceBean(); - TestServiceBean.saveBean(this, bean); + bean = new TestDemoServiceBean(); + TestDemoServiceBean.saveBean(this, bean); } if (bean.isEnable()) { LogUtils.d(TAG, "run() bean.isEnable()"); @@ -91,7 +99,7 @@ public class TestService extends Service { super.onDestroy(); LogUtils.d(TAG, "onDestroy()"); TestThread.getInstance(this).setIsExit(true); - + _IsRunning = false; } @@ -130,7 +138,6 @@ public class TestService extends Service { isStarted = true; super.run(); LogUtils.d(TAG, "run() start"); - WinBoll.bindToAPPBase(mContext, TestService.class.getName()); while (!isExit()) { LogUtils.d(TAG, "run()"); diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/widgets/APPNewsWidget.java b/appbase/src/main/java/cc/winboll/studio/appbase/widgets/APPNewsWidget.java index 907f18b..fa3da6e 100644 --- a/appbase/src/main/java/cc/winboll/studio/appbase/widgets/APPNewsWidget.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/widgets/APPNewsWidget.java @@ -26,8 +26,8 @@ public class APPNewsWidget extends AppWidgetProvider { public static final String TAG = "APPNewsWidget"; - public static final String ACTION_WAKEUP_SERVICE = "cc.winboll.studio.appbase.widgets.WinBollNewsWidget.ACTION_WAKEUP_SERVICE"; - public static final String ACTION_RELOAD_REPORT = "cc.winboll.studio.appbase.widgets.WinBollNewsWidget.ACTION_RELOAD_REPORT"; + public static final String ACTION_WAKEUP_SERVICE = APPNewsWidget.class.getName() + ".ACTION_WAKEUP_SERVICE"; + public static final String ACTION_RELOAD_REPORT = APPNewsWidget.class.getName() + ".ACTION_RELOAD_REPORT"; volatile static ArrayList _WinBollNewsBeanList; @@ -124,12 +124,12 @@ public class APPNewsWidget extends AppWidgetProvider { RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_news); //设置按钮点击事件 - Intent intentPre = new Intent(context, WinBollNewsWidgetClickListener.class); - intentPre.setAction(WinBollNewsWidgetClickListener.ACTION_PRE); + Intent intentPre = new Intent(context, APPNewsWidgetClickListener.class); + intentPre.setAction(APPNewsWidgetClickListener.ACTION_PRE); PendingIntent pendingIntentPre = PendingIntent.getBroadcast(context, 0, intentPre, PendingIntent.FLAG_UPDATE_CURRENT); views.setOnClickPendingIntent(R.id.widget_button_pre, pendingIntentPre); - Intent intentNext = new Intent(context, WinBollNewsWidgetClickListener.class); - intentNext.setAction(WinBollNewsWidgetClickListener.ACTION_NEXT); + Intent intentNext = new Intent(context, APPNewsWidgetClickListener.class); + intentNext.setAction(APPNewsWidgetClickListener.ACTION_NEXT); PendingIntent pendingIntentNext = PendingIntent.getBroadcast(context, 0, intentNext, PendingIntent.FLAG_UPDATE_CURRENT); views.setOnClickPendingIntent(R.id.widget_button_next, pendingIntentNext); diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/widgets/WinBollNewsWidgetClickListener.java b/appbase/src/main/java/cc/winboll/studio/appbase/widgets/APPNewsWidgetClickListener.java similarity index 70% rename from appbase/src/main/java/cc/winboll/studio/appbase/widgets/WinBollNewsWidgetClickListener.java rename to appbase/src/main/java/cc/winboll/studio/appbase/widgets/APPNewsWidgetClickListener.java index 52e3ee8..bfe263f 100644 --- a/appbase/src/main/java/cc/winboll/studio/appbase/widgets/WinBollNewsWidgetClickListener.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/widgets/APPNewsWidgetClickListener.java @@ -10,11 +10,11 @@ import android.content.Context; import android.content.Intent; import cc.winboll.studio.libappbase.LogUtils; -public class WinBollNewsWidgetClickListener extends BroadcastReceiver { +public class APPNewsWidgetClickListener extends BroadcastReceiver { - public static final String TAG = "WinBollNewsWidgetClickListener"; - public static final String ACTION_PRE = "cc.winboll.studio.appbase.widgets.WinBollNewsWidgetClickListener.ACTION_PRE"; - public static final String ACTION_NEXT = "cc.winboll.studio.appbase.widgets.WinBollNewsWidgetClickListener.ACTION_NEXT"; + public static final String TAG = "APPNewsWidgetClickListener"; + public static final String ACTION_PRE = APPNewsWidgetClickListener.class.getName() + ".ACTION_PRE"; + public static final String ACTION_NEXT = APPNewsWidgetClickListener.class.getName() + ".ACTION_NEXT"; @Override public void onReceive(Context context, Intent intent) { diff --git a/appbase/src/main/res/layout/activity_main.xml b/appbase/src/main/res/layout/activity_main.xml index 3af84c5..3cca484 100644 --- a/appbase/src/main/res/layout/activity_main.xml +++ b/appbase/src/main/res/layout/activity_main.xml @@ -84,28 +84,62 @@