应用命名重构调试完成
This commit is contained in:
		| @@ -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}") | ||||
|         } | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -54,19 +54,25 @@ | ||||
|         <receiver android:name="cc.winboll.studio.appbase.receivers.MainReceiver"> | ||||
|  | ||||
|             <intent-filter> | ||||
|  | ||||
|                 <action android:name="cc.winboll.studio.appbase.receivers.MainReceiver"/> | ||||
|  | ||||
|             </intent-filter> | ||||
|  | ||||
|         </receiver> | ||||
|  | ||||
|         <receiver | ||||
|             android:name=".widgets.WinBollNewsWidget" | ||||
|             android:name=".widgets.APPNewsWidget" | ||||
|             android:exported="true"> | ||||
|  | ||||
|             <intent-filter> | ||||
|                 <action android:name="cc.winboll.studio.appbase.widgets.WinBollNewsWidget.ACTION_WAKEUP_SERVICE"/> | ||||
|                 <action android:name="cc.winboll.studio.appbase.widgets.WinBollNewsWidget.ACTION_RELOAD_REPORT"/> | ||||
|  | ||||
|                 <action android:name="cc.winboll.studio.appbase.widgets.APPNewsWidget.ACTION_WAKEUP_SERVICE"/> | ||||
|  | ||||
|                 <action android:name="cc.winboll.studio.appbase.widgets.APPNewsWidget.ACTION_RELOAD_REPORT"/> | ||||
|  | ||||
|                 <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> | ||||
|  | ||||
|             </intent-filter> | ||||
|  | ||||
|             <meta-data | ||||
| @@ -75,13 +81,13 @@ | ||||
|  | ||||
|         </receiver> | ||||
|  | ||||
|         <receiver android:name=".widgets.WinBollNewsWidgetClickListener"> | ||||
|         <receiver android:name=".widgets.APPNewsWidgetClickListener"> | ||||
|  | ||||
|             <intent-filter> | ||||
|  | ||||
|                 <action android:name="cc.winboll.studio.appbase.widgets.WinBollNewsWidgetClickListener.ACTION_PRE"/> | ||||
|                 <action android:name="cc.winboll.studio.appbase.widgets.APPNewsWidgetClickListener.ACTION_PRE"/> | ||||
|  | ||||
|                 <action android:name="cc.winboll.studio.appbase.widgets.WinBollNewsWidgetClickListener.ACTION_NEXT"/> | ||||
|                 <action android:name="cc.winboll.studio.appbase.widgets.APPNewsWidgetClickListener.ACTION_NEXT"/> | ||||
|  | ||||
|             </intent-filter> | ||||
|  | ||||
| @@ -91,6 +97,11 @@ | ||||
|             android:name="android.max_aspect" | ||||
|             android:value="4.0"/> | ||||
|  | ||||
|         <service android:name="cc.winboll.studio.appbase.services.TestDemoBindService" | ||||
|             android:exported="true"/> | ||||
|              | ||||
|         <service android:name="cc.winboll.studio.appbase.services.TestDemoService" | ||||
|             android:exported="true"/> | ||||
|  | ||||
|     </application> | ||||
|  | ||||
|   | ||||
| @@ -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); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -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()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -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 | ||||
| @@ -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; | ||||
|     } | ||||
| } | ||||
| @@ -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(); | ||||
|   | ||||
| @@ -45,7 +45,7 @@ public class MainService extends Service { | ||||
|     AssistantService mAssistantService; | ||||
|     boolean isBound = false; | ||||
|     MainReceiver mMainReceiver; | ||||
|     ArrayList<SOSConnection> mSOSConnectionList; | ||||
|     ArrayList<APPConnection> 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<SOSConnection>(); | ||||
|         mAPPModelConnectionList = new ArrayList<APPConnection>(); | ||||
|  | ||||
|         _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); | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -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"); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -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()"); | ||||
| @@ -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<WinBollNewsBean> _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); | ||||
|  | ||||
|   | ||||
| @@ -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) { | ||||
| @@ -84,28 +84,62 @@ | ||||
| 								<Button | ||||
| 									android:layout_width="wrap_content" | ||||
| 									android:layout_height="wrap_content" | ||||
| 									android:text="StartTestService" | ||||
| 									android:text="SartTestDemoService" | ||||
| 									android:textAllCaps="false" | ||||
| 									android:onClick="onStartTestService"/> | ||||
| 									android:onClick="onSartTestDemoService"/> | ||||
|  | ||||
| 								<Button | ||||
| 									android:layout_width="wrap_content" | ||||
| 									android:layout_height="wrap_content" | ||||
| 									android:text="StopTestService" | ||||
| 									android:text="StopTestDemoService" | ||||
| 									android:textAllCaps="false" | ||||
| 									android:onClick="onStopTestService"/> | ||||
| 									android:onClick="onStopTestDemoService"/> | ||||
|  | ||||
| 								<Button | ||||
| 									android:layout_width="wrap_content" | ||||
| 									android:layout_height="wrap_content" | ||||
| 									android:text="StopTestServiceNoSettings" | ||||
| 									android:text="StopTestDemoServiceNoSettings" | ||||
| 									android:textAllCaps="false" | ||||
| 									android:onClick="onStopTestServiceNoSettings"/> | ||||
| 									android:onClick="onStopTestDemoServiceNoSettings"/> | ||||
|  | ||||
| 							</LinearLayout> | ||||
|  | ||||
| 						</HorizontalScrollView> | ||||
|                          | ||||
|                         <HorizontalScrollView | ||||
|                             android:layout_width="match_parent" | ||||
|                             android:layout_height="wrap_content"> | ||||
|  | ||||
|                             <LinearLayout | ||||
|                                 android:orientation="horizontal" | ||||
|                                 android:layout_width="wrap_content" | ||||
|                                 android:layout_height="wrap_content"> | ||||
|  | ||||
|                                 <Button | ||||
|                                     android:layout_width="wrap_content" | ||||
|                                     android:layout_height="wrap_content" | ||||
|                                     android:text="SartTestDemoBindService" | ||||
|                                     android:textAllCaps="false" | ||||
|                                     android:onClick="onSartTestDemoBindService"/> | ||||
|  | ||||
|                                 <Button | ||||
|                                     android:layout_width="wrap_content" | ||||
|                                     android:layout_height="wrap_content" | ||||
|                                     android:text="StopTestDemoBindService" | ||||
|                                     android:textAllCaps="false" | ||||
|                                     android:onClick="onStopTestDemoBindService"/> | ||||
|  | ||||
|                                 <Button | ||||
|                                     android:layout_width="wrap_content" | ||||
|                                     android:layout_height="wrap_content" | ||||
|                                     android:text="StopTestDemoBindServiceNoSettings" | ||||
|                                     android:textAllCaps="false" | ||||
|                                     android:onClick="onStopTestDemoBindServiceNoSettings"/> | ||||
|  | ||||
|                             </LinearLayout> | ||||
|  | ||||
| 						</HorizontalScrollView> | ||||
|                          | ||||
| 						<Button | ||||
| 							android:layout_width="wrap_content" | ||||
| 							android:layout_height="wrap_content" | ||||
| @@ -123,23 +157,23 @@ | ||||
| 						<Button | ||||
| 							android:layout_width="wrap_content" | ||||
| 							android:layout_height="wrap_content" | ||||
| 							android:text="TestStopWithoutSettingEnable" | ||||
| 							android:text="TestStopMainServiceWithoutSettingEnable" | ||||
| 							android:textAllCaps="false" | ||||
| 							android:onClick="onTestStopWithoutSettingEnable"/> | ||||
| 							android:onClick="onTestStopMainServiceWithoutSettingEnable"/> | ||||
|  | ||||
| 						<Button | ||||
| 							android:layout_width="wrap_content" | ||||
| 							android:layout_height="wrap_content" | ||||
| 							android:text="TestStartWithString" | ||||
| 							android:text="TestUseComponentStartService" | ||||
| 							android:textAllCaps="false" | ||||
| 							android:onClick="onTestStartWithString"/> | ||||
| 							android:onClick="onTestUseComponentStartService"/> | ||||
|  | ||||
| 						<Button | ||||
| 							android:layout_width="wrap_content" | ||||
| 							android:layout_height="wrap_content" | ||||
| 							android:text="SOS" | ||||
| 							android:text="TestSOS" | ||||
| 							android:textAllCaps="false" | ||||
| 							android:onClick="onSOS"/> | ||||
| 							android:onClick="onTestSOS"/> | ||||
|  | ||||
| 					</LinearLayout> | ||||
|  | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -17,11 +17,13 @@ public class WinBoll { | ||||
|     public static final String EXTRA_APPMODEL = "EXTRA_APPMODEL"; | ||||
|  | ||||
|     public static void bindToAPPBase(Context context, String appMainService) { | ||||
|         LogUtils.d(TAG, "bindToAPPBase(...)"); | ||||
|         String toPackage = "cc.winboll.studio.appbase"; | ||||
|         startBind(context, toPackage, appMainService); | ||||
|     } | ||||
|  | ||||
|     public static void bindToAPPBaseBeta(Context context, String appMainService) { | ||||
|         LogUtils.d(TAG, "bindToAPPBaseBeta(...)"); | ||||
|         String toPackage = "cc.winboll.studio.appbase.beta"; | ||||
|         startBind(context, toPackage, appMainService); | ||||
|     } | ||||
|   | ||||
| @@ -17,7 +17,6 @@ import cc.winboll.studio.libappbase.utils.ServiceUtils; | ||||
| import com.hjq.toast.ToastUtils; | ||||
| import android.content.ServiceConnection; | ||||
| import android.os.IBinder; | ||||
| import cc.winboll.studio.libappbase.services.TestService; | ||||
|  | ||||
| public class StatusWidget extends AppWidgetProvider { | ||||
|  | ||||
| @@ -52,12 +51,12 @@ public class StatusWidget extends AppWidgetProvider { | ||||
|         PendingIntent pendingIntentAppButton = PendingIntent.getBroadcast(context, 0, intentAppButton, PendingIntent.FLAG_UPDATE_CURRENT); | ||||
|         views.setOnClickPendingIntent(R.id.ivapp, pendingIntentAppButton); | ||||
|  | ||||
|         boolean isActive = ServiceUtils.isServiceRunning(context, TestService.class.getName()); | ||||
|         if (isActive) { | ||||
|             views.setImageViewResource(R.id.ivapp, cc.winboll.studio.libappbase.R.drawable.ic_launcher); | ||||
|         } else { | ||||
|             views.setImageViewResource(R.id.ivapp, cc.winboll.studio.libappbase.R.drawable.ic_launcher_disable); | ||||
|         } | ||||
| //        boolean isActive = ServiceUtils.isServiceRunning(context, TestService.class.getName()); | ||||
| //        if (isActive) { | ||||
| //            views.setImageViewResource(R.id.ivapp, cc.winboll.studio.libappbase.R.drawable.ic_launcher); | ||||
| //        } else { | ||||
| //            views.setImageViewResource(R.id.ivapp, cc.winboll.studio.libappbase.R.drawable.ic_launcher_disable); | ||||
| //        } | ||||
|         appWidgetManager.updateAppWidget(appWidgetId, views); | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 ZhanGSKen
					ZhanGSKen