我想在特定时间使用广播接收器发送通知.在这方面,已经阅读了许多教程视频和答案,并且所有内容都很清晰.但我找不到以下代码的问题在哪里,因为CODE仍然无法正常工作. 所有这些都是基于 "Android中每天重复发送本地通知-YouTube"
I want to send notification at specific time using broadcast receiver. many tutorials videos and also answers has been read in this regard and all of them was clear. but I couldn't find where is the problem of below codes because CODE still does not work. all of this was implemented based on "Daily Repeating Local Notification In Android - YouTube"
这是LAUNCHER活动中的代码:
public class Splash extends Activity { @RequiresApi(Build.VERSION_CODES.N) @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.splash); NotificationCheckPoint(); } @RequiresApi(Build.VERSION_CODES.N) private void NotificationCheckPoint() { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 19); calendar.set(Calendar.MINUTE, 53); calendar.set(Calendar.SECOND, 0); Intent MyIntent = new Intent(getApplicationContext(), BroadastNotification.class); PendingIntent MyPendIntent = PendingIntent.getBroadcast(getApplicationContext(), 100, MyIntent, PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager MyAlarm = (AlarmManager) getSystemService(ALARM_SERVICE); MyAlarm.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, MyPendIntent); } }这是BroadcastReceiver的代码:
public class BroadastNotification extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { MyNotification(context); } private void MyNotification(Context context) { String BigNotificqationText = "BigNotificqationText"; String NotificationTitle = "NotificationTitle"; String NotificationTicker = " NotificationTicker "; NotificationManager MyNotifyManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); Intent MyIntent = new Intent(context, Splash.class); MyIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent MyPendingIntent = PendingIntent.getActivity(context, 100, MyIntent, PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Builder MyNB = new NotificationCompat.Builder(context); MyNB.setSmallIcon(R.drawable.icon); MyNB.setContentTitle(NotificationTitle); MyNB.setContentText(BigNotificqationText); MyNB.setTicker(NotificationTicker); MyNB.setPriority(NotificationCompat.PRIORITY_MAX); MyNB.setDefaults(NotificationCompat.DEFAULT_SOUND); MyNB.setAutoCancel(true); MyNB.setContentIntent(MyPendingIntent); Bitmap MyPicture = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon); MyNB.setLargeIcon(MyPicture); NotificationCompat.BigPictureStyle MyPicStyle = new NotificationCompat.BigPictureStyle().bigPicture(MyPicture); MyPicStyle.setSummaryText("Etude can makes our life Enlightened"); MyNB.setStyle(MyPicStyle); NotificationCompat.BigTextStyle MyTextStyle = new NotificationCompat.BigTextStyle(); MyTextStyle.bigText(BigNotificqationText); MyTextStyle.setBigContentTitle(NotificationTitle); MyNB.setStyle(MyTextStyle); MyNotifyManager.notify(100, MyNB.build()); }最后是清单定义:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="schemas.android/apk/res/android" xmlns:tools="schemas.android/tools" package="com.ietude.etude"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="com.android.alarm.permission.SET_ALARM" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" tools:replace="icon, label"> <receiver android:name=".BroadastNotification"> <!--android:enabled="true"--> <!--android:exported="true">--> <!--<intent-filter>--> <!--<action android:name="android.media.VOLUME_CHANGED_ACTION" />--> <!--</intent-filter>--> </receiver> <activity android:name=".Splash" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>推荐答案
如果希望计时器在某个确切时间到期,则可以按以下方式配置计时器.
If you wish to have a timer expire at an exact time, then you can configure the timer as follows.
Calendar alarmFor = Calendar.getInstance(); alarmFor.set(Calendar.HOUR_OF_DAY, 7); alarmFor.set(Calendar.MINUTE, 45); alarmFor.set(Calendar.SECOND, 0); Intent MyIntent = new Intent(getApplicationContext(), BroadcastNotification.class); PendingIntent MyPendIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, MyIntent, PendingIntent.FLAG_CANCEL_CURRENT); AlarmManager MyAlarm = (AlarmManager) getSystemService(ALARM_SERVICE); MyAlarm.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarmFor.getTimeInMillis(), MyPendIntent);在此示例中,onReceive()如下:
In this example, onReceive() is as follows:
@Override public void onReceive(Context context, Intent intent) { Log.d("MyAPP", "onReceive() called"); }运行此命令时,将在要求的确切时间记录以下内容:
When I run this, the following is logged at the the exact time requested:
11-22 07:45:00.730 5833-5833/com.sap.myapplication D/MyAPP: onReceive() called更多推荐
使用BroadcastReceiver和AlarmManager在特定时间进行通知
发布评论