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();
}
}
}
}
팁이 있습니까?
많이 감사합니다.