简体   繁体   English

Android AlarmManager警报不起作用

[英]Android AlarmManager Alarm Not Working

I'm trying to make a simple alarm trigger. 我正在尝试制作一个简单的警报触发器。 When alarm goes off there should aa simple sound alarm. 警报响起时,应该有一个简单的声音警报。 But the alarm doesn't go off, nothing happens. 但是警报没有响起,什么也没发生。 Now I'm not sure where am I mistaken - is it the times? 现在我不确定我在哪里弄错了-是时候了吗? Intents? 意向? Receivers? 接收者?

Class in which I'm using AlarmManager 我正在使用AlarmManager的类

package com.example.prva;


import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;

public class Meni_Splash extends Activity{  
    Calendar c = Calendar.getInstance();
    private int hour = c.get(Calendar.HOUR_OF_DAY);
    private int minute = c.get(Calendar.MINUTE);
    int milivreme;
    int milipicker;
    long sveskupa;
    int hoursad;
    int minutesad;
    protected boolean timeactive = true;
    Handler h=new Handler();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);             
        h.post(new Runnable(){
            @Override
            public void run() {
                String currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date());
                TextView text = (TextView) findViewById(R.id.textDate);
                text.setText(currentDateTimeString);
                h.postDelayed(this, 1000);
            }
        });     


        final TimePicker picker = (TimePicker) findViewById(R.id.timePicker);
        final TextView text = (TextView) findViewById(R.id.texttime);

        picker.setIs24HourView(true);       
        picker.setCurrentHour(hour);
        picker.setCurrentMinute(minute);

        Button btnt = (Button) findViewById(R.id.buttontime);       



        btnt.setOnClickListener(new View.OnClickListener() {


            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                hoursad = picker.getCurrentHour();
                minutesad = picker.getCurrentMinute();
                milipicker = (((hoursad) * 60 * 60 * 1000) + ((minutesad) * 60 * 1000));
                text.setText(new StringBuilder().append(hoursad).append(":").append(minutesad).append( "Trenutno vrijeme u milisekundama : ").append(System.currentTimeMillis()).append(" vrijeme izabrano u milisekundama sve skupa ").append(milipicker));
            }
        });

        Button btnalarm = (Button) findViewById(R.id.btnalarm);
        btnalarm.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                hoursad = picker.getCurrentHour();
                minutesad = picker.getCurrentMinute();
                milivreme = (((hour)* 60 * 60 * 1000)+ ((minute) * 60 * 1000));     
                milipicker = (((hoursad) * 60 * 60 * 1000) + ((minutesad) * 60 * 1000));
                sveskupa = milipicker - milivreme;

                Intent intent = new Intent(Meni_Splash.this, AlarmReceiver.class);
                PendingIntent pendingintent = PendingIntent.getActivity(Meni_Splash.this, 2, intent, PendingIntent.FLAG_CANCEL_CURRENT);

                AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
                am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + sveskupa, pendingintent);                      

            }
        });

        Button btnv = (Button) findViewById(R.id.buttonv);
        btnv.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                startActivity(new Intent(Meni_Splash.this, button.class));              
            }
        });             
    }   
}

AlarmReceiver class : AlarmReceiver类:

package com.example.prva;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;


public class AlarmReceiver extends Activity {
    protected MediaPlayer MPAlarm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        MPAlarm = MediaPlayer.create(this, R.raw.splash);
        MPAlarm.start();
    }




};

You should register your AlarmReceiver on the Manifest with this: 您应该使用以下清单在清单上注册AlarmReceiver:

<receiver android:process=":remote" android:name="com.yourpackage.AlarmReceiver" android:enabled="true" ></receiver>

Don't forget to put the android:process=":remote" in order to make it work. 不要忘记放置android:process =“:remote”使其起作用。

Look like there problem in AlarmManager set() function. 看起来AlarmManager set()函数中存在问题。

AlarmManager Set() => AlarmManager Set()=>

public void set (int type, long triggerAtMillis, PendingIntent operation) 公共无效集(int类型,长触发器AtMillis,PendingIntent操作)

Parameters type One of ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC or RTC_WAKEUP. 参数类型为ELAPSED_REALTIME,ELAPSED_REALTIME_WAKEUP,RTC或RTC_WAKEUP中的一种。 triggerAtMillis time in milliseconds that the alarm should go off, using the appropriate clock (depending on the alarm type). 使用适当的时钟(取决于警报类型),triggerAtMillis警报发出的时间(以毫秒为单位)。 operation Action to perform when the alarm goes off; 警报响起时执行的操作; typically comes from IntentSender.getBroadcast(). 通常来自IntentSender.getBroadcast()。

Please note that operation (PendingIntent), will get the action from IntentSender.getBroadcast(). 请注意,操作(PendingIntent)将从IntentSender.getBroadcast()中获取操作。 Hope it's helps. 希望对您有所帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM