到目前为止,由于这个网站,我已经能够设置一个即使我打开手机也会设置并激活的闹钟.
现在,我设置了一个警报,显示事件A的提示,我需要应用程序设置另一个警报,以显示事件B的另一个提醒.
我必须做错事,因为它只会触发事件A的提醒.似乎一旦设置,任何其他警报都被理解为同一个警报.:-(
以下是两步中我正在做的细节:
1)从一项活动中我设置了一个警报,在某个时间和日期将呼叫接收者
Intent intent = new Intent(Activity_Reminder.this,
AlarmReceiver_SetOnService.class);
intent.putExtra("item_name", prescription
.getItemName());
intent
.putExtra(
"message",
Activity_Reminder.this
.getString(R.string.notif_text));
intent.putExtra("item_id", itemId);
intent.putExtra("activityToTrigg",
"com.companyName.appName.main.Activity_Reminder");
PendingIntent mAlarmSender;
mAlarmSender = PendingIntent.getBroadcast(
Activity_Reminder.this, 0, intent, 0);
long alarmTime = dateMgmt.getTimeForAlarm(pickedDate);
Calendar c = Calendar.getInstance();
c.setTimeInMillis(alarmTime);
// Schedule the alarm!
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, alarmTime + 15000,
mAlarmSender);
Run Code Online (Sandbox Code Playgroud)
2)从接收器我呼叫服务
Bundle bundle = intent.getExtras();
String itemName = bundle.getString("item_name");
String reminderOrAlarmMessage = bundle.getString("message");
String activityToTrigg = bundle.getString("activityToTrigg");
int itemId = Integer.parseInt(bundle.getString("item_id"));
NotificationManager nm …Run Code Online (Sandbox Code Playgroud) 我有一组警报,我需要在重启后保留.我尝试过使用启动接收器,但它们不会重新启动.我不确定我是否理解启动接收器以及如何重新启动所有警报.我已经有一个接收器用于我的通知,但不知道我是否可以使用相同的接收器或我是否需要一个新接收器?
谁能指点我任何好的教程或帮助我?
干杯
代码:
DatabaseHandler db = new DatabaseHandler(this);
List<UAlarm> alarms = db.getAllAlarms();
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
for (UAlarm ua : alarms) {
String programme = ua.getTitle();
String startTime = ua.getStart();
String endTime = ua.getEnd();
String nowPlaying = ua.getChannel();
db.addAlarm(new UAlarm(programme, startTime, endTime, nowPlaying, ""));
final UAlarm ut = new UAlarm();
ut.setTitle(programme);
ut.setStart(startTime);
ut.setEnd(endTime);
ut.setChannel(nowPlaying);
ut.setId(db.getLastEntered());
String [] bla = startTime.split(":");
int hour = Integer.parseInt(bla[0].trim());
int minute = Integer.parseInt(bla[1].trim());
minute -= 2;
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, …Run Code Online (Sandbox Code Playgroud) 在写这个问题时解决了,但发布以防万一:
我正在设置这样的多个警报,具有不同的值id:
AlarmManager alarms = (AlarmManager)context.getSystemService(
Context.ALARM_SERVICE);
Intent i = new Intent(MyReceiver.ACTION_ALARM); // "com.example.ALARM"
i.putExtra(MyReceiver.EXTRA_ID, id); // "com.example.ID", 2
PendingIntent p = PendingIntent.getBroadcast(context, 0, i, 0);
alarms.setRepeating(AlarmManager.RTC_WAKEUP, nextMillis, 300000, p); // 5 mins
Run Code Online (Sandbox Code Playgroud)
......并像这样接收它们:
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ACTION_ALARM)) {
// It's time to sound/show an alarm
final long id = intent.getLongExtra(EXTRA_ID, -1);
Run Code Online (Sandbox Code Playgroud)
警报在适当的时间传递给我的接收器,但通常EXTRA_ID设置为错误的值:它是我在某个时刻使用的值,而不是我想要在那个特定时间传递的值.
是否有可能获得在android的警报应用程序中保存的警报列表?我正在制作一个应用程序,只需要显示警报应用程序中设置的警报.
感谢名单
我使用相同的pendingIntent为每个使用不同的intentId设置多个警报.警报正在发挥作用.现在我要取消特定的警报.如果我使用cancel()方法,我将最终取消所有警报.我只想删除一个特定的.此外,即使在第二次或第三次发射期间,用户也应该能够取消此警报.当我第二次启动时,我将不会有相同的pendingIntent对象.我是否必须持久化pendingIntent对象?如果是这样,怎么样?以及如何从多个警报中取消单个警报?
我们正在为iPad(仅限)创建一个音频应用程序,用于现场表演.该设备将直接连接到控制台.因此,在现场演出期间,您最不希望的是让设备突然发出意外警报或提醒.
通过Apple的SDK研究,看起来您可以阻止除日历和闹钟(以及iPhone上的呼叫)之外的所有内容.
也就是说,有没有人知道如何告诉设备'当我们处于'On Air'模式时,不允许任何操作系统通知'?
如果没有,我们至少可以查询它们是否已打开,以便我们可以警告用户?
Jailbeaking不是一种选择,因为我们想通过App Store出售它.
UPDATE
另一种选择是让普通警报和这样仍通过iPad的扬声器播放,但是我们给我们的声音了通过在基座连接器的线路输出.
当然,我们总是可以为此开发自己的硬件,但我们正试图尽可能多地利用设备的内置功能.
在我的活动课上
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AlarmManager alarmManager=(AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,System.currentTimeMillis(),2000, pendingIntent);
}
Run Code Online (Sandbox Code Playgroud)
我的onrecieve功能在alarmreciever类
@Override
public void onReceive(Context context, Intent intent)
{
//get and send location information
System.out.println("fired");
}
Run Code Online (Sandbox Code Playgroud)
我正在使用nexus 4,kitkat版本.我没有看到每2分钟发射任何一个接收函数.正在发生...任何帮助?谢谢
Run Code Online (Sandbox Code Playgroud)<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.alarmexample" android:versionCode="1" android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="20" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name="com.example.AlarmExample"
android:exported="false" > …Run Code Online (Sandbox Code Playgroud) 从API级别9(2.3)开始,您可以使用intent设置警报:
Intent i = new Intent(AlarmClock.ACTION_SET_ALARM);
i.putExtra(AlarmClock.EXTRA_HOUR, 9);
i.putExtra(AlarmClock.EXTRA_MINUTES, 37);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
无论如何以较低的API级别以类似的方式设置警报(未记录的API?)?
此外,如果有人知道任何类似的方法非库存警报器(如此处列出的 IE HTC闹钟,Moto模糊闹钟等......)我将非常感激.
我在这里包含完整的问题描述,因为我不确定解决方案背后的逻辑是否正确,但我很确定它与我设置警报本身的方式有关,导致这种不准确,或者有时只是纯粹的故障(警报根本不会触发).
用户可以从药物列表中添加新药物.
屏幕1
找到某种药物后,点击它会显示此屏幕http://imgur.com/nLC9gTG
该屏幕包含Medication的名称,在"Posology"标题下(绿色栏)是可以添加该Medication的提醒的地方.
忘记"单位"字段.
"频率"字段接受一个数字,"频率"字段右侧的标签是可点击的,它会显示一个下拉菜单,用户可以从中选择"每日时间"或"每周时间".
"星期几"标签(屏幕截图中的标签为空)也是可点击的,它向用户显示一个下拉菜单,用户可以从一周中选择多天.
"治疗持续时间"字段接受一个数字,"治疗持续时间"字段右侧的标签将反映用户选择的"频率"(如果是"每周一次",那么该标签将说"周",如果是"每月一次"然后该标签将说"几个月").
屏幕2
在第二个屏幕截图中http://imgur.com/AcUmlHH - 有一个开关允许用户启用他试图添加的此药物(项目,实例等)的提醒.
如果上面的"频率"字段的数字大于0(例如2),则提醒开关将创建一个提醒字段列表,它将显示在"获取通知"绿色栏的下方.
当用户最终按下"添加药物"时,将在数据库中创建新的药物对象,以及用户为此药物对象选择添加的"频率"(提醒的数量).
创建一个Medication表:
id
name
description
dosage
frequency
frequencyType
treatmentDuration
ForeignCollection<MedicationReminder>
ArrayList<DayChoice> (DayChoice is a class with "Day Name" and "Selected")
when
whenString
units
unitForm
remarks
remindersEnabled
Run Code Online (Sandbox Code Playgroud)
创建MedicationReminder表:
Medication (foreign key for the Medication table)
Calendar
int[] days_of_week
totalTimesToTrigger
Run Code Online (Sandbox Code Playgroud)
在创建此新的Medication对象时:
Medication medication = new Medication();
medication.setFrequency()
medication.setName().setDosage().setRemindersEnabled()....
assignForeignCollectionToParentObject(medication);
Run Code Online (Sandbox Code Playgroud)
assignForeignCollectionToParentObject(药物)
private void assignForeignCollectionToParentObject(Medication medicationObject) {
medicationDAO.assignEmptyForeignCollection(medicationObject, "medicationReminders");
MedicationRemindersRecyclerAdapter adapter =
(MedicationRemindersRecyclerAdapter) remindersRecyclerView.getAdapter();
//Clear previous reminders
medicationObject.getMedicationReminders().clear(); …Run Code Online (Sandbox Code Playgroud) 我在做报警项目,
我想设置一次闹钟..但我面临着设置问题,
我的代码是;
public void loadCalender(String month) {
try {
Cursor cursor = null;
Database db = new Database(getApplicationContext());
cursor = db.getSelectedCalenderDetails(month);
if (cursor.getCount() != 0) {
if (cursor.moveToFirst()) {
do {
String text = cursor.getString(cursor
.getColumnIndex("event"));
String title = "News/Events";
String dates = cursor.getString(cursor
.getColumnIndex("date"));
String yr = dates.substring(0, 4);
int year = Integer.parseInt(yr);
String mon = dates.substring(5);
String mo = mon.substring(0, 2);
int months = Integer.parseInt(mo);
String da = dates.substring(9);
int day = Integer.parseInt(da);
// Ask our service …Run Code Online (Sandbox Code Playgroud) 我正在开发一些应用程序需要receive_boot_completed在重新启动时使用来重置一些警报
它在模拟器和三星标签2 10.1上工作正常..但它不适用于我的Galaxy迷你设备与Android版2.2.1!
这在我的代码中:
的manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.engahmedphp.collector"
android:installLocation="auto"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<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.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:icon="@drawable/app_icon"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.engahmedphp.collector.SplashActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".PagesActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name=".FeedsActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name" >
</activity>
<activity
android:name=".PagePrefsActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name=".ManagePagesActivity"
android:launchMode="singleTask"
android:label="@string/app_name" >
</activity>
<activity
android:name=".FeedsDialogActivity"
android:configChanges="orientation|keyboardHidden"
android:theme="@android:style/Theme.Dialog"
> …Run Code Online (Sandbox Code Playgroud)