2011-08-19 45 views
0

我尝试在我的Android应用程序中实现报警,这是我的代码如下,我不知道我做错了,请帮助,谢谢。报警dosen't玩android

OnetimeAlarmReceiver.java import android.content.BroadcastReceiver;

 import android.content.Context; 
     import android.content.Intent; 
     import android.widget.Toast; 

     public class OnetimeAlarmReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show(); 
     } 

      } 

NoteEdit.java 

       private int alarm=1; 
     public void setAlarm() { 
    if(alarm!=1){ 
     alarmTime.set(Calendar.YEAR, dateAndTime.get(Calendar.YEAR)); 
     alarmTime.set(Calendar.MONTH, dateAndTime.get(Calendar.MONTH)); 
     alarmTime.set(Calendar.DAY_OF_MONTH, dateAndTime.get(Calendar.DAY_OF_MONTH)); 
     alarmTime.set(Calendar.HOUR_OF_DAY, dateAndTime.get(Calendar.HOUR_OF_DAY)); 
     alarmTime.set(Calendar.MINUTE, dateAndTime.get(Calendar.MINUTE)-alarm); 
     alarmTime.set(Calendar.SECOND, 0); 
     alarmTime.set(Calendar.MILLISECOND, 0); 

    } 

    Intent intent = new Intent(NoteEdit.this, OnetimeAlarmReceiver.class); 
    PendingIntent sender = PendingIntent.getBroadcast(NoteEdit.this, 0, intent, PendingIntent.FLAG_ONE_SHOT); 
    //PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1234567, intent, 0); 

    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, alarmTime.getTimeInMillis(), sender); 
    Toast.makeText(NoteEdit.this, "Alarm set", Toast.LENGTH_LONG).show(); 
} 
private void populateFields() { 
    if (mRowId != null) { 
     Cursor note = mDbHelper.fetchNote(mRowId); 
     startManagingCursor(note); 
     mTitleText.setText(note.getString(
       note.getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE))); 
     mBodyText.setText(note.getString(
       note.getColumnIndexOrThrow(NotesDbAdapter.KEY_BODY))); 
    } 
} 


     public boolean onOptionsItemSelected(MenuItem item) { 

      case PICK_ALARM: 
     final CharSequence[] items1 = {"5 minutes before", "10 minutes before", "15 minutes before","20 minutes before", "30 minutes before", "1 hour before"}; 
     AlertDialog.Builder builder2 = new AlertDialog.Builder(this); 
     builder2.setTitle("Select your alarm"); 
     builder2.setItems(items1, new DialogInterface.OnClickListener() 
     {  

      public void onClick(DialogInterface dialog, int item) { 
       setAlarm(); 
       Toast.makeText(getApplicationContext(), items1[item], Toast.LENGTH_SHORT).show(); 
       if(items1[item]=="5 minutes before"){ 
        alarm =5; 
       }else if(items1[item]=="10 minutes before"){ 
        alarm =10; 
       }else if(items1[item]=="15 minutes before"){ 
        alarm =15; 
       }else if(items1[item]=="20 minutes before"){ 
        alarm =20; 
       }else if(items1[item]=="30 minutes before"){ 
        alarm =30; 
       }else if(items1[item]=="1 hour before"){ 
        alarm =60; 
       } 
      } 
      }); 
     AlertDialog alert1 = builder2.create(); 
     alert1.show(); 
     break; 



     } 
+0

你到达了多远?你有没有收到Toast消息? – Sandy

+0

是的,我得到吐司消息,但它只是警报不播放。 – Tony

+0

你有没有得到吐司消息'警报工作。 – Sandy

回答

0

我认为问题在于你的分钟计算。假设当前时间以分钟为单位,并且您的警报值为5,则设置警报时间分钟为-5。请再重新检查你的代码的逻辑是否正确

编辑:

if(alarm!=1){ 
    alarmTime.set(Calendar.YEAR, dateAndTime.get(Calendar.YEAR)); 
    alarmTime.set(Calendar.MONTH, dateAndTime.get(Calendar.MONTH)); 
    alarmTime.set(Calendar.DAY_OF_MONTH, dateAndTime.get(Calendar.DAY_OF_MONTH)); 
    alarmTime.set(Calendar.HOUR_OF_DAY, dateAndTime.get(Calendar.HOUR_OF_DAY)); 
    alarmTime.set(Calendar.MINUTE, dateAndTime.get(Calendar.MINUTE)); 
    alarmTime.set(Calendar.SECOND, 0); 
    alarmTime.set(Calendar.MILLISECOND, 0); 

} 

当您设置闹钟使用下面的代码:

alarmTimeInMillis = alarm*60*1000; 
    alarmManager.set(AlarmManager.RTC_WAKEUP, alarmTime.getTimeInMillis()-alarmTimeInMillis, sender); 
+0

alarmManager.set(AlarmManager.RTC_WAKEUP,alarmTime.getTimeInMillis() - alarm * 60 * 1000,sender);这是我尝试过的代码,但仍然不起作用,我在设置闹钟后立即获得敬酒信息“闹钟正常工作”,所以我认为时间仍然是错误的,但不知道如何更改,谢谢 – Tony

+0

up function dateAndTime.get() –

0

如果你敬酒消息Alarm worked.,播放音频,您必须添加以下代码
res中创建一个raw文件夹并添加音频文件

MediaPlayer mpaudio=MediaPlayer.create(this,R.raw.audio_file); 

mpaudio.start();

尝试,这也

Calendar calendar = Calendar.getInstance(); 
     calendar.setTimeInMillis(System.currentTimeMillis()); 
     calendar.add(Calendar.SECOND, 10); 
     alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender); 

这里报警10秒后开始

OnetimeAlarmReceiver.class insted的尝试这个MyAlarmService.java

public class MyAlarmService extends Service { 
MediaPlayer mpaudio; 
@Override 
public void onCreate() { 
    // TODO Auto-generated method stub 
    Toast.makeText(this, "MyAlarmService.onCreate()", Toast.LENGTH_LONG).show(); 
    } 
@Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    Toast.makeText(this, "MyAlarmService.onBind()", Toast.LENGTH_LONG).show(); 
    return null; 
    } 
@Override 
public void onDestroy() { 
    // TODO Auto-generated method stub 
    super.onDestroy(); 
    Toast.makeText(this, "MyAlarmService.onDestroy()", Toast.LENGTH_LONG).show(); 
    } 
@Override 
public void onStart(Intent intent, int startId) { 
    // TODO Auto-generated method stub 
    super.onStart(intent, startId); 
    Toast.makeText(this, "MyAlarmService.onStart()", Toast.LENGTH_LONG).show(); 
    mpaudio=MediaPlayer.create(this,R.raw.maya); 
    mpaudio.start(); 
    } 
@Override 
public boolean onUnbind(Intent intent) { 
    // TODO Auto-generated method stub 
    Toast.makeText(this, "MyAlarmService.onUnbind()", Toast.LENGTH_LONG).show(); 
    return super.onUnbind(intent); 
    } 
} 
+0

我已编辑过,请尝试 – Sandy

+0

MediaPlayer mpaudio = MediaPlayer.create(this,R.raw.audio_file);我试过这个代码,但它给了我一个错误说:在MediaPlayer类型中的方法create(Context,int)不适用于参数(OnetimeAlarmReceiver,int) – Tony

+0

用'context'代替'this' – Sandy