通知模块调试ing...
This commit is contained in:
		| @@ -9,7 +9,6 @@ import cc.winboll.studio.mymessagemanager.App; | ||||
| import cc.winboll.studio.mymessagemanager.activitys.SMSActivity; | ||||
| import cc.winboll.studio.mymessagemanager.beans.SMSBean; | ||||
| import cc.winboll.studio.mymessagemanager.utils.AppConfigUtil; | ||||
| import cc.winboll.studio.mymessagemanager.utils.NotificationUtil; | ||||
| import cc.winboll.studio.mymessagemanager.utils.PhoneUtil; | ||||
| import cc.winboll.studio.mymessagemanager.utils.SMSReceiveRuleUtil; | ||||
| import cc.winboll.studio.mymessagemanager.utils.SMSRecycleUtil; | ||||
|   | ||||
| @@ -5,6 +5,7 @@ package cc.winboll.studio.mymessagemanager.services; | ||||
|  * @Date 2024/07/19 14:30:57 | ||||
|  * @Describe 应用主要服务组件类 | ||||
|  */ | ||||
| import android.app.Notification; | ||||
| import android.app.Service; | ||||
| import android.content.ComponentName; | ||||
| import android.content.Context; | ||||
| @@ -14,11 +15,12 @@ import android.content.ServiceConnection; | ||||
| import android.os.IBinder; | ||||
| import cc.winboll.studio.libappbase.LogUtils; | ||||
| import cc.winboll.studio.mymessagemanager.R; | ||||
| import cc.winboll.studio.mymessagemanager.activitys.MainActivity; | ||||
| import cc.winboll.studio.mymessagemanager.beans.MessageNotificationBean; | ||||
| import cc.winboll.studio.mymessagemanager.receivers.SMSRecevier; | ||||
| import cc.winboll.studio.mymessagemanager.services.MainService; | ||||
| import cc.winboll.studio.mymessagemanager.utils.AppConfigUtil; | ||||
| import cc.winboll.studio.mymessagemanager.utils.NotificationUtil; | ||||
| import cc.winboll.studio.mymessagemanager.utils.NotificationHelper; | ||||
| import cc.winboll.studio.mymessagemanager.utils.ServiceUtil; | ||||
| import com.hjq.toast.ToastUtils; | ||||
|  | ||||
| @@ -26,6 +28,9 @@ public class MainService extends Service { | ||||
|  | ||||
|     public static String TAG = "ManagerService"; | ||||
|  | ||||
|     // 前台服务通知工具 | ||||
|     NotificationHelper mNotificationHelper; | ||||
|     Notification notification; | ||||
|     AppConfigUtil mConfigUtil; | ||||
|     //MyBinder mMyBinder; | ||||
|     MyServiceConnection mMyServiceConnection; | ||||
| @@ -73,17 +78,12 @@ public class MainService extends Service { | ||||
|                 mSMSRecevier = new SMSRecevier(); | ||||
|                 registerReceiver(mSMSRecevier, localIntentFilter); | ||||
|  | ||||
|  | ||||
|                 // 显示前台通知栏 | ||||
|                 MessageNotificationBean notificationMessage = createNotificationMessage(); | ||||
|                 NotificationUtil nu = new NotificationUtil(); | ||||
|                 nu.sendForegroundNotification(MainService.this, notificationMessage); | ||||
|                 NotificationHelper helper = new NotificationHelper(this); | ||||
|                 Intent intent = new Intent(this, MainActivity.class); | ||||
|                 notification = helper.showForegroundNotification(intent, getString(R.string.app_name), getString(R.string.text_aboutservernotification)); | ||||
|                 startForeground(NotificationHelper.FOREGROUND_NOTIFICATION_ID, notification); | ||||
|  | ||||
|                 /*if (mConfigUtil.isEnableTTS()) { | ||||
|                  TTSPlayRuleUtil.speakText(ManagerService.this, getString(R.string.text_iamhere), 0); | ||||
|                  GlobalApplication.showApplicationMessage(getString(R.string.text_iamhere)); | ||||
|                  }*/ | ||||
|                   | ||||
|                 ToastUtils.show("Service is start."); | ||||
|                 LogUtils.i(TAG, "Service is start."); | ||||
|             } | ||||
| @@ -101,13 +101,6 @@ public class MainService extends Service { | ||||
|  | ||||
|     } | ||||
|  | ||||
|     private MessageNotificationBean createNotificationMessage() { | ||||
|         String szTitle = getApplicationContext().getString(R.string.app_name); | ||||
|         String szContent = getString(R.string.text_aboutservernotification); | ||||
|         return new MessageNotificationBean(NotificationUtil.ID_MSG_SERVICE, "", szTitle, szContent); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int onStartCommand(Intent intent, int flags, int startId) { | ||||
|         //return super.onStartCommand(intent, flags, startId); | ||||
| @@ -116,12 +109,12 @@ public class MainService extends Service { | ||||
|         return mConfigUtil.mAppConfigBean.isEnableService() ? Service.START_STICKY: super.onStartCommand(intent, flags, startId); | ||||
|     } | ||||
|  | ||||
|    /*private class MyBinder extends IMyAidlInterface.Stub { | ||||
|         @Override | ||||
|         public String getServiceName() { | ||||
|             return MainService.class.getSimpleName(); | ||||
|         } | ||||
|     }*/ | ||||
|     /*private class MyBinder extends IMyAidlInterface.Stub { | ||||
|      @Override | ||||
|      public String getServiceName() { | ||||
|      return MainService.class.getSimpleName(); | ||||
|      } | ||||
|      }*/ | ||||
|  | ||||
|     // 主进程与守护进程连接时需要用到此类 | ||||
|     // | ||||
|   | ||||
| @@ -0,0 +1,158 @@ | ||||
| package cc.winboll.studio.mymessagemanager.utils; | ||||
|  | ||||
| /** | ||||
|  * @Author ZhanGSKen@AliYun.Com | ||||
|  * @Date 2025/04/01 14:10:35 | ||||
|  * @Describe 应用通知工具类 | ||||
|  */ | ||||
| import android.app.Notification; | ||||
| import android.app.NotificationChannel; | ||||
| import android.app.NotificationManager; | ||||
| import android.app.PendingIntent; | ||||
| import android.content.Context; | ||||
| import android.content.Intent; | ||||
| import android.graphics.BitmapFactory; | ||||
| import android.os.Build; | ||||
| import android.widget.RemoteViews; | ||||
| import androidx.annotation.RequiresApi; | ||||
| import androidx.core.app.NotificationCompat; | ||||
| import cc.winboll.studio.mymessagemanager.R; | ||||
| import cc.winboll.studio.mymessagemanager.activitys.SMSActivity; | ||||
|  | ||||
| public class NotificationHelper { | ||||
|     public static final String TAG = "NotificationHelper"; | ||||
|  | ||||
|     // 渠道ID和名称 | ||||
|     private static final String CHANNEL_ID_FOREGROUND = "foreground_channel"; | ||||
|     private static final String CHANNEL_NAME_FOREGROUND = "Foreground Service"; | ||||
|     private static final String CHANNEL_ID_TEMPORARY = "temporary_channel"; | ||||
|     private static final String CHANNEL_NAME_TEMPORARY = "Temporary Notifications"; | ||||
|  | ||||
|     // 通知ID | ||||
|     public static final int FOREGROUND_NOTIFICATION_ID = 1001; | ||||
|     public static final int TEMPORARY_NOTIFICATION_ID = 2001; | ||||
|  | ||||
|     private final Context mContext; | ||||
|     private final NotificationManager mNotificationManager; | ||||
|  | ||||
|     public NotificationHelper(Context context) { | ||||
|         mContext = context; | ||||
|         mNotificationManager = context.getSystemService(NotificationManager.class); | ||||
|         createNotificationChannels(); | ||||
|     } | ||||
|  | ||||
|     @RequiresApi(api = Build.VERSION_CODES.O) | ||||
|     private void createNotificationChannels() { | ||||
|         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { | ||||
|             createForegroundChannel(); | ||||
|             createTemporaryChannel(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @RequiresApi(api = Build.VERSION_CODES.O) | ||||
|     private void createForegroundChannel() { | ||||
|         NotificationChannel channel = new NotificationChannel( | ||||
|             CHANNEL_ID_FOREGROUND, | ||||
|             CHANNEL_NAME_FOREGROUND, | ||||
|             NotificationManager.IMPORTANCE_LOW | ||||
|         ); | ||||
|         channel.setDescription("Persistent service notifications"); | ||||
|         channel.setSound(null, null); | ||||
|         channel.enableVibration(false); | ||||
|         mNotificationManager.createNotificationChannel(channel); | ||||
|     } | ||||
|  | ||||
|     @RequiresApi(api = Build.VERSION_CODES.O) | ||||
|     private void createTemporaryChannel() { | ||||
|         NotificationChannel channel = new NotificationChannel( | ||||
|             CHANNEL_ID_TEMPORARY, | ||||
|             CHANNEL_NAME_TEMPORARY, | ||||
|             NotificationManager.IMPORTANCE_HIGH | ||||
|         ); | ||||
|         channel.setDescription("Temporary alert notifications"); | ||||
|         channel.setSound(null, null); | ||||
|         channel.enableVibration(true); | ||||
|         channel.setVibrationPattern(new long[]{100, 200, 300, 400}); | ||||
|         channel.setBypassDnd(true); | ||||
|         mNotificationManager.createNotificationChannel(channel); | ||||
|     } | ||||
|  | ||||
|     // 显示常驻通知(通常用于前台服务) | ||||
|     public Notification showForegroundNotification(Intent intent, String title, String content) { | ||||
|         PendingIntent pendingIntent = createPendingIntent(intent); | ||||
|  | ||||
|         Notification notification = new NotificationCompat.Builder(mContext, CHANNEL_ID_FOREGROUND) | ||||
|             .setSmallIcon(R.drawable.ic_launcher) | ||||
|             .setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), R.drawable.ic_launcher)) | ||||
|             .setContentTitle(title) | ||||
|             .setContentText(content) | ||||
|             .setContentIntent(pendingIntent) | ||||
|             .setPriority(NotificationCompat.PRIORITY_LOW) | ||||
|             .setOngoing(true) | ||||
|             .build(); | ||||
|  | ||||
|         mNotificationManager.notify(FOREGROUND_NOTIFICATION_ID, notification); | ||||
|         return notification; | ||||
|     } | ||||
|  | ||||
|     // 显示临时通知(自动消失) | ||||
|     public void showTemporaryNotification(Intent intent, String title, String content) { | ||||
|         PendingIntent pendingIntent = createPendingIntent(intent); | ||||
|  | ||||
|         Notification notification = new NotificationCompat.Builder(mContext, CHANNEL_ID_TEMPORARY) | ||||
|             .setSmallIcon(R.drawable.ic_launcher) | ||||
|             .setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), R.drawable.ic_launcher)) | ||||
|             .setContentTitle(title) | ||||
|             .setContentText(content) | ||||
|             .setContentIntent(pendingIntent) | ||||
|             .setPriority(NotificationCompat.PRIORITY_HIGH) | ||||
|             .setAutoCancel(true) | ||||
|             .setVibrate(new long[]{100, 200, 300, 400}) | ||||
|             .build(); | ||||
|  | ||||
|         mNotificationManager.notify(TEMPORARY_NOTIFICATION_ID, notification); | ||||
|     } | ||||
|  | ||||
|     // 创建自定义布局通知(可扩展) | ||||
|     public void showCustomNotification(Intent intent, RemoteViews contentView, RemoteViews bigContentView) { | ||||
|         PendingIntent pendingIntent = createPendingIntent(intent); | ||||
|  | ||||
|         Notification notification = new NotificationCompat.Builder(mContext, CHANNEL_ID_TEMPORARY) | ||||
|             .setSmallIcon(R.drawable.ic_launcher) | ||||
|             .setContentIntent(pendingIntent) | ||||
|             .setContent(contentView) | ||||
|             .setCustomBigContentView(bigContentView) | ||||
|             .setPriority(NotificationCompat.PRIORITY_HIGH) | ||||
|             .setAutoCancel(true) | ||||
|             .build(); | ||||
|  | ||||
|         mNotificationManager.notify(TEMPORARY_NOTIFICATION_ID + 1, notification); | ||||
|     } | ||||
|  | ||||
|     // 取消所有通知 | ||||
|     public void cancelAllNotifications() { | ||||
|         mNotificationManager.cancelAll(); | ||||
|     } | ||||
|  | ||||
|     // 创建PendingIntent(兼容不同API版本) | ||||
|     private PendingIntent createPendingIntent(Intent intent) { | ||||
|         int flags = PendingIntent.FLAG_UPDATE_CURRENT; | ||||
| //        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { | ||||
| //            flags |= PendingIntent.FLAG_IMMUTABLE; | ||||
| //        } | ||||
|         return PendingIntent.getActivity( | ||||
|             mContext, | ||||
|             0, | ||||
|             intent, | ||||
|             flags | ||||
|         ); | ||||
|     } | ||||
|      | ||||
|     public void sendSMSReceivedMessage(int nResultId, String szPhone, String szBody) { | ||||
|         Intent intent = new Intent(mContext, SMSActivity.class); | ||||
| 		intent.putExtra(SMSActivity.EXTRA_PHONE, szPhone); | ||||
|         String szTitle = mContext.getString(R.string.text_smsfrom)  + "<" + szPhone + ">"; | ||||
|         String szContent = "[ " + szBody + " ]"; | ||||
|         showTemporaryNotification(intent, szTitle, szContent); | ||||
|     } | ||||
| } | ||||
| @@ -22,7 +22,7 @@ import cc.winboll.studio.mymessagemanager.activitys.SMSActivity; | ||||
| import cc.winboll.studio.mymessagemanager.beans.MessageNotificationBean; | ||||
| import cc.winboll.studio.mymessagemanager.services.MainService; | ||||
| 
 | ||||
| public class NotificationUtil { | ||||
| public class NotificationUtil_Bck { | ||||
| 
 | ||||
|     public static final String TAG = "NotificationUtil"; | ||||
|     public static final int ID_MSG_SERVICE = 10000; | ||||
		Reference in New Issue
	
	Block a user
	 ZhanGSKen
					ZhanGSKen