使用AlarmManager设置重复通知-Android

使用AlarmManager设置重复通知-Android,第1张

概述我正在使用TimePicker从用户那里获取特定时间.然后,我每天都在这段时间使用此时间设置重复警报.当警报响起时,我希望将通知发送给用户.我的代码似乎是正确的,并且我在androidstudio中没有收到任何错误,但是当我运行此应用并在特定时间设置它时…它永远不会关闭.请帮忙.另外我还找

我正在使用TimePicker从用户那里获取特定时间.然后,我每天都在这段时间使用此时间设置重复警报.当警报响起时,我希望将通知发送给用户.我的代码似乎是正确的,并且我在android studio中没有收到任何错误,但是当我运行此应用并在特定时间设置它时…它永远不会关闭.请帮忙.另外我还找不到任何能显示如何使用TimePicker获得AM或PM用户选择的东西.我的代码如下.提前致谢.

这是MyActivity(启动时打开的那个)

public class MyActivity extends Activity {TimePicker mTimePicker;button setAlarm;private int hour;private int minute;PendingIntent mPendingIntent;int AM_PM;@OverrIDeprotected voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.activity_my);    setAlarm = (button) findVIEwByID(R.ID.setUpAlarm);    mTimePicker = (TimePicker) findVIEwByID(R.ID.timePicker);    setAlarm.setonClickListener(new VIEw.OnClickListener() {        @OverrIDe        public voID onClick(VIEw v) {            setAlarm();        }    });}private voID setAlarm() {    hour = mTimePicker.getCurrentHour();    minute = mTimePicker.getCurrentMinute();    Intent intent = new Intent(this, NotifyService.class);    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);    mPendingIntent = PendingIntent.getService(this, 0, intent, 0);    Calendar calendar = Calendar.getInstance();    calendar.set(Calendar.SECOND , 0 );    calendar.set(Calendar.MINUTE , 0 + minute);    calendar.set(Calendar.HOUR , 0 + hour);    calendar.set(Calendar.AM_PM , Calendar.PM);    Toast.makeText(this, calendar.get(Calendar.MINUTE) + "    " + calendar.get(Calendar.HOUR), Toast.LENGTH_SHORT).show();    //  * 60 * 60 * 24    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP , calendar.getTimeInMillis() , 1000 * 60 * 60 * 24 , mPendingIntent);    // Toast.makeText(MyActivity.this , "Alarm Set" , Toast.LENGTH_SHORT).show();}

这是我的通知课

public class NotifyService extends Service {@OverrIDepublic IBinder onBind(Intent intent) {    return null;}@OverrIDepublic voID onCreate() {    Uri sound = ringtoneManager.getDefaultUri(ringtoneManager.TYPE_NOTIFICATION);    notificationmanager mNM = (notificationmanager) getSystemService(NOTIFICATION_SERVICE);    Intent intent = new Intent(this.getApplicationContext() , MyActivity.class);    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 , intent ,0 );    Notification mNotify = new Notification.Builder(this)            .setContentTitle("Come Back!")            .setContentText("Have you seen todays tip?")            .setSmallicon(R.drawable.ic_launcher)            .setContentIntent(pendingIntent)            .setSound(sound)            .build();    mNM.notify( 1 , mNotify);}

}

我的清单

<manifest xmlns:androID="http://schemas.androID.com/apk/res/androID"package="com.androIDy.notificationapp" ><application    androID:allowBackup="true"    androID:icon="@drawable/ic_launcher"    androID:label="@string/app_name"    androID:theme="@style/Apptheme" >    <activity        androID:name=".MyActivity"        androID:label="@string/app_name" >        <intent-filter>            <action androID:name="androID.intent.action.MAIN" />            <category androID:name="androID.intent.category.LAUNCHER" />        </intent-filter>    </activity></application>

解决方法:

您必须在清单中声明您的服务,否则它将无法启动.

同样,getCurrentHour()始终以24h格式返回小时,无需知道用户输入的是AM还是PM.

http://developer.android.com/reference/android/widget/TimePicker.html#setCurrentHour(java.lang.Integer)

您可能还需要考虑将Service中的所有工作从onCreate()移到onStartCommand(),因为仅当Service不存在时才调用onCreate(),这可能是因为您似乎没有停止而已它(您也可以考虑这样做).

http://developer.android.com/guide/components/services.html

总结

以上是内存溢出为你收集整理的使用AlarmManager设置重复通知-Android全部内容,希望文章能够帮你解决使用AlarmManager设置重复通知-Android所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1078746.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存