2 verschiedene Alarmmanager aber ein BroadcastReceiver

  • Antworten:31
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 98

06.12.2013 23:07:26 via Website

Hallo,
habe jetzt verschiedene Versuche unternommen, aber leider immer ohne positivem Ergebnis.

1) 2 Klassen mit BroadcastReceiver führte dazu, dass nur ein BroadcastReceiver funktionierte
2) Habe deinen Vorschlag hoffentlich richtig umgesetzt:

Dabei hat es sich ergeben, dass der erste AlarmManager überschrieben wurde.

Ich schicke hier einmal meine ganzen Code, da ich jetzt ehrlich nicht mehr weiter weiss:

In der MainActivity werden Button1 u Button2 die Ergebnisse mittels SharedPreferences gesetzt, die ich dann im BroadcastReceiver auffange.

MainActivity:

1package at.parken.parken;
2
3import android.os.Bundle;
4import android.app.Activity;
5import android.content.Context;
6import android.content.Intent;
7import android.content.SharedPreferences;
8import android.view.Menu;
9import android.view.MenuInflater;
10import android.view.MenuItem;
11import android.view.View;
12import android.view.View.OnClickListener;
13import android.widget.Button;
14import android.widget.NumberPicker;
15import android.widget.TimePicker;
16import android.widget.Toast;
17import at.parken.parken.R;
18
19public class AlarmManagerActivity extends Activity {
20
21 private AlarmManagerBroadcastReceiver alarm;
22 Button button1, button2, button3, button4, button5;
23 NumberPicker np;
24 TimePicker tp;
25 int hour, minute;
26 int counter;
27
28 @Override
29 public void onCreate(Bundle savedInstanceState) {
30 super.onCreate(savedInstanceState);
31 setContentView(R.layout.activity_alarm_manager);
32 alarm = new AlarmManagerBroadcastReceiver();
33 tp = new TimePicker(getBaseContext());
34 addListenerOnButton();
35 tp = (TimePicker)findViewById(R.id.timePicker1);
36 tp.clearFocus();
37 np = (NumberPicker) findViewById(R.id.numberPicker1);
38 np.setMinValue(0);
39 np.setMaxValue(1440);
40 np.setWrapSelectorWheel(true);
41 np.setValue(1);
42 }
43
44 public void addListenerOnButton() {
45 button1 = (Button) findViewById(R.id.button1);
46 button2 = (Button) findViewById(R.id.button2);
47 button3 = (Button) findViewById(R.id.button3);
48 button4 = (Button) findViewById(R.id.button4);
49 button5 = (Button) findViewById(R.id.button5);
50
51 button1.setOnClickListener(new OnClickListener() {
52 public void onClick(View arg0) {
53 np.clearFocus();
54 SharedPreferences prefs = getSharedPreferences("a", MODE_PRIVATE);
55 SharedPreferences.Editor editor = prefs.edit();
56 editor.putString("a", Integer.toString(15));
57 editor.commit();
58 if ( np.getValue() == 1)
59 Toast.makeText(getBaseContext(), "15 Minuten mit " + np.getValue() + "ner Minute Intervall sind gebucht", Toast.LENGTH_SHORT).show();
60 else if (np.getValue() == 0)
61 Toast.makeText(getBaseContext(), "15 Minuten sind gebucht", Toast.LENGTH_SHORT).show();
62 else
63 Toast.makeText(getBaseContext(), "15 Minuten mit " + np.getValue() + " Minuten Intervall sind gebucht", Toast.LENGTH_SHORT).show();
64 alarm.SetAlarm(getApplicationContext(), np.getValue(), tp.getCurrentHour(), tp.getCurrentMinute());
65 counter+=1;
66 if(counter == 2){
67 button1.setEnabled(false);
68 button2.setEnabled(false);
69 button3.setEnabled(false);
70 button4.setEnabled(false);
71 button5.setEnabled(false);
72 }
73 }
74 });
75
76 button2.setOnClickListener(new OnClickListener() {
77 public void onClick(View arg0) {
78 np.clearFocus();
79 SharedPreferences prefs = getSharedPreferences("a", MODE_PRIVATE);
80 SharedPreferences.Editor editor = prefs.edit();
81 editor.putString("a", Integer.toString(30));
82 editor.commit();
83 if ( np.getValue() == 1)
84 Toast.makeText(getBaseContext(), "30 Minuten mit " + np.getValue() + "ner Minute Intervall sind gebucht", Toast.LENGTH_SHORT).show();
85 else if (np.getValue() == 0)
86 Toast.makeText(getBaseContext(), "30 Minuten sind gebucht", Toast.LENGTH_SHORT).show();
87 else
88 Toast.makeText(getBaseContext(), "30 Minuten mit " + np.getValue() + " Minuten Intervall sind gebucht", Toast.LENGTH_SHORT).show();
89 alarm.SetAlarm1(getApplicationContext(), np.getValue(), tp.getCurrentHour(), tp.getCurrentMinute());
90 counter+=1;
91 if(counter == 2){
92 button1.setEnabled(false);
93 button2.setEnabled(false);
94 button3.setEnabled(false);
95 button4.setEnabled(false);
96 button5.setEnabled(false);
97 }
98 }
99 });
100
101 button3.setOnClickListener(new OnClickListener() {
102 public void onClick(View arg0) {
103 np.clearFocus();
104 SharedPreferences prefs = getSharedPreferences("a", MODE_PRIVATE);
105 SharedPreferences.Editor editor = prefs.edit();
106 editor.putString("a", Integer.toString(60));
107 editor.commit();
108 if ( np.getValue() == 1)
109 Toast.makeText(getBaseContext(), "60 Minuten mit " + np.getValue() + "ner Minute Intervall sind gebucht", Toast.LENGTH_SHORT).show();
110 else if (np.getValue() == 0)
111 Toast.makeText(getBaseContext(), "60 Minuten sind gebucht", Toast.LENGTH_SHORT).show();
112 else
113 Toast.makeText(getBaseContext(), "60 Minuten mit " + np.getValue() + " Minuten Intervall sind gebucht", Toast.LENGTH_SHORT).show();
114 alarm.SetAlarm(getApplicationContext(), np.getValue(), tp.getCurrentHour(), tp.getCurrentMinute());
115 button1.setEnabled(false);
116 button2.setEnabled(false);
117 button3.setEnabled(false);
118 button4.setEnabled(false);
119 button5.setEnabled(false);
120 }
121 });
122
123 button4.setOnClickListener(new OnClickListener() {
124 public void onClick(View arg0) {
125 np.clearFocus();
126 SharedPreferences prefs = getSharedPreferences("a", MODE_PRIVATE);
127 SharedPreferences.Editor editor = prefs.edit();
128 editor.putString("a", Integer.toString(90));
129 editor.commit();
130 if ( np.getValue() == 1)
131 Toast.makeText(getBaseContext(), "120 Minuten mit " + np.getValue() + "ner Minute Intervall sind gebucht", Toast.LENGTH_SHORT).show();
132 else if (np.getValue() == 0)
133 Toast.makeText(getBaseContext(), "120 Minuten sind gebucht", Toast.LENGTH_SHORT).show();
134 else
135 Toast.makeText(getBaseContext(), "120 Minuten mit " + np.getValue() + " Minuten Intervall sind gebucht", Toast.LENGTH_SHORT).show();
136 alarm.SetAlarm(getApplicationContext(), np.getValue(), tp.getCurrentHour(), tp.getCurrentMinute());
137 button1.setEnabled(false);
138 button2.setEnabled(false);
139 button3.setEnabled(false);
140 button4.setEnabled(false);
141 button5.setEnabled(false);
142 }
143 });
144
145 button5.setOnClickListener(new OnClickListener() {
146 public void onClick(View arg0) {
147 np.clearFocus();
148 SharedPreferences prefs = getSharedPreferences("a", MODE_PRIVATE);
149 SharedPreferences.Editor editor = prefs.edit();
150 editor.putString("a", Integer.toString(120));
151 editor.commit();
152 if ( np.getValue() == 1)
153 Toast.makeText(getBaseContext(), "180 Minuten mit " + np.getValue() + "ner Minute Intervall sind gebucht", Toast.LENGTH_SHORT).show();
154 else if (np.getValue() == 0)
155 Toast.makeText(getBaseContext(), "180 Minuten sind gebucht", Toast.LENGTH_SHORT).show();
156 else
157 Toast.makeText(getBaseContext(), "180 Minuten mit " + np.getValue() + " Minuten Intervall sind gebucht", Toast.LENGTH_SHORT).show();
158 alarm.SetAlarm(getApplicationContext(), np.getValue(), tp.getCurrentHour(), tp.getCurrentMinute());
159 button1.setEnabled(false);
160 button2.setEnabled(false);
161 button3.setEnabled(false);
162 button4.setEnabled(false);
163 button5.setEnabled(false);
164 }
165 });
166 }
167
168 @Override
169 protected void onStart() {
170 super.onStart();
171 }
172
173 public void startRepeatingTimer(View view) {
174 Context context = this.getApplicationContext();
175 if(alarm != null){
176 alarm.CancelAlarm(context);
177 button1.setEnabled(true);
178 button2.setEnabled(true);
179 button3.setEnabled(true);
180 button4.setEnabled(true);
181 button5.setEnabled(true);
182 Toast.makeText(context, "Wiederholung wurde gestoppt!", Toast.LENGTH_SHORT).show();
183 }else{
184 Toast.makeText(context, "Alarm is null", Toast.LENGTH_SHORT).show();
185 }
186 }
187/*
188 public void cancelRepeatingTimer(View view){
189 Context context = this.getApplicationContext();
190 if(alarm != null){
191 alarm.CancelAlarm(context);
192 }else{
193 Toast.makeText(context, "Alarm is null", Toast.LENGTH_SHORT).show();
194 }
195 }
196 */
197/*
198 public void onetimeTimer(View view){
199 Context context = this.getApplicationContext();
200 if(alarm != null){
201 alarm.setOnetimeTimer(context);
202 }else{
203 Toast.makeText(context, "Alarm is null", Toast.LENGTH_SHORT).show();
204 }
205 }
206*/
207 @Override
208 public boolean onCreateOptionsMenu(Menu menu){
209 super.onCreateOptionsMenu(menu);
210 MenuInflater inflater = getMenuInflater();
211 inflater.inflate(R.menu.activity_main_actions, menu);
212 return super.onCreateOptionsMenu(menu);
213 }
214
215 @Override
216 public boolean onOptionsItemSelected(MenuItem item){
217 switch (item.getItemId())
218 {
219 case R.id.osm:
220 Toast.makeText(AlarmManagerActivity.this, "OpenStreetMap fuer Parkzonen wird geoeffnet; bitte Internetverbindung einschalten", Toast.LENGTH_LONG).show();
221 Intent myIntent = new Intent(AlarmManagerActivity.this, WebViewActivity.class);
222 startActivity(myIntent);
223 return true;
224 case R.id.parkguthaben:
225 Toast.makeText(AlarmManagerActivity.this, "Parkguthaben wird geoeffnet", Toast.LENGTH_LONG).show();
226 Intent myIntent1 = new Intent(AlarmManagerActivity.this, Parkkonto.class);
227 startActivity(myIntent1);
228 return true;
229 default:
230 return super.onOptionsItemSelected(item);
231 }
232 }
233}

