2011-08-19 46 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