通知模块调试ing...
This commit is contained in:
parent
5a1d557683
commit
af39f98a51
@ -9,7 +9,6 @@ import cc.winboll.studio.mymessagemanager.App;
|
|||||||
import cc.winboll.studio.mymessagemanager.activitys.SMSActivity;
|
import cc.winboll.studio.mymessagemanager.activitys.SMSActivity;
|
||||||
import cc.winboll.studio.mymessagemanager.beans.SMSBean;
|
import cc.winboll.studio.mymessagemanager.beans.SMSBean;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.AppConfigUtil;
|
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.PhoneUtil;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.SMSReceiveRuleUtil;
|
import cc.winboll.studio.mymessagemanager.utils.SMSReceiveRuleUtil;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.SMSRecycleUtil;
|
import cc.winboll.studio.mymessagemanager.utils.SMSRecycleUtil;
|
||||||
|
@ -5,6 +5,7 @@ package cc.winboll.studio.mymessagemanager.services;
|
|||||||
* @Date 2024/07/19 14:30:57
|
* @Date 2024/07/19 14:30:57
|
||||||
* @Describe 应用主要服务组件类
|
* @Describe 应用主要服务组件类
|
||||||
*/
|
*/
|
||||||
|
import android.app.Notification;
|
||||||
import android.app.Service;
|
import android.app.Service;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@ -14,11 +15,12 @@ import android.content.ServiceConnection;
|
|||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
import cc.winboll.studio.mymessagemanager.R;
|
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.beans.MessageNotificationBean;
|
||||||
import cc.winboll.studio.mymessagemanager.receivers.SMSRecevier;
|
import cc.winboll.studio.mymessagemanager.receivers.SMSRecevier;
|
||||||
import cc.winboll.studio.mymessagemanager.services.MainService;
|
import cc.winboll.studio.mymessagemanager.services.MainService;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.AppConfigUtil;
|
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 cc.winboll.studio.mymessagemanager.utils.ServiceUtil;
|
||||||
import com.hjq.toast.ToastUtils;
|
import com.hjq.toast.ToastUtils;
|
||||||
|
|
||||||
@ -26,6 +28,9 @@ public class MainService extends Service {
|
|||||||
|
|
||||||
public static String TAG = "ManagerService";
|
public static String TAG = "ManagerService";
|
||||||
|
|
||||||
|
// 前台服务通知工具
|
||||||
|
NotificationHelper mNotificationHelper;
|
||||||
|
Notification notification;
|
||||||
AppConfigUtil mConfigUtil;
|
AppConfigUtil mConfigUtil;
|
||||||
//MyBinder mMyBinder;
|
//MyBinder mMyBinder;
|
||||||
MyServiceConnection mMyServiceConnection;
|
MyServiceConnection mMyServiceConnection;
|
||||||
@ -73,17 +78,12 @@ public class MainService extends Service {
|
|||||||
mSMSRecevier = new SMSRecevier();
|
mSMSRecevier = new SMSRecevier();
|
||||||
registerReceiver(mSMSRecevier, localIntentFilter);
|
registerReceiver(mSMSRecevier, localIntentFilter);
|
||||||
|
|
||||||
|
|
||||||
// 显示前台通知栏
|
// 显示前台通知栏
|
||||||
MessageNotificationBean notificationMessage = createNotificationMessage();
|
NotificationHelper helper = new NotificationHelper(this);
|
||||||
NotificationUtil nu = new NotificationUtil();
|
Intent intent = new Intent(this, MainActivity.class);
|
||||||
nu.sendForegroundNotification(MainService.this, notificationMessage);
|
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.");
|
ToastUtils.show("Service is start.");
|
||||||
LogUtils.i(TAG, "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
|
@Override
|
||||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||||
//return super.onStartCommand(intent, flags, 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);
|
return mConfigUtil.mAppConfigBean.isEnableService() ? Service.START_STICKY: super.onStartCommand(intent, flags, startId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*private class MyBinder extends IMyAidlInterface.Stub {
|
/*private class MyBinder extends IMyAidlInterface.Stub {
|
||||||
@Override
|
@Override
|
||||||
public String getServiceName() {
|
public String getServiceName() {
|
||||||
return MainService.class.getSimpleName();
|
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.beans.MessageNotificationBean;
|
||||||
import cc.winboll.studio.mymessagemanager.services.MainService;
|
import cc.winboll.studio.mymessagemanager.services.MainService;
|
||||||
|
|
||||||
public class NotificationUtil {
|
public class NotificationUtil_Bck {
|
||||||
|
|
||||||
public static final String TAG = "NotificationUtil";
|
public static final String TAG = "NotificationUtil";
|
||||||
public static final int ID_MSG_SERVICE = 10000;
|
public static final int ID_MSG_SERVICE = 10000;
|
Loading…
x
Reference in New Issue
Block a user