BroadcastReceiver

1package at.parken.parken;
2
3import java.util.Calendar;
4import android.app.AlarmManager;
5import android.app.PendingIntent;
6import android.content.BroadcastReceiver;
7import android.content.Context;
8import android.content.Intent;
9import android.content.SharedPreferences;
10import android.content.SharedPreferences.Editor;
11import android.os.PowerManager;
12import android.telephony.SmsManager;
13import android.widget.Toast;
14
15public class AlarmManagerBroadcastReceiver extends BroadcastReceiver {
16
17 final public String ONE_TIME = "onetime";
18 final public String SECOND_TIME = "secondtime";
19 final public String SECOND = "second";
20 SharedPreferences sp, sp1, kennzeichen, telefonnummer;
21 Editor e;
22 int counter = 0;
23
24 @Override
25 public void onReceive(Context context, Intent intent) {
26 PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
27 PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "YOUR TAG");
28 //Acquire the lock
29 wl.acquire();
30
31 /* zeitbuchung */
32 sp = context.getSharedPreferences("a", 0);
33 String value = sp.getString("a", "");
34
35 sp1 = context.getSharedPreferences("b", 0);
36 String value1 = sp.getString("b", "");
37
38 /* kenzeichen */
39 kennzeichen = context.getSharedPreferences("kennzeichen", 1);
40 String valueKennzeichen = kennzeichen.getString("kennzeichen", "");
41
42 /* Telefonnummer */
43 telefonnummer = context.getSharedPreferences("handyparken", 1);
44
45 String valueTelefonnummer = telefonnummer.getString("handyparken", "");
46 SmsManager smsManager = SmsManager.getDefault();
47 //smsManager.sendTextMessage(valueTelefonnummer, null, value1 + " Wien*" + valueKennzeichen, null, null);
48 smsManager.sendTextMessage("xxx", null, value + value1, null, null);
49 //Release the lock
50 wl.release();
51 }
52 public void SetAlarm(Context context, long timer, int hour, int minute){
53 if(timer != 0){//set repeating timer
54 AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
55 Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
56 intent.putExtra(ONE_TIME, Boolean.FALSE);
57 intent.setAction("SetAlarm");
58 PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
59 //when to start
60 Calendar timeOff9 = Calendar.getInstance();
61 timeOff9.set(Calendar.HOUR_OF_DAY, hour);
62 timeOff9.set(Calendar.MINUTE, minute);
63 //when to start
64 am.setRepeating(AlarmManager.RTC_WAKEUP, timeOff9.getTimeInMillis(), 1*6000, pi);
65 }else{//one timer
66 Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
67 intent.putExtra(ONE_TIME, Boolean.FALSE);
68 intent.setAction("SetAlarm");
69 AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
70 PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
71 am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), pi);
72 }
73 }
74 public void SetAlarm1(Context context, long timer, int hour, int minute){
75 if(timer != 0){//set repeating timer
76 AlarmManager am1=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
77 Intent intent1 = new Intent(context, AlarmManagerBroadcastReceiver.class);
78 intent1.putExtra(SECOND_TIME, Boolean.FALSE);
79 intent1.setAction("SetAlarm1");
80 PendingIntent pi1 = PendingIntent.getBroadcast(context, 1, intent1, 0);
81 //when to start
82 Calendar timeOff9 = Calendar.getInstance();
83 timeOff9.set(Calendar.HOUR_OF_DAY, hour);
84 timeOff9.set(Calendar.MINUTE, minute);
85 //when to start
86 am1.setRepeating(AlarmManager.RTC_WAKEUP, timeOff9.getTimeInMillis(), 2*6000, pi1);
87 }else{//one timer
88 Intent intent1 = new Intent(context, AlarmManagerBroadcastReceiver.class);
89 intent1.putExtra(SECOND_TIME, Boolean.FALSE);
90 intent1.setAction("SetAlarm1");
91 AlarmManager am1=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
92 PendingIntent pi1 = PendingIntent.getBroadcast(context, 1, intent1, 0);
93 am1.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), pi1);
94 }
95 }
96 public void CancelAlarm(Context context)
97 {
98 // first alarm
99 Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
100 intent.setAction("SetAlarm");
101 Toast.makeText(context, "Erster Alarm wird gestoppt", Toast.LENGTH_LONG).show();
102 PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
103 AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
104 alarmManager.cancel(sender);
105
106 // second alarm
107 Intent intent1 = new Intent(context, AlarmManagerBroadcastReceiver.class);
108 intent1.setAction("SetAlarm1");
109 Toast.makeText(context, "Zweiter Alarm wird gestoppt", Toast.LENGTH_LONG).show();
110 PendingIntent sender1 = PendingIntent.getBroadcast(context, 1, intent1, 0);
111 AlarmManager alarmManager1 = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
112 alarmManager1.cancel(sender1);
113 }
114}

Vll. hat ja jemand noch eine Idee.

Danke vielmals!
  • Forum-Beiträge: 1.793

06.12.2013 23:23:47 via App

Du könntest das ganze bitte etwas übersichtlicher gestalten! Z.B., wo ist der Unterschied zwischen setAlarm und setAlarm1? Funktionen bitte immer kleinGroß schreiben (setAlarm statt SetAlarm), ebenso Variabeln.
Dann nicht eine Funktion in zwei Teile durch ein if spalten, die bis auf eine Zeile das selbe tun!

Dann beschreibe bitte nocheinmal dein Problem: Was soll passieren und was passiert? Du sagst was von überschreiben, dann soll was gecancelt werden, ich steige irgendwie nicht mehr durch.

Gibt es Fehler im Log?

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

  • Forum-Beiträge: 1.525

06.12.2013 23:56:46 via Website

Da kann ich @impjor nur recht geben.

Ich steige da auch nicht mehr durch.
Bisschen sauberer und übersichtlicher wäre gut.

Ein beispiel:
Von dir:
1if(counter == 2){
2 button1.setEnabled(false);
3 button2.setEnabled(false);
4 button3.setEnabled(false);
5 button4.setEnabled(false);
6 button5.setEnabled(false);
7}

Wie ich es machen würde um es übersichtlicher zu behalten:
1if(counter == 2) {
2
3 button1.setEnabled(false);
4 button2.setEnabled(false);
5 button3.setEnabled(false);
6 button4.setEnabled(false);
7 button5.setEnabled(false);
8
9}


