From b0e81fc960a95ab2a65f1b2bbcbcb9f6c1b86ba6 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Thu, 13 Feb 2025 07:29:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=BB=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contacts/build.gradle | 2 +- contacts/build.properties | 4 +- contacts/src/main/AndroidManifest.xml | 13 +- .../winboll/studio/contacts/MainActivity.java | 43 ++++-- .../contacts/beans/MainServiceBean.java | 68 +++++++++ .../contacts/receivers/MainReceiver.java | 28 ++++ .../studio/contacts/services/MainService.java | 142 ++++++++++++++++++ .../src/main/res/layout/activity_main.xml | 18 ++- winboll-shared/build.properties | 4 +- 9 files changed, 297 insertions(+), 25 deletions(-) create mode 100644 contacts/src/main/java/cc/winboll/studio/contacts/beans/MainServiceBean.java create mode 100644 contacts/src/main/java/cc/winboll/studio/contacts/receivers/MainReceiver.java create mode 100644 contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java diff --git a/contacts/build.gradle b/contacts/build.gradle index c7a26c8..83e881e 100644 --- a/contacts/build.gradle +++ b/contacts/build.gradle @@ -64,7 +64,7 @@ dependencies { api 'com.google.android.material:material:1.1.0' api 'cc.winboll.studio:libapputils:9.3.2' - api 'cc.winboll.studio:libappbase:1.4.1' + api 'cc.winboll.studio:libappbase:1.5.0' api fileTree(dir: 'libs', include: ['*.jar']) } diff --git a/contacts/build.properties b/contacts/build.properties index fb546db..5962172 100644 --- a/contacts/build.properties +++ b/contacts/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Wed Feb 12 15:27:12 GMT 2025 +#Wed Feb 12 23:28:05 GMT 2025 stageCount=0 libraryProject=winboll-shared baseVersion=1.0 publishVersion=1.0.0 -buildCount=2 +buildCount=6 baseBetaVersion=1.0.1 diff --git a/contacts/src/main/AndroidManifest.xml b/contacts/src/main/AndroidManifest.xml index 915c449..509b1b2 100644 --- a/contacts/src/main/AndroidManifest.xml +++ b/contacts/src/main/AndroidManifest.xml @@ -42,7 +42,18 @@ + + + + + + + + + + + - + \ No newline at end of file diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/MainActivity.java b/contacts/src/main/java/cc/winboll/studio/contacts/MainActivity.java index 60e9f78..07ef89c 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/MainActivity.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/MainActivity.java @@ -1,28 +1,23 @@ package cc.winboll.studio.contacts; import android.content.Intent; -import android.net.Uri; import android.os.Bundle; -import android.text.TextUtils; import android.view.Menu; import android.view.MenuItem; +import android.view.View; +import android.widget.CheckBox; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import cc.winboll.studio.contacts.BuildConfig; import cc.winboll.studio.contacts.R; +import cc.winboll.studio.contacts.beans.MainServiceBean; +import cc.winboll.studio.contacts.services.MainService; import cc.winboll.studio.libappbase.LogUtils; +import cc.winboll.studio.libapputils.app.AboutActivityFactory; import cc.winboll.studio.libapputils.app.IWinBollActivity; import cc.winboll.studio.libapputils.app.WinBollActivityManager; import cc.winboll.studio.libapputils.bean.APPInfo; -import cc.winboll.studio.libapputils.util.UriUtils; -import cc.winboll.studio.libapputils.view.StringToQrCodeView; import cc.winboll.studio.libapputils.view.YesNoAlertDialog; -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.UUID; -import cc.winboll.studio.libapputils.app.AboutActivityFactory; final public class MainActivity extends AppCompatActivity implements IWinBollActivity { @@ -32,12 +27,14 @@ final public class MainActivity extends AppCompatActivity implements IWinBollAct public static final int REQUEST_ABOUT_ACTIVITY = 1; Toolbar mToolbar; - + CheckBox cbMainService; + MainServiceBean mMainServiceBean; + @Override public AppCompatActivity getActivity() { return this; } - + @Override public APPInfo getAppInfo() { String szBranchName = "contacts"; @@ -73,9 +70,27 @@ final public class MainActivity extends AppCompatActivity implements IWinBollAct getSupportActionBar().setDisplayHomeAsUpEnabled(true); } getSupportActionBar().setSubtitle(getTag()); - + //ToastUtils.show("WinBollUI_TYPE " + WinBollApplication.getWinBollUI_TYPE()); LogUtils.d(TAG, "BuildConfig.DEBUG : " + Boolean.toString(BuildConfig.DEBUG)); + + mMainServiceBean = MainServiceBean.loadBean(this, MainServiceBean.class); + if (mMainServiceBean == null) { + mMainServiceBean = new MainServiceBean(); + } + cbMainService = findViewById(R.id.activitymainCheckBox1); + cbMainService.setChecked(mMainServiceBean.isEnable()); + cbMainService.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View view) { + + if (cbMainService.isChecked()) { + MainService.startISOSService(MainActivity.this); + } else { + MainService.stopISOSService(MainActivity.this); + } + } + }); } @Override @@ -146,7 +161,7 @@ final public class MainActivity extends AppCompatActivity implements IWinBollAct public boolean isEnableDisplayHomeAsUp() { return false; } - + @Override public void onBackPressed() { exit(); diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/beans/MainServiceBean.java b/contacts/src/main/java/cc/winboll/studio/contacts/beans/MainServiceBean.java new file mode 100644 index 0000000..de752f3 --- /dev/null +++ b/contacts/src/main/java/cc/winboll/studio/contacts/beans/MainServiceBean.java @@ -0,0 +1,68 @@ +package cc.winboll.studio.contacts.beans; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/13 07:06:13 + */ +import android.util.JsonReader; +import android.util.JsonWriter; +import cc.winboll.studio.libappbase.BaseBean; +import java.io.IOException; + +public class MainServiceBean extends BaseBean { + + public static final String TAG = "MainServiceBean"; + + boolean isEnable; + + public MainServiceBean() { + this.isEnable = false; + } + + public void setIsEnable(boolean isEnable) { + this.isEnable = isEnable; + } + + public boolean isEnable() { + return isEnable; + } + + @Override + public String getName() { + return MainServiceBean.class.getName(); + } + + @Override + public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException { + super.writeThisToJsonWriter(jsonWriter); + MainServiceBean bean = this; + jsonWriter.name("isEnable").value(bean.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/contacts/src/main/java/cc/winboll/studio/contacts/receivers/MainReceiver.java b/contacts/src/main/java/cc/winboll/studio/contacts/receivers/MainReceiver.java new file mode 100644 index 0000000..6315f2f --- /dev/null +++ b/contacts/src/main/java/cc/winboll/studio/contacts/receivers/MainReceiver.java @@ -0,0 +1,28 @@ +package cc.winboll.studio.contacts.receivers; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import com.hjq.toast.ToastUtils; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/13 06:58:04 + * @Describe 主要广播接收器 + */ +public class MainReceiver extends BroadcastReceiver { + + public static final String TAG = "MainReceiver"; + public static final String ACTION_BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED"; + + @Override + public void onReceive(Context context, Intent intent) { + String szAction = intent.getAction(); + if (szAction.equals(ACTION_BOOT_COMPLETED)) { + ToastUtils.show("ACTION_BOOT_COMPLETED"); + } else { + ToastUtils.show("szAction"); + } + } + +} diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java b/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java new file mode 100644 index 0000000..25ad21a --- /dev/null +++ b/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java @@ -0,0 +1,142 @@ +package cc.winboll.studio.contacts.services; + +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.os.IBinder; +import cc.winboll.studio.contacts.beans.MainServiceBean; +import cc.winboll.studio.libappbase.ISOSAPP; +import cc.winboll.studio.libappbase.ISOSService; +import cc.winboll.studio.libappbase.LogUtils; +import com.hjq.toast.ToastUtils; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/13 06:56:41 + * @Describe 拨号主服务 + */ +public class MainService extends Service implements ISOSService { + + public static final String TAG = "MainService"; + + public static final String ACTION_ENABLE = MainService.class.getName() + ".ACTION_ENABLE"; + public static final String ACTION_DISABLE = MainService.class.getName() + ".ACTION_DISABLE"; + + MainServiceBean mMainServiceBean; + static MainThread _MainThread; + public static synchronized MainThread getMainThreadInstance() { + if (_MainThread == null) { + _MainThread = new MainThread(); + } + return _MainThread; + } + + @Override + public IBinder onBind(Intent intent) { + return null; + } + + @Override + public void onCreate() { + super.onCreate(); + LogUtils.d(TAG, "onCreate"); + mMainServiceBean = MainServiceBean.loadBean(this, MainServiceBean.class); + runMainThread(); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + LogUtils.d(TAG, "onStartCommand"); + if (intent.getBooleanExtra(ISOSService.EXTRA_ENABLE, false)) { + LogUtils.d(TAG, "onStartCommand enable service"); + mMainServiceBean.setIsEnable(true); + MainServiceBean.saveBean(this, mMainServiceBean); + } + + runMainThread(); + + //return super.onStartCommand(intent, flags, startId); + return mMainServiceBean.isEnable() ? Service.START_STICKY: super.onStartCommand(intent, flags, startId); + } + + void runMainThread() { + mMainServiceBean = MainServiceBean.loadBean(this, MainServiceBean.class); + if (mMainServiceBean.isEnable() + && _MainThread == null) { + getMainThreadInstance().start(); + } + } + + @Override + public Intent getISOSServiceIntentWhichAskForHelp() { + Intent intentService = new Intent(); + intentService.putExtra(ISOSAPP.EXTRA_PACKAGE, this.getPackageName()); + intentService.putExtra(ISOSAPP.EXTRA_SERVICE, this.getClass().getName()); + return intentService; + } + + @Override + public boolean isEnable() { + mMainServiceBean = MainServiceBean.loadBean(this, MainServiceBean.class); + return mMainServiceBean.isEnable(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + LogUtils.d(TAG, "onDestroy"); + mMainServiceBean = MainServiceBean.loadBean(this, MainServiceBean.class); + if (mMainServiceBean.isEnable()) { + LogUtils.d(TAG, "mSimpleOperateSignalCenterServiceBean.isEnable()"); + ISOSAPP iSOSAPP = (ISOSAPP)getApplication(); + iSOSAPP.helpISOSService(getISOSServiceIntentWhichAskForHelp()); + } + if (_MainThread != null) { + _MainThread.isExist = true; + _MainThread = null; + } + } + + public static void stopISOSService(Context context) { + LogUtils.d(TAG, "stopISOSService"); + MainServiceBean bean = new MainServiceBean(); + bean.setIsEnable(false); + MainServiceBean.saveBean(context, bean); + context.stopService(new Intent(context, MainService.class)); + } + + public static void startISOSService(Context context) { + LogUtils.d(TAG, "startISOSService"); + MainServiceBean bean = new MainServiceBean(); + bean.setIsEnable(true); + MainServiceBean.saveBean(context, bean); + context.startService(new Intent(context, MainService.class)); + } + + static class MainThread extends Thread { + volatile boolean isExist = false; + + public void setIsExist(boolean isExist) { + this.isExist = isExist; + } + + public boolean isExist() { + return isExist; + } + + @Override + public void run() { + super.run(); + while (!isExist) { + LogUtils.d(TAG, "run"); + ToastUtils.show("run"); + try { + sleep(1000); + } catch (InterruptedException e) { + LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); + } + } + } + + } +} diff --git a/contacts/src/main/res/layout/activity_main.xml b/contacts/src/main/res/layout/activity_main.xml index ba8cd96..980222d 100644 --- a/contacts/src/main/res/layout/activity_main.xml +++ b/contacts/src/main/res/layout/activity_main.xml @@ -2,7 +2,7 @@ @@ -19,10 +19,18 @@ android:layout_weight="1.0" android:background="#FFEEEEEE"> - + + + + + diff --git a/winboll-shared/build.properties b/winboll-shared/build.properties index fb546db..5962172 100644 --- a/winboll-shared/build.properties +++ b/winboll-shared/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Wed Feb 12 15:27:12 GMT 2025 +#Wed Feb 12 23:28:05 GMT 2025 stageCount=0 libraryProject=winboll-shared baseVersion=1.0 publishVersion=1.0.0 -buildCount=2 +buildCount=6 baseBetaVersion=1.0.1