Hallo,
leider habe ich noch eine Frage, dann bin ich endlich mit der App fertig.
Mein Problem ist nun folgendes:
Man kann in einer Activity einstellen, wann eine SMS verschickt werden soll und in welchem Intervall.
Die Klasse BroadcastReceiver soll das Ganze verarbeiten und am Ende dann als SMS verschicken.
Der AlarmManager funktioneirt soweit, das Einzige, das nicht funktioniert ist die Nachricht, die an die SMS übergeben wird und ich weiss leider nicht, wie ich es hinbekommen kann ( SmsManager befindet sich in der onReceive - Methode und von dort weiss ich nicht, wie ich die timer Variable zugreifen kann?? )
So sieht mein Code aus:
1public class AlarmManagerActivity extends Activity {
2
3 private AlarmManagerBroadcastReceiver alarm;
4 Button button1, button2, button3, button4, button5;
5 NumberPicker np;
6 TimePicker tp;
7 int hour, minute;
8
9 @Override
10 public void onCreate(Bundle savedInstanceState) {
11 super.onCreate(savedInstanceState);
12 setContentView(R.layout.activity_alarm_manager);
13 alarm = new AlarmManagerBroadcastReceiver();
14 tp = new TimePicker(getBaseContext());
15 addListenerOnButton();
16 tp = (TimePicker)findViewById(R.id.timePicker1);
17 tp.clearFocus();
18 np = (NumberPicker) findViewById(R.id.numberPicker1);
19 np.setMinValue(0);
20 np.setMaxValue(1440);
21 np.setWrapSelectorWheel(true);
22 np.setValue(1);
23 }
24
25 public void addListenerOnButton() {
26 button1 = (Button) findViewById(R.id.button1);
27 button2 = (Button) findViewById(R.id.button2);
28 button3 = (Button) findViewById(R.id.button3);
29 button4 = (Button) findViewById(R.id.button4);
30 button5 = (Button) findViewById(R.id.button5);
31
32 button1.setOnClickListener(new OnClickListener() {
33 public void onClick(View arg0) {
34 if ( np.getValue() > 0 )
35 Toast.makeText(getBaseContext(), "15 Minuten mit " + np.getValue() + " Minuten Intervall sind gebucht", Toast.LENGTH_SHORT).show();
36 else if (np.getValue() == 0)
37 Toast.makeText(getBaseContext(), "15 Minuten sind gebucht", Toast.LENGTH_SHORT).show();
38 else
39 Toast.makeText(getBaseContext(), "15 Minuten mit " + np.getValue() + "ner Minute Intervall sind gebucht", Toast.LENGTH_SHORT).show();
40 alarm.SetAlarm(getApplicationContext(), np.getValue(), tp.getCurrentHour(), tp.getCurrentMinute());
41 button2.setEnabled(false);
42 button3.setEnabled(false);
43 button4.setEnabled(false);
44 button5.setEnabled(false);
45 }
46 });
47
48 button2.setOnClickListener(new OnClickListener() {
49 public void onClick(View arg0) {
50 if ( np.getValue() > 0 )
51 Toast.makeText(getBaseContext(), "30 Minuten mit " + np.getValue() + " Minuten Intervall sind gebucht", Toast.LENGTH_SHORT).show();
52 else
53 Toast.makeText(getBaseContext(), "30 Minuten sind gebucht", Toast.LENGTH_SHORT).show();
54 alarm.SetAlarm(getApplicationContext(), np.getValue(), tp.getCurrentHour(), tp.getCurrentMinute());
55 button1.setEnabled(false);
56 button3.setEnabled(false);
57 button4.setEnabled(false);
58 button5.setEnabled(false);
59 }
60 });
61
62 button3.setOnClickListener(new OnClickListener() {
63 public void onClick(View arg0) {
64 if ( np.getValue() > 0 )
65 Toast.makeText(getBaseContext(), "60 Minuten mit " + np.getValue() + " Minuten Intervall sind gebucht", Toast.LENGTH_SHORT).show();
66 else
67 Toast.makeText(getBaseContext(), "60 Minuten sind gebucht", Toast.LENGTH_SHORT).show();
68 alarm.SetAlarm(getApplicationContext(), np.getValue(), tp.getCurrentHour(), tp.getCurrentMinute());
69 button1.setEnabled(false);
70 button2.setEnabled(false);
71 button4.setEnabled(false);
72 button5.setEnabled(false);
73 }
74 });
75
76 button4.setOnClickListener(new OnClickListener() {
77 public void onClick(View arg0) {
78 if ( np.getValue() > 0 )
79 Toast.makeText(getBaseContext(), "90 Minuten mit " + np.getValue() + " Minuten Intervall sind gebucht", Toast.LENGTH_SHORT).show();
80 else
81 Toast.makeText(getBaseContext(), "90 Minuten sind gebucht", Toast.LENGTH_SHORT).show();
82 alarm.SetAlarm(getApplicationContext(), np.getValue(), tp.getCurrentHour(), tp.getCurrentMinute());
83 button1.setEnabled(false);
84 button2.setEnabled(false);
85 button3.setEnabled(false);
86 button5.setEnabled(false);
87 }
88 });
89
90 button5.setOnClickListener(new OnClickListener() {
91 public void onClick(View arg0) {
92 if ( np.getValue() > 0 )
93 Toast.makeText(getBaseContext(), "120 Minuten mit " + np.getValue() + " Minuten Intervall sind gebucht", Toast.LENGTH_SHORT).show();
94 else
95 Toast.makeText(getBaseContext(), "120 Minuten sind gebucht", Toast.LENGTH_SHORT).show();
96 alarm.SetAlarm(getApplicationContext(), np.getValue(), tp.getCurrentHour(), tp.getCurrentMinute());
97 button1.setEnabled(false);
98 button2.setEnabled(false);
99 button3.setEnabled(false);
100 button4.setEnabled(false);
101 }
102 });
103 }
104
105 @Override
106 protected void onStart() {
107 super.onStart();
108 }
109
110 public void startRepeatingTimer(View view) {
111 Context context = this.getApplicationContext();
112 if(alarm != null){
113 alarm.CancelAlarm(context);
114 button1.setEnabled(true);
115 button2.setEnabled(true);
116 button3.setEnabled(true);
117 button4.setEnabled(true);
118 button5.setEnabled(true);
119 Toast.makeText(context, "Wiederholung wurde gestoppt!", Toast.LENGTH_SHORT).show();
120 //alarm.SetAlarm(context);
121 }else{
122 Toast.makeText(context, "Alarm is null", Toast.LENGTH_SHORT).show();
123 }
124 }
125/*
126 public void cancelRepeatingTimer(View view){
127 Context context = this.getApplicationContext();
128 if(alarm != null){
129 alarm.CancelAlarm(context);
130 }else{
131 Toast.makeText(context, "Alarm is null", Toast.LENGTH_SHORT).show();
132 }
133 }
134 */
135/*
136 public void onetimeTimer(View view){
137 Context context = this.getApplicationContext();
138 if(alarm != null){
139 alarm.setOnetimeTimer(context);
140 }else{
141 Toast.makeText(context, "Alarm is null", Toast.LENGTH_SHORT).show();
142 }
143 }
144*/
145 @Override
146 public boolean onCreateOptionsMenu(Menu menu) {
147 getMenuInflater().inflate(R.menu.activity_widget_alarm_manager, menu);
148 return true;
149 }
150}
BroadcastReceiver
1public class AlarmManagerBroadcastReceiver extends BroadcastReceiver {
2
3 final public static String ONE_TIME = "onetime";
4 @Override
5 public void onReceive(Context context, Intent intent) {
6 PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
7 PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "YOUR TAG");
8 //Acquire the lock
9 wl.acquire();
10
11 SmsManager smsManager = SmsManager.getDefault();
12 smsManager.sendTextMessage("082820200", null, "test", null, null); // genau hier ist der Fehler, weil der SmsManager in der Receive - Methode ist und ich nicht weiss, wie ich auf die Variabel timer von der Methode setAlarm zugreifen kann!
13//Habe auch schon versucht die Klasse SmsManager in die setAlarm zu geben, hat aber mit einem Absturz geendet
14
15 //You can do the processing here update the widget/remote views.
16 Bundle extras = intent.getExtras();
17 //StringBuilder msgStr = new StringBuilder();
18
19 if(extras != null && extras.getBoolean(ONE_TIME, Boolean.FALSE)){
20 //msgStr.append("One time Timer : ");
21 }
22 /*Format formatter = new SimpleDateFormat("hh:mm:ss a");
23 msgStr.append(formatter.format(new Date()));
24
25 Toast.makeText(context, msgStr, Toast.LENGTH_LONG).show();*/
26
27 //Release the lock
28 wl.release();
29 }
30 public void SetAlarm(Context context, long timer, int hour, int minute){
31 if(timer != 0){//set repeating timer
32 AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
33 Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
34 intent.putExtra(ONE_TIME, Boolean.FALSE);
35 PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
36 //start in 2 seconds
37 /*Calendar calendar = Calendar.getInstance();
38 calendar.setTimeInMillis(System.currentTimeMillis());
39 calendar.add(Calendar.SECOND, 2);*/
40 //when to start
41 Calendar timeOff9 = Calendar.getInstance();
42 timeOff9.set(Calendar.HOUR_OF_DAY, hour);
43 timeOff9.set(Calendar.MINUTE, minute);
44 //timeOff9.set(Calendar.SECOND, 00);
45 //when to start
46 am.setRepeating(AlarmManager.RTC_WAKEUP, timeOff9.getTimeInMillis(), timer*60000, pi);
47 }else{//one timer
48 AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
49 Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
50 intent.putExtra(ONE_TIME, Boolean.TRUE);
51 PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
52 am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), pi);
53 }
54 }
55 public void CancelAlarm(Context context)
56 {
57 Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
58 PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
59 AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
60 alarmManager.cancel(sender);
61 }
62 /*
63 public void setOnetimeTimer(Context context){
64 AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
65 Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
66 intent.putExtra(ONE_TIME, Boolean.TRUE);
67 PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
68 am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), pi);
69 }
70 */
71}
Vll. kann mir jemand bei dem letzten Stück noch helfen!
Danke vielmals!