LG

— geändert am 06.12.2013 23:57:59

  • Forum-Beiträge: 98

06.12.2013 23:59:54 via Website

Hallo,
bis jetzt war es immer so, dass man genau einen Alarm starten und diesen auch stoppen konnte, das funktionierte auch wunderbar.

Jetzt wollte ich das Ganze so kombinieren, dass man zB: um 09:02 einen Alarm starten kann ( manuell ), der alle 17 Minuten automatisch getriggert wird.
Um 09:17 sollte man einen 2ten Alarm starten können ( manuell ), der sich dann alle 45 Minuten wiederholt.

Der Grund warum ich 2 Methoden habe, die SetAlarm und SetAlarm1 heissen liegt darin, dass das Ganze mit 2 AlarmManager bis jetzt nicht funktioniert hat und ich dachte mir ich teile beides einmal auf und teste weiter.
Jetzt, wenn ich mir den Code natürlich nochmals genauer anschaue, sehe ich auch, dass ich einfach in der SetAlarm - Methode eine if - Abfrage einbauen hätte können und dort die Abfrage auf timer machen hätte können.

Im Moment ist es also so, dass bei den verschiedenen Versuchen sich entweder beide AlarmManager nicht mehr stoppen liessen oder wie im letzten Fall der 2te getriggerte AlarmManager den Ersten überschreibt ( es wird nur mehr der 2te getriggert! ).

Im Moment weiss ich einfach nicht mehr weiter, wie ich einfach 2 AlarmManager zum Laufen bekomme, die zu einem unterschiedlichen Zeitpunkt gestartet werden und wo abhängig der beiden AlarmManager eine unterschiedliche Nachricht verschickt wird, sowie, dass sich beide AlarmManager gleichzeitig stoppen lassen!

Ich hoffe, ich konnte das Problem besser beschreiben jetzt!

Danke Die vielmals schon für Deine Hilfe!
  • Forum-Beiträge: 98

07.12.2013 00:33:42 via Website

Hallo,
so, habe den Code nochmals ein wenig aufgeräumt ( Gross, Kleinschreibung im Moment noch nicht, mache ich aber noch, versprochen! ).
Habe die beiden Methoden SetAlarm und SetAlarm1 wieder zu einer zusamengeführt und einen weiteren Parameter übergeben, woran man nun unterscheiden kann, ob es 15 Minuten oder 30 Minuten sein soll!

Bei der MainActivity habe ich die SharedPreferences entfernen können, weil ich die Werte 15, 30, 60, etc als Parameter nun an SetAlarm übergebe.

Bei dieser Version habe ich nun das Problem, dass sich beide AlarmManager nicht mehr stoppen lassen!

Vielen Dank für Eurer beiden Hilfe!

MainActivity:

