- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
并分别创建警报日期和时间,然后将一个警报设置为:
public void schedule(Context context) {
setAlarmActive(true);
Intent myIntent = new Intent(context, AlarmAlertBroadcastReciever.class);
myIntent.putExtra("alarm", this);
// Adding random signature
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, myIntent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
// Previously setting the time
//alarmManager.set(AlarmManager.RTC_WAKEUP, getAlarmTime().getTimeInMillis(), pendingIntent);
// Testing adding the alarm date to this
Calendar alarmSchedule = Calendar.getInstance();
// Setting the time:
alarmSchedule.set(Calendar.HOUR, getAlarmTime().get(Calendar.HOUR));
alarmSchedule.set(Calendar.MINUTE, getAlarmTime().get(Calendar.MINUTE));
alarmSchedule.set(Calendar.SECOND, 0);
// Setting the date:
alarmSchedule.set(Calendar.YEAR, alarmDate.get(Calendar.YEAR));
alarmSchedule.set(Calendar.MONTH, alarmDate.get(Calendar.MONTH));
alarmSchedule.set(Calendar.DAY_OF_MONTH, alarmDate.get(Calendar.DAY_OF_MONTH));
alarmManager.set(AlarmManager.RTC_WAKEUP, alarmSchedule.getTimeInMillis(), pendingIntent);
}
public void setAlarmDate(Calendar alarmDate) {
this.alarmDate = alarmDate;
}
public void setAlarmDate(String alarmDate) {
String[] datePieces = alarmDate.split("-");
Log.v("setAlarmDate-Year", datePieces[0]);
Log.v("setAlarmDate-Month", datePieces[1]);
Log.v("setAlarmDate-Day", datePieces[2]);
Calendar newAlarmDate = Calendar.getInstance();
// Taking from above, adding now a specific date
newAlarmDate.set(Calendar.YEAR,
Integer.parseInt(datePieces[0]));
newAlarmDate.set(Calendar.MONTH,
Integer.parseInt(datePieces[1]) - 1);
newAlarmDate.set(Calendar.DAY_OF_MONTH,
Integer.parseInt(datePieces[2]));
setAlarmDate(newAlarmDate);
}
public void setAlarmTime(String alarmTime) {
String[] timePieces = alarmTime.split(":");
Calendar newAlarmTime = Calendar.getInstance();
newAlarmTime.set(Calendar.HOUR_OF_DAY,
Integer.parseInt(timePieces[0]));
newAlarmTime.set(Calendar.MINUTE, Integer.parseInt(timePieces[1]));
newAlarmTime.set(Calendar.SECOND, 0);
setAlarmTime(newAlarmTime);
}
public class AlarmAlertBroadcastReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent mathAlarmServiceIntent = new Intent(
context,
AlarmServiceBroadcastReciever.class);
context.sendBroadcast(mathAlarmServiceIntent, null);
StaticWakeLock.lockOn(context);
Bundle bundle = intent.getExtras();
final Alarm alarm = (Alarm) bundle.getSerializable("alarm");
Intent mathAlarmAlertActivityIntent;
mathAlarmAlertActivityIntent = new Intent(context, AlarmAlertActivity.class);
// Should create a notification that event is occurring
mathAlarmAlertActivityIntent.putExtra("alarm", alarm);
mathAlarmAlertActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(mathAlarmAlertActivityIntent);
}
}
public class AlarmServiceBroadcastReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("AlarmServiceBroadcastReciever", "onReceive()");
Intent serviceIntent = new Intent(context, AlarmService.class);
context.startService(serviceIntent);
}
}
public class AlarmService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
/*
* (non-Javadoc)
*
* @see android.app.Service#onCreate()
*/
@Override
public void onCreate() {
Log.d(this.getClass().getSimpleName(),"onCreate()");
super.onCreate();
}
private Alarm getNext(){
Set<Alarm> alarmQueue = new TreeSet<Alarm>(new Comparator<Alarm>() {
@Override
public int compare(Alarm lhs, Alarm rhs) {
int result = 0;
long diff = lhs.getAlarmTime().getTimeInMillis() - rhs.getAlarmTime().getTimeInMillis();
if(diff>0){
return 1;
}else if (diff < 0){
return -1;
}
return result;
}
});
Database.init(getApplicationContext());
List<Alarm> alarms = Database.getAll();
for(Alarm alarm : alarms){
if(alarm.getAlarmActive())
alarmQueue.add(alarm);
}
if(alarmQueue.iterator().hasNext()){
return alarmQueue.iterator().next();
}else{
return null;
}
}
/*
* (non-Javadoc)
*
* @see android.app.Service#onDestroy()
*/
@Override
public void onDestroy() {
Database.deactivate();
super.onDestroy();
}
/*
* (non-Javadoc)
*
* @see android.app.Service#onStartCommand(android.content.Intent, int, int)
*/
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(this.getClass().getSimpleName(),"onStartCommand()");
Alarm alarm = getNext();
if(null != alarm){
alarm.schedule(getApplicationContext());
Log.d(this.getClass().getSimpleName(),alarm.getTimeUntilNextAlarmMessage());
}else{
Intent myIntent = new Intent(getApplicationContext(), AlarmAlertBroadcastReciever.class);
myIntent.putExtra("alarm", new Alarm());
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, myIntent,PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
}
return START_NOT_STICKY;
}
}
public class AlarmAlertActivity extends Activity implements OnClickListener {
private Alarm alarm;
private MediaPlayer mediaPlayer;
private StringBuilder answerBuilder = new StringBuilder();
//private MathProblem mathProblem;
private Vibrator vibrator;
private boolean alarmActive;
private NotificationManager mNotificationManager;
public static final int NOTIFICATION_ID = 1;
private TextView problemView;
private TextView answerView;
private String answerString;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
setContentView(R.layout.alarm_alert);
Bundle bundle = this.getIntent().getExtras();
alarm = (Alarm) bundle.getSerializable("alarm");
((Button) findViewById(R.id.openEvent)).setOnClickListener(this);
TelephonyManager telephonyManager = (TelephonyManager) this
.getSystemService(Context.TELEPHONY_SERVICE);
PhoneStateListener phoneStateListener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
Log.d(getClass().getSimpleName(), "Incoming call: "
+ incomingNumber);
try {
mediaPlayer.pause();
} catch (IllegalStateException e) {
}
break;
case TelephonyManager.CALL_STATE_IDLE:
Log.d(getClass().getSimpleName(), "Call State Idle");
try {
mediaPlayer.start();
} catch (IllegalStateException e) {
}
break;
}
super.onCallStateChanged(state, incomingNumber);
}
};
telephonyManager.listen(phoneStateListener,
PhoneStateListener.LISTEN_CALL_STATE);
// Toast.makeText(this, answerString, Toast.LENGTH_LONG).show();
startAlarm();
}
@Override
protected void onResume() {
super.onResume();
alarmActive = true;
}
private void startAlarm() {
if (alarm.getAlarmTonePath() != "") {
mediaPlayer = new MediaPlayer();
if (alarm.getVibrate()) {
vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
long[] pattern = { 1000, 200, 200, 200 };
vibrator.vibrate(pattern, 0);
}
try {
mediaPlayer.setVolume(1.0f, 1.0f);
mediaPlayer.setDataSource(this,
Uri.parse(alarm.getAlarmTonePath()));
mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
mediaPlayer.setLooping(true);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (Exception e) {
mediaPlayer.release();
alarmActive = false;
}
}
}
/*
* (non-Javadoc)
*
* @see android.app.Activity#onBackPressed()
*/
@Override
public void onBackPressed() {
if (!alarmActive)
super.onBackPressed();
}
/*
* (non-Javadoc)
*
* @see android.app.Activity#onPause()
*/
@Override
protected void onPause() {
super.onPause();
StaticWakeLock.lockOff(this);
}
@Override
protected void onDestroy() {
try {
if (vibrator != null)
vibrator.cancel();
} catch (Exception e) {
}
try {
mediaPlayer.stop();
} catch (Exception e) {
}
try {
mediaPlayer.release();
} catch (Exception e) {
}
super.onDestroy();
}
@Override
public void onClick(View v) {
String button = (String) v.getTag();
if (!alarmActive)
return;
// When click the view, shut off the alarm
alarmActive = false;
if (vibrator != null)
vibrator.cancel();
try {
mediaPlayer.stop();
} catch (IllegalStateException ise) {
}
try {
mediaPlayer.release();
} catch (Exception e) {
}
// and show the details:
Intent getEvent = new Intent(this, AlarmActivity.class);
startActivity(getEvent);
this.finish();
// v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
// if (button.equalsIgnoreCase("clear")) {
// if (answerBuilder.length() > 0) {
// answerBuilder.setLength(answerBuilder.length() - 1);
// answerView.setText(answerBuilder.toString());
// }
// } else if (button.equalsIgnoreCase(".")) {
// if (!answerBuilder.toString().contains(button)) {
// if (answerBuilder.length() == 0)
// answerBuilder.append(0);
// answerBuilder.append(button);
// answerView.setText(answerBuilder.toString());
// }
// } else if (button.equalsIgnoreCase("-")) {
// if (answerBuilder.length() == 0) {
// answerBuilder.append(button);
// answerView.setText(answerBuilder.toString());
// }
// } else {
// answerBuilder.append(button);
// answerView.setText(answerBuilder.toString());
// // If click the button, then open feast app with the special event details
// if (isAnswerCorrect()) {
// alarmActive = false;
// if (vibrator != null)
// vibrator.cancel();
// try {
// mediaPlayer.stop();
// } catch (IllegalStateException ise) {
//
// }
// try {
// mediaPlayer.release();
// } catch (Exception e) {
//
// }
// this.finish();
// // OPEN FEASTAPP event with those event details
// }
// }
// if (answerView.getText().length() >= answerString.length()
// && !isAnswerCorrect()) {
// answerView.setTextColor(Color.RED);
// } else {
// answerView.setTextColor(Color.BLACK);
// }
// }
}
public boolean isAnswerCorrect() {
//boolean correct = false;
/*
try {
correct = mathProblem.getAnswer() == Float.parseFloat(answerBuilder
.toString());
} catch (NumberFormatException e) {
return false;
} catch (Exception e) {
e.printStackTrace();
return false;
}
*/
// So once click, it will be correct and close out the app
boolean correct = true;
return correct;
}
private void sendNotification(String msg) {
Log.d("TAG", "Preparing to send notification...: " + msg);
mNotificationManager = (NotificationManager) this
.getSystemService(Context.NOTIFICATION_SERVICE);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
new Intent(this, AlarmActivity.class), 0);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
this).setSmallIcon(R.drawable.abc_ic_clear_mtrl_alpha)
.setContentTitle("GCM Notification")
.setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
.setContentText(msg);
mBuilder.setContentIntent(contentIntent);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
Log.d("TAG", "Notification sent successfully.");
}
}
最佳答案
在警报警报 Activity 中,我在onClick中添加了:
Intent myIntent = new Intent(getApplicationContext(), AlarmAlertBroadcastReciever.class);
myIntent.putExtra("alarm", Alarm.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, myIntent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
关于android - 警报无限重复-锁定电话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31091491/
我正在尝试将字符串转换为 float 。我知道 parseFloat() 可以做到这一点,但我也找到了下面的语法,但没有太多引用。 什么是正确的语法,因为它们似乎都有效。我可以在哪里了解更多相关信息?
我见过一些看起来很酷的“窗口”/“警报”/不管它们叫什么。我希望我知道。以下是其中的一些示例: 这些不应该是 Apple 独有的,因为我已经看到 3rd 方应用程序使用它们!我想知道这些 window
这个问题已经有答案了: What is the difference between a function call and function reference? (6 个回答) 已关闭 7 年前。
alert('test1'); var re = new RegExp("(http://(?:[A-Za-z0-9-]+\\.)?[A-Za-z0-9-]+\\.[A-Za-z0-9-]+/?)",
我有一个 Rails 应用程序,它与其他 Rails 应用程序通信以进行数据插入。我使用 jQuery $.post 方法进行数据插入。对于插入,我的其他 Rails 应用程序显示 200 OK。但在
我的作业有问题...我不知道我的代码有什么问题..我的作业是创建一个简单的学习数学和级别选择......我使用下拉菜单来选择级别和算术运算......现在我的问题是,当我单击按钮时,它将转到函数sta
我有一些复选框,其值属性来自数据库。我希望用户始终检查具有相同值的复选框(如果他不使用 javascript 发出警报)。我尝试使用以下 javascript 代码执行此操作,但没有用 fu
这有点难以解释,我的网站上有一个幻灯片形式的多部分表单。他们必须使用单选按钮从 3/4 选项中进行选择。 我对它们进行了一些验证,以确保用户在允许转到下一张幻灯片之前选择一个。 如果我单击一个对象来选
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 5 年前。 Improve this ques
我的页面上有一个click链接,我想在单击时播放通知或提示音。我如何使用jQuery做到这一点? 在此先感谢... :) 炸药 最佳答案 使用 jQuery sound 插件。 关于javascrip
我正在尝试在 Excel 列中创建 VBA -Alert 弹出窗口。在基于某些计算的 Excel 工作表中,将计算一些增长%(H 列),如果增长%> 20%,则会生成一个警报弹出窗口,询问原因代码,需
当用户滚动到网页的特定部分时,如何使用 JavaScript 显示警报。我尝试通过检查 document.body.clientWidth = document.documentElement.cli
我正在尝试制作一个脚本,其中会弹出一个提示窗口询问问题,并根据其中的答案,会弹出一个警告框,指出答案有效或无效。在我的代码中,我的提示框有效,但我的警报框没有。有人可以帮我解决这个问题吗?非常感谢!!
我正在尝试 Grafana 的警报和通知功能,它看起来真的很棒。 松弛通知示例。 但是有一个大问题。它需要使用 S3 进行配置,这使得任何人都可以公开访问图像。对于那些不希望公开访问其图像的公司来说,
我想知道是否有任何方法可以在 adobe reader 中通知用户pdf 表单已提交到服务器?我正在提交一个正常的 http/html 形式到 php 脚本没什么大不了的,直接,但文档、论坛等似乎存在
在 TFS 中构建失败后,是否可以通过电子邮件获取构建成功的信息? 当构建失败时(我确实如此),我可以收到电子邮件。当构建成功时,我可以收到电子邮件。 但我需要知道构建不再失败。如果我收到构建失败的电
我需要一些帮助来理解 jQuery 如何存储元素。请看一下这个链接: http://jsfiddle.net/NubWC/ 我试图从所有具有特定类的标题标签中获取元素 id,并将其放入数组中,以便我可
我想做 alert(this) 来进行演示(想看看代码中不同位置的“this”是什么)。 有什么想法可以实现这一目标吗? 现在它只返回[object Object]? 最佳答案 这样做: consol
当出现警告框时,有什么方法可以阻止 Enter 键盘吗?因此用户需要按 Esc 键或单击 Ok 按钮来删除警报。 alert('Hello'); 最佳答案 正如我之前的评论所述,标准的 javas
我正在尝试在 javascript 中创建一个函数并传入参数“name”,然后当用户点击一张照片时,会出现一条警告,类似于“这张照片是在 ____ 拍摄的” function photoWhere
我是一名优秀的程序员,十分优秀!