Android Noob Here .. AlarmManagers的警报无法正常工作

时间:2014-11-10 04:50:37

标签: android alarmmanager

我已写下以下代码,以便在时钟变为下一分钟时发出警报(比如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,我已经尝试过阅读几个解决方案,但他们都处理的代码比我的更复杂。有什么想法吗?

2 个答案:

答案 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。顺便说一下,你在第一周的表现相当不错:)