1package at.parken.parken;
2
3import android.os.Bundle;
4import android.app.Activity;
5import android.content.Context;
6import android.content.Intent;
7import android.view.Menu;
8import android.view.MenuInflater;
9import android.view.MenuItem;
10import android.view.View;
11import android.view.View.OnClickListener;
12import android.widget.Button;
13import android.widget.NumberPicker;
14import android.widget.TimePicker;
15import android.widget.Toast;
16import at.parken.parken.R;
17
18public class AlarmManagerActivity extends Activity {
19
20 private AlarmManagerBroadcastReceiver alarm;
21 Button button1, button2, button3, button4, button5;
22 NumberPicker np;
23 TimePicker tp;
24 int hour, minute;
25 int counter;
26
27 @Override
28 public void onCreate(Bundle savedInstanceState) {
29 super.onCreate(savedInstanceState);
30 setContentView(R.layout.activity_alarm_manager);
31 alarm = new AlarmManagerBroadcastReceiver();
32 tp = new TimePicker(getBaseContext());
33 addListenerOnButton();
34 tp = (TimePicker)findViewById(R.id.timePicker1);
35 tp.clearFocus();
36 np = (NumberPicker) findViewById(R.id.numberPicker1);
37 np.setMinValue(0);
38 np.setMaxValue(1440);
39 np.setWrapSelectorWheel(true);
40 np.setValue(1);
41 }
42
43 public void addListenerOnButton() {
44 button1 = (Button) findViewById(R.id.button1);
45 button2 = (Button) findViewById(R.id.button2);
46 button3 = (Button) findViewById(R.id.button3);
47 button4 = (Button) findViewById(R.id.button4);
48 button5 = (Button) findViewById(R.id.button5);
49
50 button1.setOnClickListener(new OnClickListener() {
51 public void onClick(View arg0) {
52 np.clearFocus();
53 if ( np.getValue() == 1)
54 Toast.makeText(getBaseContext(), "15 Minuten mit " + np.getValue() + "ner Minute Intervall sind gebucht", Toast.LENGTH_SHORT).show();
55 else if (np.getValue() == 0)
56 Toast.makeText(getBaseContext(), "15 Minuten sind gebucht", Toast.LENGTH_SHORT).show();
57 else
58 Toast.makeText(getBaseContext(), "15 Minuten mit " + np.getValue() + " Minuten Intervall sind gebucht", Toast.LENGTH_SHORT).show();
59 alarm.SetAlarm(getApplicationContext(), "15", np.getValue(), tp.getCurrentHour(), tp.getCurrentMinute());
60 counter+=1;
61 if(counter == 2){
62 button1.setEnabled(false);
63 button2.setEnabled(false);
64 button3.setEnabled(false);
65 button4.setEnabled(false);
66 button5.setEnabled(false);
67 }
68 }
69 });
70
71 button2.setOnClickListener(new OnClickListener() {
72 public void onClick(View arg0) {
73 np.clearFocus();
74 if ( np.getValue() == 1)
75 Toast.makeText(getBaseContext(), "30 Minuten mit " + np.getValue() + "ner Minute Intervall sind gebucht", Toast.LENGTH_SHORT).show();
76 else if (np.getValue() == 0)
77 Toast.makeText(getBaseContext(), "30 Minuten sind gebucht", Toast.LENGTH_SHORT).show();
78 else
79 Toast.makeText(getBaseContext(), "30 Minuten mit " + np.getValue() + " Minuten Intervall sind gebucht", Toast.LENGTH_SHORT).show();
80 alarm.SetAlarm(getApplicationContext(), "30", np.getValue(), tp.getCurrentHour(), tp.getCurrentMinute());
81 counter+=1;
82 if(counter == 2){
83 button1.setEnabled(false);
84 button2.setEnabled(false);
85 button3.setEnabled(false);
86 button4.setEnabled(false);
87 button5.setEnabled(false);
88 }
89 }
90 });
91
92 button3.setOnClickListener(new OnClickListener() {
93 public void onClick(View arg0) {
94 np.clearFocus();
95 if ( np.getValue() == 1)
96 Toast.makeText(getBaseContext(), "60 Minuten mit " + np.getValue() + "ner Minute Intervall sind gebucht", Toast.LENGTH_SHORT).show();
97 else if (np.getValue() == 0)
98 Toast.makeText(getBaseContext(), "60 Minuten sind gebucht", Toast.LENGTH_SHORT).show();
99 else
100 Toast.makeText(getBaseContext(), "60 Minuten mit " + np.getValue() + " Minuten Intervall sind gebucht", Toast.LENGTH_SHORT).show();
101 alarm.SetAlarm(getApplicationContext(), "60", np.getValue(), tp.getCurrentHour(), tp.getCurrentMinute());
102 button1.setEnabled(false);
103 button2.setEnabled(false);
104 button3.setEnabled(false);
105 button4.setEnabled(false);
106 button5.setEnabled(false);
107 }
108 });
109
110 button4.setOnClickListener(new OnClickListener() {
111 public void onClick(View arg0) {
112 np.clearFocus();
113 if ( np.getValue() == 1)
114 Toast.makeText(getBaseContext(), "120 Minuten mit " + np.getValue() + "ner Minute Intervall sind gebucht", Toast.LENGTH_SHORT).show();
115 else if (np.getValue() == 0)
116 Toast.makeText(getBaseContext(), "120 Minuten sind gebucht", Toast.LENGTH_SHORT).show();
117 else
118 Toast.makeText(getBaseContext(), "120 Minuten mit " + np.getValue() + " Minuten Intervall sind gebucht", Toast.LENGTH_SHORT).show();
119 alarm.SetAlarm(getApplicationContext(), "120", np.getValue(), tp.getCurrentHour(), tp.getCurrentMinute());
120 button1.setEnabled(false);
121 button2.setEnabled(false);
122 button3.setEnabled(false);
123 button4.setEnabled(false);
124 button5.setEnabled(false);
125 }
126 });
127
128 button5.setOnClickListener(new OnClickListener() {
129 public void onClick(View arg0) {
130 np.clearFocus();
131 if ( np.getValue() == 1)
132 Toast.makeText(getBaseContext(), "180 Minuten mit " + np.getValue() + "ner Minute Intervall sind gebucht", Toast.LENGTH_SHORT).show();
133 else if (np.getValue() == 0)
134 Toast.makeText(getBaseContext(), "180 Minuten sind gebucht", Toast.LENGTH_SHORT).show();
135 else
136 Toast.makeText(getBaseContext(), "180 Minuten mit " + np.getValue() + " Minuten Intervall sind gebucht", Toast.LENGTH_SHORT).show();
137 alarm.SetAlarm(getApplicationContext(), "180", np.getValue(), tp.getCurrentHour(), tp.getCurrentMinute());
138 button1.setEnabled(false);
139 button2.setEnabled(false);
140 button3.setEnabled(false);
141 button4.setEnabled(false);
142 button5.setEnabled(false);
143 }
144 });
145 }
146
147 @Override
148 protected void onStart() {
149 super.onStart();
150 }
151
152 public void cancelRepeatingTimer(View view) {
153 Context context = this.getApplicationContext();
154 if(alarm != null){
155 alarm.CancelAlarm(context);
156 button1.setEnabled(true);
157 button2.setEnabled(true);
158 button3.setEnabled(true);
159 button4.setEnabled(true);
160 button5.setEnabled(true);
161 Toast.makeText(context, "Wiederholung wurde gestoppt!", Toast.LENGTH_SHORT).show();
162 }else{
163 Toast.makeText(context, "Alarm is null", Toast.LENGTH_SHORT).show();
164 }
165 }
166 @Override
167 public boolean onCreateOptionsMenu(Menu menu){
168 super.onCreateOptionsMenu(menu);
169 MenuInflater inflater = getMenuInflater();
170 inflater.inflate(R.menu.activity_main_actions, menu);
171 return super.onCreateOptionsMenu(menu);
172 }
173
174 @Override
175 public boolean onOptionsItemSelected(MenuItem item){
176 switch (item.getItemId())
177 {
178 case R.id.osm:
179 Toast.makeText(AlarmManagerActivity.this, "OpenStreetMap fuer Parkzonen wird geoeffnet; bitte Internetverbindung einschalten", Toast.LENGTH_LONG).show();
180 Intent myIntent = new Intent(AlarmManagerActivity.this, WebViewActivity.class);
181 startActivity(myIntent);
182 return true;
183 case R.id.parkguthaben:
184 Toast.makeText(AlarmManagerActivity.this, "Parkguthaben wird geoeffnet", Toast.LENGTH_LONG).show();
185 Intent myIntent1 = new Intent(AlarmManagerActivity.this, Parkkonto.class);
186 startActivity(myIntent1);
187 return true;
188 default:
189 return super.onOptionsItemSelected(item);
190 }
191 }
192}

