2014-05-25 2 views
0

여러 개의 알람을 생성하는 앱이 있습니다. 그러나 로그를 업데이트하는 것과 같은 다른 기능의 경우 알람이 시작되면 alarmID를 검색해야합니다.Android AlarmManager - 알람이 울릴 때 AlarmID 가져 오기

public void setAlarm(){ 
    Intent intentAlarm = new Intent(c,AlarmReceiver.class); 
    intentAlarm.putExtra("userid", userid); 
    // create the object 
    AlarmManager alarmManager = (AlarmManager) 
    c.getSystemService(Context.ALARM_SERVICE); 
    PendingIntent alarmIntent; 
    alarmIntent = PendingIntent.getActivity(c, alarmID, intentAlarm, PendingIntent.FLAG_CANCEL_CURRENT); 

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,timeToMiliseconds(hour,minute), 
      AlarmManager.INTERVAL_DAY,alarmIntent); 

    Toast.makeText(c,"Alarm set for " + toTime(hour,minute),Toast.LENGTH_SHORT).show(); 
    Log.d("setAlarm()",alarm.toString()); 

} 

경보 수신기 (잘 작동) 활동이다 : 여기

는 알람이 설정되어있는 코드입니다. 현재 해고중인 알람 ID를 검색하면됩니다.

public class AlarmReceiver extends Activity { 

    private MediaPlayer mMediaPlayer; 
    private String scanContent; 
    private static final int ZBAR_SCANNER_REQUEST = 0; 
    String userid; 
    Button backBtn; 
    private PowerManager.WakeLock wakelock; 
    private ListView medBoxList; 
    ArrayList<HashMap<String, String>> medList; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.alarm); 
     ActionBar actionBar = getActionBar(); 
    actionBar.hide(); 

    /** 
    * Wakeup device if it's sleeping 
    */ 
    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
     wakelock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag"); 
     wakelock.acquire(); 
     this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | 
      WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
      WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
      WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN | 
      WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
      WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
      WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 


    Intent alarmActivityIntent = getIntent(); 
    userid = alarmActivityIntent.getStringExtra("userid"); 
    playSound(this, getAlarmUri()); 
    Toast.makeText(this, "Take Medication", Toast.LENGTH_LONG).show(); 

    Button stopAlarm = (Button) findViewById(R.id.scanQR); 
    Button skipBtn = (Button) findViewById(R.id.skipBtn); 
    backBtn = (Button)findViewById(R.id.backBtn); 
    //Click button to scan and update userlog 

    //Click button to scan and update userlog 
    stopAlarm.setOnClickListener(new View.OnClickListener(){ 

     public void onClick(View v){ 
      mMediaPlayer.stop(); 
      launchQRScanner();     
     } 
    }); 

    //Click button to skip 
    skipBtn.setOnClickListener(new View.OnClickListener(){ 

     public void onClick(View v){ 
      mMediaPlayer.stop(); 
     } 
    }); 
} 
private void playSound(Context context, Uri alert) { 
    mMediaPlayer = new MediaPlayer(); 
    try { 
     mMediaPlayer.setDataSource(context, alert); 
     final AudioManager audioManager = (AudioManager) context 
       .getSystemService(Context.AUDIO_SERVICE); 
     if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) { 
      mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); 
      mMediaPlayer.prepare(); 
      mMediaPlayer.start(); 
     } 
    } catch (IOException e) { 
     System.out.println("OOPS"); 
    } 
} 

//Get an alarm sound. Try for an alarm. If none set, try notification, 
//Otherwise, ringtone. 
private Uri getAlarmUri() { 
    Uri alert = RingtoneManager 
      .getDefaultUri(RingtoneManager.TYPE_ALARM); 
    if (alert == null) { 
     alert = RingtoneManager 
       .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     if (alert == null) { 
      alert = RingtoneManager 
        .getDefaultUri(RingtoneManager.TYPE_RINGTONE); 
     } 
    } 
    return alert; 
} 

public void launchQRScanner() { 
    mMediaPlayer.stop(); 
    Intent intent = new Intent(this, ZBarScannerActivity.class); 
    intent.putExtra(ZBarConstants.SCAN_MODES, new int[]{Symbol.QRCODE}); 
    startActivityForResult(intent, ZBAR_SCANNER_REQUEST); 
} 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    mMediaPlayer.stop(); 
    scanContent = data.getStringExtra(ZBarConstants.SCAN_RESULT); 
    finish(); 
    if(scanContent != null){ 
     updateUserLog(scanContent); 
     Intent nextScreen = new Intent(getApplicationContext(),UserlogListActivity.class); 
     startActivity(nextScreen); 

    } 
} 

//Disable alarm with button instead of scan 
public void alarmStopper(View v){ 
    mMediaPlayer.stop(); 
    Intent nextScreen = new Intent(getApplicationContext(),UserlogListActivity.class); 
    startActivity(nextScreen); 
} 
//TAKE MED ACTIVITY (MOVE TO) 
public void updateUserLog(String scanContent){ 
    //Toast.makeText(this, "Adding Userlog = " + scanContent, Toast.LENGTH_SHORT).show(); 
    if(scanContent != null){ 

     String userid,medname,tabstaken,dob; 

     //Break the scan content into strings for each variable 
     StringTokenizer st = new StringTokenizer(scanContent, ","); 
      dob = st.nextToken(); 
      medname = st.nextToken(); 
      tabstaken = st.nextToken(); 

     if(dob != "" && medname != "" && tabstaken != ""){ 
       DatabaseHandler db = new DatabaseHandler(getApplicationContext()); 
       HashMap<String,String> userLog = new HashMap<String, String>(); 
       HashMap<String,String> user = new HashMap<String, String>(); 
       user = db.getUserDetails(); 

       //Store the userlog by passing to UserLogEntry 
       userid = user.get("uid"); 

       if(userid != ""){ 
        userLog = db.getNewestUserLogEntryForMed(medname); 
        String tabstr = userLog.get("tabsleft"); 
        Log.d ("getNewestUserLogEntryForMed()", "medname " + userLog.get("medname") + " timetaken " 
          + userLog.get("medtaken") + " Tabs - " + tabstr); 
        int tabs = Integer.parseInt(tabstr); 
        tabs = tabs - 1; 
        String tabsupdated = Integer.toString(tabs); 
        Log.d ("Tabs Updated - ", "medname " + userLog.get("medname") + " timetaken " 
          + userLog.get("medtaken") + " Tabs - " + tabsupdated); 
        UserLogEntry userlog = new UserLogEntry(getApplicationContext(),userid,medname,tabsupdated); 
        userlog.addUserLog(); 
        finish(); 
       } 
     } 

    } 

} 

팁이 있습니까?

많이 감사합니다.

답변

0

그래서 대답은 나에게 얼굴을 응시하고있었습니다. 나는 번들을 사용하여 내가 필요로하는 것을 알람 의도에 전달할 수있다. 이미 사용자 ID를 전달하고있었습니다 (잘못). 나는 의도가있을 때마다 기억해야한다. 번들을 사용하여 간단한 변수를 전달할 수있다.

Intent intentAlarm = new Intent(c,AlarmReceiver.class); 
Bundle extras = new Bundle(); 
extras.putString("userid", userid); 
extras.putInt("alarmID", alarmID); 
extras.putString("userlogID", userlogID); 
extras.putString("medname", medname); 
intentAlarm.putExtras(extras); 

나는 다른 비슷한 할 필요가 나는 경우 누군가 내 자신의 질문에 대답 거라고 생각하지만,이 도움이되지 않은 경우 운영자가 삭제할 수 있습니다.

관련 문제