我已写下以下代码,以便在时钟变为下一分钟时发出警报(比如8:32和32秒,它会在8:33:00开火) )..然后每小时重复一次。这是我的代码:
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.SystemClock;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import android.util.Log;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class MainActivity extends Activity {
private AlarmManager mAlarmManager;
private Intent popup, popup_logger;
private PendingIntent pending_popup;
private final long dHour = 3600000;
private final long dTime = 1000*60;
private static final String TAG = "TAG";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Begin Alarm Setup
mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
popup = new Intent(MainActivity.this,TimeRecorder.class);
pending_popup = PendingIntent.getBroadcast(
MainActivity.this,0,popup,0);
long timeNow = System.currentTimeMillis();
long nextMinute = (timeNow % dTime) + timeNow;
mAlarmManager.setRepeating(1,nextMinute,dHour,pending_popup);
Date date = new Date(nextMinute);
DateFormat formatter = new SimpleDateFormat("HH:mm:ss:SSS");
String dateFormatted = formatter.format(date);
Log.i(TAG,"Alarm time: " + dateFormatted);
//End Alarm Setup
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
Log.i输出将要触发警报的未来时间。但它永远不会触发(它永远不会打开我的" TimeRecorder"活动。)
任何想法发生了什么?我只学习了大约一个星期的Android编程,只知道基本的Java,我已经尝试过阅读几个解决方案,但他们都处理的代码比我的更复杂。有什么想法吗?
答案 0 :(得分:0)
Try this code
Intent myIntent = new Intent(this, TimeRecorder.class);
pendingIntent = PendingIntent.getBroadcast(this, 0, myIntent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
long nextMinute = (timeNow % dTime) + timeNow;
alarmManager.set(AlarmManager.RTC, nextMinute, pendingIntent);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
nextMinute,dHour, pendingIntent);
答案 1 :(得分:0)
确保你的timerecorder.class扩展了broadcastReciever,所有在alarmManager上执行的代码都必须放在那里,或者该类可以启动一个新的意图,其中包含在激活警报时执行的所有代码,同时也不要; t忘记在清单中注册您的broadcastReciever。顺便说一下,你在第一周的表现相当不错:)