BroadcastReceiver

1package at.parken.parken;
2
3import java.util.Calendar;
4import android.app.AlarmManager;
5import android.app.PendingIntent;
6import android.content.BroadcastReceiver;
7import android.content.Context;
8import android.content.Intent;
9import android.content.SharedPreferences;
10import android.content.SharedPreferences.Editor;
11import android.os.PowerManager;
12import android.telephony.SmsManager;
13import android.widget.Toast;
14
15public class AlarmManagerBroadcastReceiver extends BroadcastReceiver {
16
17 final public String ONE_TIME = "onetime";
18 final public String SECOND = "second";
19 SharedPreferences sp, kennzeichen, telefonnummer;
20 Editor e;
21 int counter = 0;
22 String eigeneTelefonnummer = "xxx";
23
24 @Override
25 public void onReceive(Context context, Intent intent) {
26 PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
27 PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "YOUR TAG");
28 //Acquire the lock
29 wl.acquire();
30
31 /* zeitbuchung */
32 sp = context.getSharedPreferences("a", 0);
33 String value = sp.getString("a", "");
34
35 /* kenzeichen */
36 kennzeichen = context.getSharedPreferences("kennzeichen", 1);
37 String valueKennzeichen = kennzeichen.getString("kennzeichen", "");
38
39 /* Telefonnummer */
40 telefonnummer = context.getSharedPreferences("handyparken", 1);
41 String valueTelefonnummer = telefonnummer.getString("handyparken", "");
42
43 SmsManager smsManager = SmsManager.getDefault();
44
45 if(valueTelefonnummer.length() == 0 || valueKennzeichen.length() == 0)
46 Toast.makeText(context, "Bitte speichern Sie Telefonnummer und Kennzeichen, siehe Menueeinstellungen in der Notificationbar!", Toast.LENGTH_LONG).show();
47 else {
48 if(intent.getAction().equals("15")){
49 smsManager.sendTextMessage(valueTelefonnummer, null, "15" + " Wien*" + valueKennzeichen, null, null);
50 } else if(intent.getAction().equals("30")){
51 smsManager.sendTextMessage(valueTelefonnummer, null, "30" + " Wien*" + valueKennzeichen, null, null);
52 }
53 }
54 //Release the lock
55 wl.release();
56 }
57 public void SetAlarm(Context context, String parkschein, long timer, int hour, int minute){
58 if(timer != 0 && parkschein == "15"){//set repeating timer
59 AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
60 Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
61 intent.setAction("15");
62 PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
63 //when to start
64 Calendar timeOff9 = Calendar.getInstance();
65 timeOff9.set(Calendar.HOUR_OF_DAY, hour);
66 timeOff9.set(Calendar.MINUTE, minute);
67 //when to start
68 am.setRepeating(AlarmManager.RTC_WAKEUP, timeOff9.getTimeInMillis(), 1*6000, pi);
69 }else if(timer != 0 && parkschein == "30"){
70 AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
71 Intent intent1 = new Intent(context, AlarmManagerBroadcastReceiver.class);
72 intent1.setAction("30");
73 PendingIntent pi1 = PendingIntent.getBroadcast(context, 1, intent1, 0);
74 //when to start
75 Calendar timeOff9 = Calendar.getInstance();
76 timeOff9.set(Calendar.HOUR_OF_DAY, hour);
77 timeOff9.set(Calendar.MINUTE, minute);
78 //when to start
79 am.setRepeating(AlarmManager.RTC_WAKEUP, timeOff9.getTimeInMillis(), 2*6000, pi1);
80 }else{//one timer
81 Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
82 AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
83 intent.setAction("nur ein test");
84 PendingIntent pi = PendingIntent.getBroadcast(context, 1, intent, 0);
85 am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), pi);
86 }
87 }
88 public void CancelAlarm(Context context)
89 {
90 Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
91 Intent intent1 = new Intent(context, AlarmManagerBroadcastReceiver.class);
92 PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
93 PendingIntent sender1 = PendingIntent.getBroadcast(context, 1, intent1, 0);
94 AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
95 try{
96 alarmManager.cancel(sender);
97 alarmManager.cancel(sender1);
98 } catch(Exception e) {
99 Toast.makeText(context, "Wiederholung konnte nicht gestoppt werden, bitte Telefon neu starten!", Toast.LENGTH_LONG).show();
100 }
101 }
102}

XML

