私は少し問題があります。私が助けてくれれば非常に感謝しています。私はクライアント薬のためのローカルデータベースのようなアプリを持っています。ピルを追加するときに、特定のピルを取る必要があるときに通知を追加することができます。彼は1時間しか設定できず、その週から数日を選択することができます。だから、アプリは、その特定の時間に毎日のためのアラームをしている、私のアプリは多くのアラームを作っている、私はそれが最良の方法だとは思わないが、それは私が作った方法です。これを行うより良い方法なら、私を助けてください。しかし、今私の主な問題は、クライアントが薬を削除したいときに、それぞれの錠剤からアラームを無効にできるように保留中の意図を保存する方法です。それぞれのオブジェクトのアラームを保存および削除する方法
public class Home extends AppCompatActivity implements View.OnClickListener {
////////////////////DECLARARI///////////////////
LinearLayout[] med = new LinearLayout[11];
TextView[] name = new TextView[11];
TextView[] nr = new TextView[11];
TextView[] plus = new TextView[11];
TextView[] minus = new TextView[11];
TextView[] info = new TextView[11];
public static final String PREFS_NAME = "MyMeds";
////////////////////////////////////////////////
public void calendar(View view, final EditText dateMed){
final Calendar calendar = Calendar.getInstance();
final DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener(){
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, monthOfYear);
calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
String data = "dd/MM/yy";
SimpleDateFormat sdf = new SimpleDateFormat(data, Locale.ENGLISH);
dateMed.setText(sdf.format(calendar.getTime()));
}
};
view.findViewById(R.id.dateMed).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new DatePickerDialog(Home.this, date, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)).show();
}
});
}
public void clock(View view, final Calendar setat){
final TextView ora = (TextView)view.findViewById(R.id.clock);
ora.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Calendar time = Calendar.getInstance();
int hour = time.get(Calendar.HOUR_OF_DAY);
int minute = time.get(Calendar.MINUTE);
TimePickerDialog timePickerDialog;
timePickerDialog = new TimePickerDialog(Home.this, new TimePickerDialog.OnTimeSetListener(){
@Override
public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute){
if(selectedHour < 10 && selectedMinute >= 10) ora.setText("0"+selectedHour + ":" + selectedMinute);
if(selectedHour >= 10 && selectedMinute < 10) ora.setText(selectedHour + ":" + "0" + selectedMinute);
if(selectedHour < 10 && selectedMinute < 10) ora.setText("0" + selectedHour + ":" + "0" + selectedMinute);
if(selectedHour >= 10 && selectedMinute >= 10) ora.setText(selectedHour + ":" + selectedMinute);
setat.set(Calendar.HOUR_OF_DAY, selectedHour);
setat.set(Calendar.MINUTE, selectedMinute);
}
}, hour, minute, true);
timePickerDialog.setTitle("");
timePickerDialog.show();
}
});
}
public void setAlarm(int day , Calendar setat){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_WEEK, day+1);
calendar.set(Calendar.HOUR_OF_DAY, setat.get(Calendar.HOUR_OF_DAY));
calendar.set(Calendar.MINUTE, setat.get(Calendar.MINUTE));
calendar.set(Calendar.SECOND, 0);
long time = calendar.getTimeInMillis() - Calendar.getInstance().getTimeInMillis();
Log.d("day", String.valueOf(calendar.get(Calendar.DAY_OF_WEEK)));
Log.d("time", String.valueOf(setat.get(Calendar.HOUR_OF_DAY)) + ":" + String.valueOf(setat.get(Calendar.MINUTE)));
Log.d("actual", String.valueOf(Calendar.getInstance().get(Calendar.MINUTE)));
Intent intent = new Intent(getApplicationContext(), NotificationService.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), Calendar.getInstance().get(Calendar.MILLISECOND), intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager)getApplicationContext().getSystemService(ALARM_SERVICE);
if(calendar.getTimeInMillis() > System.currentTimeMillis())
Log.d("bigger", "yes");
else
Log.d("bigger", "no");
alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
}
public void addMedNou(){
findViewById(R.id.add).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(Home.this);
View view = getLayoutInflater().inflate(R.layout.adddialog, null);
builder.setView(view);
final AlertDialog dialog = builder.create();
final EditText nameMed = (EditText)view.findViewById(R.id.nameMed);
final EditText nrMed = (EditText)view.findViewById(R.id.nrMed);
final EditText comm = (EditText)view.findViewById(R.id.comm);
final EditText dateMed = (EditText)view.findViewById(R.id.dateMed);
FrameLayout add = (FrameLayout)view.findViewById(R.id.add);
FrameLayout cancel = (FrameLayout)view.findViewById(R.id.cancel);
calendar(view, dateMed);
reminder(view);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!nameMed.getText().toString().isEmpty() && !nrMed.getText().toString().isEmpty()){
SharedPreferences valoriSalvate = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor edit = valoriSalvate.edit();
int total = valoriSalvate.getInt("total", 0);
total++;
if(total <= 10){
edit.putInt("total", total);
edit.putString("nume" + total, nameMed.getText().toString());
edit.putInt("nr" + total, Integer.parseInt(nrMed.getText().toString()));
edit.putString("comm" + total, comm.getText().toString());
edit.putString("date" + total, dateMed.getText().toString());
}
edit.commit();
dialog.dismiss();
Intent repeat = new Intent(Home.this, Home.class);
startActivity(repeat);
}
else
dialog.dismiss();
}
});
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.show();
}
});
}
public void reminder(final View view){
view.findViewById(R.id.reminder).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder reminder = new AlertDialog.Builder(Home.this);
final View layout = getLayoutInflater().inflate(R.layout.alarm, null);
reminder.setView(layout);
final AlertDialog dialog = reminder.create();
final Calendar setat = Calendar.getInstance();
clock(layout, setat);
layout.findViewById(R.id.confirm).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CheckBox[] boxes = new CheckBox[8];
boxes[0] = (CheckBox)layout.findViewById(R.id.check0);
boxes[1] = (CheckBox)layout.findViewById(R.id.check1);
boxes[2] = (CheckBox)layout.findViewById(R.id.check2);
boxes[3] = (CheckBox)layout.findViewById(R.id.check3);
boxes[4] = (CheckBox)layout.findViewById(R.id.check4);
boxes[5] = (CheckBox)layout.findViewById(R.id.check5);
boxes[6] = (CheckBox)layout.findViewById(R.id.check6);
if(boxes[0].isChecked()) {setAlarm(1, setat);}
if(boxes[1].isChecked()) {setAlarm(2, setat);}
if(boxes[2].isChecked()) {setAlarm(3, setat);}
if(boxes[3].isChecked()) {setAlarm(4, setat);}
if(boxes[4].isChecked()) {setAlarm(5, setat);}
if(boxes[5].isChecked()) {setAlarm(6, setat);}
if(boxes[6].isChecked()) {setAlarm(7, setat);}
Toast.makeText(Home.this, "Alarm has been set!", Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
});
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.show();
}
});
}
public void declarari(){
for(int i=1;i<=10;i++){
String mID = "m" + i;
String nrID = "nr" + i;
String nameID = "name" + i;
String plusID = "plus" + i;
String minusID = "minus" + i;
String infoID = "info" + i;
int resID = getResources().getIdentifier(mID, "id", getPackageName());
int resNrID = getResources().getIdentifier(nrID, "id", getPackageName());
int resNameID = getResources().getIdentifier(nameID, "id", getPackageName());
int resPlusID = getResources().getIdentifier(plusID, "id", getPackageName());
int resMinusID = getResources().getIdentifier(minusID, "id", getPackageName());
int resInfoID = getResources().getIdentifier(infoID, "id", getPackageName());
med[i] = ((LinearLayout)findViewById(resID));
nr[i] = ((TextView)findViewById(resNrID));
name[i] = ((TextView)findViewById(resNameID));
plus[i] = ((TextView)findViewById(resPlusID));
plus[i].setOnClickListener(this);
minus[i] = ((TextView)findViewById(resMinusID));
minus[i].setOnClickListener(this);
info[i] = ((TextView)findViewById(resInfoID));
info[i].setOnClickListener(this);
}
}
public void afisare(){
SharedPreferences valoriSalvate = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor edit = valoriSalvate.edit();
int total = valoriSalvate.getInt("total", 0);
for(int i=1;i<=total;i++){
med[i].setVisibility(View.VISIBLE);
String keyNume = "nume" + i;
name[i].setText(valoriSalvate.getString(keyNume, null));
String keyNr = "nr" + i;
nr[i].setText(String.valueOf(valoriSalvate.getInt(keyNr, 0)));
}
edit.commit();
}
public void setari(){
findViewById(R.id.setari).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent setari = new Intent(Home.this, setari.class);
startActivity(setari);
}
});
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
addMedNou();
setari();
declarari();
afisare();
}
@Override
public void onClick(View v){
int actual;
SharedPreferences valoriSalvate = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor edit = valoriSalvate.edit();
AlertDialog.Builder builder = new AlertDialog.Builder(Home.this);
View info = getLayoutInflater().inflate(R.layout.infoo, null);
builder.setView(info);
AlertDialog dialog = builder.create();
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
TextView title = (TextView)info.findViewById(R.id.title);
TextView pastile = (TextView)info.findViewById(R.id.pastile);
TextView date = (TextView)info.findViewById(R.id.date);
TextView comentariu = (TextView)info.findViewById(R.id.comentariu);
ご注意いただきありがとうございます。少しでもお手伝いできることを願っております。良い一日を過ごしてください!
CountDownTimerを使用すると、お手伝いをすることができます:これが可能であれば、私はANSを投稿できますhttps://developer.android.com/reference/android/os/CountDownTimer.html – Hamza
あなたのコメントありがとうございます私の場合はうまくいきません。なぜなら、カウントダウンタイマーのために、私は、アラーム間の正確で常に同じ時間を必要とするからです –