From 5a43cb75120f69a57d5238e855eef8e82b3e4544 Mon Sep 17 00:00:00 2001 From: hxb <hxb@hdlchina.com.cn> Date: 星期五, 25 四月 2025 13:15:22 +0800 Subject: [PATCH] 加了前台服务 --- app/src/main/java/com/hdl/photovoltaic/uni/HDLUniMPSDKManager.java | 6 ++ app/src/main/java/com/hdl/photovoltaic/services/ForeService.java | 125 +++++++++++++++++++++++++++++++++++++++++ app/src/main/AndroidManifest.xml | 7 ++ app/src/main/java/com/hdl/photovoltaic/ui/CPowerStationActivity.java | 16 +++++ app/src/main/java/com/hdl/photovoltaic/HDLApp.java | 9 ++ 5 files changed, 162 insertions(+), 1 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5008587..5fee0fc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -56,6 +56,8 @@ <uses-permission android:name="com.hdl.photovoltaic.permission.JPUSH_MESSAGE" /> <!-- 閫傞厤Android13锛屽脊鍑洪�氱煡蹇呴』鏉冮檺 --> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> + <!-- 鍓嶅彴鏈嶅姟鏉冮檺 --> + <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <queries> <package android:name="com.hdl.photovoltaic.services" /> @@ -230,6 +232,11 @@ </intent-filter> </service> + <service + android:name=".services.ForeService" + android:enabled="true" + android:exported="true" /> + <meta-data android:name="design_height_in_dp" android:value="812" /> diff --git a/app/src/main/java/com/hdl/photovoltaic/HDLApp.java b/app/src/main/java/com/hdl/photovoltaic/HDLApp.java index ab82823..2ddf9e6 100644 --- a/app/src/main/java/com/hdl/photovoltaic/HDLApp.java +++ b/app/src/main/java/com/hdl/photovoltaic/HDLApp.java @@ -7,6 +7,7 @@ import android.content.res.Configuration; import android.os.Build; import android.os.LocaleList; +import android.os.Process; import android.os.SystemClock; import android.text.TextUtils; import android.util.Log; @@ -60,6 +61,7 @@ public class HDLApp extends Application { + final String TAG=HDLApp.class.getName(); //鎺у埗鎵撳嵃 Debug妯″紡鎵撳嵃 private Boolean isLogEnabled = true; //涓夋柟sdk鍒濆鍖栨爣璇� @@ -85,7 +87,12 @@ public void onCreate() { super.onCreate(); // 鑾峰彇褰撳墠杩涚▼鐨凱ID - Log.d("杩涚▼===", android.os.Process.myPid() + ""); + String processMessage= "杩涚▼ID:"+Process.myPid()+" 杩涚▼鍚嶏細"+RuningAcitvityUtil.getAppName(getBaseContext()); + Log.d(TAG, processMessage); + if (RuningAcitvityUtil.getAppName(getBaseContext()).contains(":")) { + //闈炲師鐢熻繘绋嬶紝鐢ㄥ垵濮嬪寲鍚庨潰鐨� + return; + } mHDLApp = this; SharedPreUtils.init(this); getAppLanguage(); diff --git a/app/src/main/java/com/hdl/photovoltaic/services/ForeService.java b/app/src/main/java/com/hdl/photovoltaic/services/ForeService.java new file mode 100644 index 0000000..9a98d1a --- /dev/null +++ b/app/src/main/java/com/hdl/photovoltaic/services/ForeService.java @@ -0,0 +1,125 @@ +package com.hdl.photovoltaic.services; + +import android.annotation.SuppressLint; +import android.annotation.TargetApi; +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.app.Service; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.os.Build; +import android.os.IBinder; +import android.text.TextUtils; +import android.util.Log; + +import static android.app.Notification.VISIBILITY_SECRET; + +import androidx.core.app.NotificationCompat; + +import com.hdl.photovoltaic.R; + +/*** + * @Description: 鍓嶅彴鏈嶅姟 + * channelId蹇呴』瑕佷竴鑷达紝鍚﹀垯浼氭姤 android.app.RemoteServiceException: Bad notification for startForeground 閿欒 + * 8.0涔嬩笂涓�瀹氳浣跨敤 NotificationChannel 閫傞厤涓嬫墠琛� + * 姝ラ + * 1.閫氳繃 鈥滈�氱煡鏈嶅姟鈥� 鍒涘缓 NotificationChannel + * 2.閫氳繃 Notification.Builder 鏋勯�犲櫒 鍒涘缓 Notification + * 3.閫氳繃 startForeground 寮�鍚湇鍔� + * 4.楂樹簬9.0鐨勭増鏈� manifest闇�瑕佸鍔� <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> + * + * 鍦╫nCreate涓垱寤轰竴涓箍鎾帴鏀跺櫒锛岃瘯璇曡兘涓嶈兘鎺ユ敹鍒� 寮�鍗曟垨鑰呴绾︾粨鏉熷悗鐨勯�氱煡 + */ +public class ForeService extends Service { + + final String TAG=ForeService.class.getName(); + @Override + public IBinder onBind(Intent intent) { + return null; + } + + @SuppressLint("ForegroundServiceType") + @Override + public void onCreate() { + super.onCreate(); + Log.d(TAG, "ForeService onCreate() 杩涚▼Id:"+android.os.Process.myPid() ); + startForeground(1, getNotification(getString(R.string.app_name), "Running")); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + return START_STICKY; + } + + @Override + public void onDestroy() { + super.onDestroy(); + //鍋滄鐨勬椂鍊欓攢姣佸墠鍙版湇鍔� + stopForeground(true); + } + + + private Notification getNotification(String title, String message) { + createNotificationChannel(); + + //鍒涘缓涓�涓�氱煡娑堟伅鐨勬瀯閫犲櫒 + Notification.Builder builder = new Notification.Builder(this); + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { + //Android8.0寮�濮嬪繀椤荤粰姣忎釜閫氱煡鍒嗛厤瀵瑰簲鐨勬笭閬� + builder = new Notification.Builder(this, "f_channel_id"); + } + builder.setAutoCancel(true)//璁剧疆鏄惁鍏佽鑷姩娓呴櫎 + .setSmallIcon(R.drawable.logo)//璁剧疆鐘舵�佹爮閲岀殑灏忓浘鏍� + .setContentTitle(title)//璁剧疆閫氱煡鏍忛噷闈㈢殑鏍囬鏂囨湰 + .setContentText(message);//璁剧疆閫氱煡鏍忛噷闈㈢殑鍐呭鏂囨湰 + //鏍规嵁娑堟伅鏋勯�犲櫒鍒涘缓涓�涓�氱煡瀵硅薄 + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) { + return builder.build(); + } + return null; + } + + @TargetApi(Build.VERSION_CODES.O) + private void createNotificationChannel() { + NotificationChannel channel = new NotificationChannel("f_channel_id", "CHANNEL_NAME", NotificationManager.IMPORTANCE_HIGH); + //鏄惁缁曡繃璇峰嬁鎵撴壈妯″紡 + channel.canBypassDnd(); + //闂厜鐏� + channel.enableLights(true); + //閿佸睆鏄剧ず閫氱煡 + channel.setLockscreenVisibility(VISIBILITY_SECRET); + //闂叧鐏殑鐏厜棰滆壊 + channel.setLightColor(Color.RED); + //妗岄潰launcher鐨勬秷鎭鏍� + channel.canShowBadge(); + //鏄惁鍏佽闇囧姩 + channel.enableVibration(false); + //鑾峰彇绯荤粺閫氱煡鍝嶉搩澹伴煶鐨勯厤缃� + channel.getAudioAttributes(); + //鑾峰彇閫氱煡鍙栧埌缁� + channel.getGroup(); + //璁剧疆鍙粫杩� 璇峰嬁鎵撴壈妯″紡 + channel.setBypassDnd(true); + //璁剧疆闇囧姩妯″紡 + channel.setVibrationPattern(new long[]{100, 100, 200}); + //鏄惁浼氭湁鐏厜 + channel.shouldShowLights(); + getManager().createNotificationChannel(channel); + } + + private NotificationManager mManager; + + private NotificationManager getManager() { + if (mManager == null) { + mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + } + return mManager; + } +} + diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/CPowerStationActivity.java b/app/src/main/java/com/hdl/photovoltaic/ui/CPowerStationActivity.java index b2db396..7ca79f6 100644 --- a/app/src/main/java/com/hdl/photovoltaic/ui/CPowerStationActivity.java +++ b/app/src/main/java/com/hdl/photovoltaic/ui/CPowerStationActivity.java @@ -1,6 +1,8 @@ package com.hdl.photovoltaic.ui; +import android.content.Intent; +import android.os.Build; import android.os.Bundle; import android.os.Process; import android.os.SystemClock; @@ -29,6 +31,7 @@ import com.hdl.photovoltaic.other.HdlResidenceLogic; import com.hdl.photovoltaic.other.HdlThreadLogic; import com.hdl.photovoltaic.other.HdlUniLogic; +import com.hdl.photovoltaic.services.ForeService; import com.hdl.photovoltaic.ui.bean.DeviceRemoteInfo; import com.hdl.photovoltaic.ui.bean.HouseIdBean; import com.hdl.photovoltaic.ui.bean.OidBean; @@ -83,6 +86,18 @@ this.pushTokens(); //鑾峰彇浜戠鑴氭湰 HdlESLocalJsonLogic.getInstance().getAllHdlESLocalJson(); + mForegroundService= new Intent(this, ForeService.class); + startService(); + } + + Intent mForegroundService; + private void startService(){ + // Android 8.0浣跨敤startForegroundService鍦ㄥ墠鍙板惎鍔ㄦ柊鏈嶅姟 + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){ + startForegroundService(mForegroundService); + } else { + startService(mForegroundService); + } } @Override @@ -308,6 +323,7 @@ HdlUniLogic.getInstance().checkRemoveOtherUniMPEventCallBack(); //绉婚櫎鐩戝惉 HDLLinkLocalSdk.getInstance().removeAllTopicsListener(allTopicsListener); + stopService(mForegroundService); } /** diff --git a/app/src/main/java/com/hdl/photovoltaic/uni/HDLUniMPSDKManager.java b/app/src/main/java/com/hdl/photovoltaic/uni/HDLUniMPSDKManager.java index 50eeccf..7a05aad 100644 --- a/app/src/main/java/com/hdl/photovoltaic/uni/HDLUniMPSDKManager.java +++ b/app/src/main/java/com/hdl/photovoltaic/uni/HDLUniMPSDKManager.java @@ -2,8 +2,11 @@ import android.app.Application; import android.content.Context; +import android.os.Build; import android.os.Environment; +import android.os.Process; import android.text.TextUtils; +import android.util.Log; import com.google.gson.Gson; @@ -25,6 +28,7 @@ import java.util.HashMap; import io.dcloud.common.DHInterface.ICallBack; +import io.dcloud.common.util.RuningAcitvityUtil; import io.dcloud.feature.sdk.DCSDKInitConfig; import io.dcloud.feature.sdk.DCUniMPSDK; import io.dcloud.feature.sdk.Interface.IDCUniMPPreInitCallback; @@ -134,6 +138,8 @@ public void onUniMPEventReceive(String appid, String event, Object data, DCUniMPJSCallback callback) { // handelUniMPEventReceive(appid, event, data, callback); HdlLogLogic.print("鏀跺埌灏忕▼搴忛�氱煡 event=" + event); + String processMessage=Process.myPid()+" "; + HdlLogLogic.print("杩涚▼淇℃伅锛�" + processMessage); //鏆傛椂閫氳繃杩欎釜澶勭悊灏忕▼搴忓悓鏃跺鏉$浉鍚岀殑璇锋眰 if (data == null) { HdlLogLogic.print("鏀跺埌灏忕▼搴忛�氱煡,data鏁版嵁涓簄ull銆�", true); -- Gitblit v1.8.0