1<?xml version="1.0" encoding="utf-8"?>
2<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="fill_parent"
4 android:layout_height="wrap_content" >
5
6<LinearLayout
7 android:layout_width="match_parent"
8 android:layout_height="match_parent"
9 android:gravity="center"
10 android:orientation="vertical" >
11
12 <TextView
13 android:id="@+id/textView1"
14 android:layout_width="match_parent"
15 android:layout_height="wrap_content"
16 android:text="Uhrzeit"
17 android:textAppearance="?android:attr/textAppearanceSmall" />
18
19 <TimePicker
20 android:id="@+id/timePicker1"
21 android:layout_width="match_parent"
22 android:layout_height="wrap_content" />
23
24 <TextView
25 android:id="@+id/textView3"
26 android:layout_width="wrap_content"
27 android:layout_height="wrap_content"
28 android:text="Intervall in Minuten"
29 android:textAppearance="?android:attr/textAppearanceSmall" />
30
31 <NumberPicker
32 android:id="@+id/numberPicker1"
33 android:layout_width="wrap_content"
34 android:layout_height="116dp" />
35
36 <TextView
37 android:id="@+id/textView2"
38 android:layout_width="match_parent"
39 android:layout_height="wrap_content"
40 android:text="Parkschein bestellen"
41 android:textAppearance="?android:attr/textAppearanceMedium" />
42
43 <RelativeLayout
44 android:layout_width="match_parent"
45 android:layout_height="wrap_content" >
46
47 <Button
48 android:id="@+id/button1"
49 android:layout_width="wrap_content"
50 android:layout_height="wrap_content"
51 android:layout_alignParentLeft="true"
52 android:layout_alignParentTop="true"
53 android:layout_marginLeft="16dp"
54 android:layout_marginTop="19dp"
55 android:text="15" />
56
57 <Button
58 android:id="@+id/button2"
59 android:layout_width="wrap_content"
60 android:layout_height="wrap_content"
61 android:layout_alignBottom="@+id/button1"
62 android:layout_centerHorizontal="true"
63 android:text="30" />
64
65 <Button
66 android:id="@+id/button3"
67 android:layout_width="wrap_content"
68 android:layout_height="wrap_content"
69 android:layout_alignBaseline="@+id/button2"
70 android:layout_alignBottom="@+id/button2"
71 android:layout_alignParentRight="true"
72 android:layout_marginRight="21dp"
73 android:text="60" />
74
75 <Button
76 android:id="@+id/button4"
77 android:layout_width="wrap_content"
78 android:layout_height="wrap_content"
79 android:layout_alignLeft="@+id/button1"
80 android:layout_below="@+id/button1"
81 android:text="90" />
82
83 <Button
84 android:id="@+id/button5"
85 android:layout_width="wrap_content"
86 android:layout_height="wrap_content"
87 android:layout_alignBottom="@+id/button4"
88 android:layout_alignLeft="@+id/button2"
89 android:text="120" />
90
91 </RelativeLayout>
92
93 <Button
94 android:id="@+id/btCancel"
95 android:layout_width="match_parent"
96 android:layout_height="wrap_content"
97 android:onClick="cancelRepeatingTimer"
98 android:padding="@dimen/padding_medium"
99 android:text="@string/btCancel"/>
100 <!-- tools:context=".WidgetAlarmManagerActivity" -->
101</LinearLayout>
102</ScrollView>
  • Forum-Beiträge: 1.793

07.12.2013 09:31:39 via App

Das sieht schon besser aus!
Allerdings geht es noch kompakter, wenn du allen Buttons einen OnClickListener zuweist, der dann am Anfang prüft, ob view.getId() == R.id.deinButton1 ist. Dementsprechend wird dann eine Variable intervall gesetzt, die du dann im weiteren Verlauf benutzt.

Ich denke aber immernoch, dass es folgendes Problem sein könnte, oder hast du das schon mal probiert?

impjor
Kann es sein, dass du erst noch die Actions usw. zu deinem Intent hinzufügen musst, bevor du ihn cancelst?

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

  • Forum-Beiträge: 98

07.12.2013 13:15:18 via Website

Hallo,
danke dir für deinen input. Ich bin es leider von Java her gewohnt Button clicks so zu verwerten werde mich aber umstellen. Beim action hinzufügen für die intents weiss ich leider nicht mehr weiter, kannst du mir hierbei helfen?
  • Forum-Beiträge: 98

07.12.2013 21:15:52 via Website

Ich habe 2 Versuche unternommen,bin mir aber nicht sicher, ob du es so gemeint hast - im Moment stehe ich ja komplett an.

1ster Versuch:

1public void CancelAlarm(Context context)
2 {
3 Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
4 Intent intent1 = new Intent(context, AlarmManagerBroadcastReceiver.class);
5 if(intent.getAction().equals("15") && intent1.getAction().equals("30")){
6 PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
7 PendingIntent sender1 = PendingIntent.getBroadcast(context, 1, intent1, 0);
8 AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
9 try{
10 alarmManager.cancel(sender);
11 alarmManager.cancel(sender1);
12 } catch(Exception e) {
13 Toast.makeText(context, "Wiederholung konnte nicht gestoppt werden, bitte Telefon neu starten!", Toast.LENGTH_LONG).show();
14 }
15 }else{
16 Toast.makeText(context, "No itent machtes", Toast.LENGTH_SHORT).show();
17 }
18 }

2ter Versuch:

1public void CancelAlarm(Context context)
2 {
3 Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
4 Intent intent1 = new Intent(context, AlarmManagerBroadcastReceiver.class);
5 if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED) && intent1.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
6 PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
7 PendingIntent sender1 = PendingIntent.getBroadcast(context, 1, intent1, 0);
8 AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
9 try{
10 alarmManager.cancel(sender);
11 alarmManager.cancel(sender1);
12 } catch(Exception e) {
13 Toast.makeText(context, "Wiederholung konnte nicht gestoppt werden, bitte Telefon neu starten!", Toast.LENGTH_LONG).show();
14 }
15 }else{
16 Toast.makeText(context, "No itent machtes", Toast.LENGTH_SHORT).show();
17 }
18 }

Beide Male ist die App leider abgestürzt!
  • Forum-Beiträge: 1.793

07.12.2013 21:37:55 via App

Wenn die App abstürzt, immer LogCat posten!

Dein Code ist aber falsch: Du prüfst. if (intent.getAction()....), da du aber selber keine Action gesetzt hast, wird das nie zutreffen.
Du musst die Action setzetn bevor du cancelst, damit dein AlarmManager "weis" welcher Alarm gemeint ist.
Lösungsansatz: Lass die Actions überall weg und übergebe den Intervall (1t, 30, ...) stattdessen in einem Extra.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

  • Forum-Beiträge: 98

07.12.2013 22:01:26 via Website

Soll ich den Intervall bereits in der MainActivity Klasse mithilfe der extras übergeben. Sprich in den einzelnen Buttons Intent.putExtra etc schreiben?
  • Forum-Beiträge: 98

07.12.2013 23:01:29 via Website

Hallo,
ich hoffe, dass ich es soweit halbwegs richtig gemacht habe.
Ich kann beide AlarmManager stoppen, jedoch habe ich das Problem, dass immer nur die Nachricht mit dem Text "15" versendet wird.
Ich gehe einmal davon aus, dass ich in der onReceive - Methode die Intent.extras korrekt abfrage? ...
Ich weiss der Code ist noch nicht sauber genug, aber sobald es läuft räume ich den natürlich auf.

Wo denkst du könnte bei mir noch der Fehler liegen?

Danke Dir vielmals für Deine Hilfe bis jetzt!

1package at.parken.parken;
2
3public class AlarmManagerBroadcastReceiver extends BroadcastReceiver {
4
5 final public String ONE_TIME = "onetime";
6 final public String SECOND = "second";
7 SharedPreferences sp, kennzeichen, telefonnummer;
8 Editor e;
9 int counter = 0;
10 String eigeneTelefonnummer = "xxx";
11
12 @Override
13 public void onReceive(Context context, Intent intent) {
14 PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
15 PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "YOUR TAG");
16 //Acquire the lock
17 wl.acquire();
18
19 //Do the processing
20 Bundle extras = intent.getExtras();
21
22 /* zeitbuchung */
23 sp = context.getSharedPreferences("a", 0);
24 String value = sp.getString("a", "");
25
26 /* kenzeichen */
27 kennzeichen = context.getSharedPreferences("kennzeichen", 1);
28 String valueKennzeichen = kennzeichen.getString("kennzeichen", "");
29
30 /* Telefonnummer */
31 telefonnummer = context.getSharedPreferences("handyparken", 1);
32 String valueTelefonnummer = telefonnummer.getString("handyparken", "");
33
34 SmsManager smsManager = SmsManager.getDefault();
35
36 if(valueTelefonnummer.length() == 0 || valueKennzeichen.length() == 0)
37 Toast.makeText(context, "Bitte speichern Sie Telefonnummer und Kennzeichen, siehe Menueeinstellungen in der Notificationbar!", Toast.LENGTH_LONG).show();
38 else if (extras != null && extras.getBoolean("IsRepeat15", true)){
39 smsManager.sendTextMessage(valueTelefonnummer, null, "15" + " Wien*" + valueKennzeichen, null, null);
40 //smsManager.sendTextMessage(valueTelefonnummer, null, "30" + " Wien*" + valueKennzeichen, null, null);
41 }else if(extras != null && extras.getBoolean("IsRepeat30", true)){
42 smsManager.sendTextMessage(valueTelefonnummer, null, "30" + " Wien*" + valueKennzeichen, null, null);
43 }
44 //Release the lock
45 wl.release();
46 }
47 public void SetAlarm(Context context, String parkschein, long timer, int hour, int minute){
48 if(timer != 0 && parkschein == "15"){//set repeating timer
49 AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
50 Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
51 Bundle extras = new Bundle();
52 extras.putBoolean("IsRepeat15", true);
53 intent.putExtras(extras);
54 intent.setAction("RepeatAction");
55 PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
56 //when to start
57 Calendar timeOff9 = Calendar.getInstance();
58 timeOff9.set(Calendar.HOUR_OF_DAY, hour);
59 timeOff9.set(Calendar.MINUTE, minute);
60 //when to start
61 am.setRepeating(AlarmManager.RTC_WAKEUP, timeOff9.getTimeInMillis(), 1*6000, pi);
62 }else if(timer != 0 && parkschein == "30"){
63 AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
64 Intent intent1 = new Intent(context, AlarmManagerBroadcastReceiver.class);
65 Bundle extras = new Bundle();
66 extras.putBoolean("IsRepeat30", true);
67 intent1.putExtras(extras);
68 intent1.setAction("RepeatAction");
69 PendingIntent pi1 = PendingIntent.getBroadcast(context, 1, intent1, 0);
70 //when to start
71 Calendar timeOff9 = Calendar.getInstance();
72 timeOff9.set(Calendar.HOUR_OF_DAY, hour);
73 timeOff9.set(Calendar.MINUTE, minute);
74 //when to start
75 am.setRepeating(AlarmManager.RTC_WAKEUP, timeOff9.getTimeInMillis(), 2*6000, pi1);
76 }else{//one timer
77 Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
78 AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
79 Bundle extras = new Bundle();
80 extras.putBoolean("IsRepeat", true);
81 intent.putExtras(extras);
82 intent.setAction("RepeatAction");
83 PendingIntent pi = PendingIntent.getBroadcast(context, 1, intent, 0);
84 am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), pi);
85 }
86 }
87 public void CancelAlarm(Context context)
88 {
89 Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
90 Bundle extras = new Bundle();
91 extras.putBoolean("IsRepeat15", true);
92 intent.putExtras(extras);
93 intent.setAction("RepeatAction");
94 PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
95 PendingIntent sender1 = PendingIntent.getBroadcast(context, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
96 AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
97 sender.cancel();
98 sender1.cancel();
99 alarmManager.cancel(sender);
100 alarmManager.cancel(sender1);
101 }
102}