Im Endeffekt sag ich im Android Manifest das ein Broadcast receiver starten soll, wenn das system gebootet wurde. Dieser Broadcast receiver startet
einen Thread (SMS Versand)
So funktioniert auch alles Perfekt. Das komische ist, dass wenn das handy grad am aufladen ist, kann ich den bildschirm auschalten und es funktioniert immernoch, nur wenn ich ohne stromanschluss den bildschirm auschalte, funktioniert es nichtmehr.
Hier mal mein Quellcode. Ich dachte das es mit dem IntentFilter SCREEN_OFF funktioniert, aber das tut es nicht.
Manifest
1<receiver android:name="SmsReceiver" >
2 <intent-filter android:priority="100">
3 <action android:name="android.intent.action.BOOT_COMPLETED" />
4 <category android:name="android.intent.category.HOME" />
5 </intent-filter>
6
7 <intent-filter>
8 <action android:name="android.intent.action.SCREEN_ON"></action>
9 </intent-filter>
10
11 </receiver>
Broadcast Receiver
1package picoguard.view;
2
3import java.text.ParseException;
4import java.text.SimpleDateFormat;
5import java.util.Date;
6
7import picoguard.database.AnlagenTabelle;
8import picoguard.database.PicoguardDatenbank;
9import picoguard.database.UhrzeitTabelle;
10import android.content.BroadcastReceiver;
11import android.content.Context;
12import android.content.Intent;
13import android.database.Cursor;
14import android.telephony.SmsManager;
15import android.util.Log;
16/**
17 * Diese Klasse dient dazu den Picoguard Zeitplan zu implementieren.
18 * Der Picoguard Zeitplan ermöglicht es dem Benutzer gewissen Uhrzeiten
19 * und Wochentage einzustellen an denen seine Alarmanlagen entweder
20 * scharf oder unscharf geschalten werden soll. Diese Funktionalität
21 * wird durch diesen SmsReceiver bereitgestellt. Dieser schaltet sich
22 * automatisch nach anschalten des Mobiltelefons ein und überprüft
23 * jede Minute ob ein Termin "ansteht".
24 *
25 * @author stefanbaumgartner
26 *
27 */
28public class SmsReceiver extends BroadcastReceiver implements Runnable {
29
30 /*
31 * Spaltenamen der Zeitplan Tabelle.
32 */
33 private static final String[] SUCHE = new String[] {
34 UhrzeitTabelle.ID,
35 UhrzeitTabelle.UHRZEIT,
36 UhrzeitTabelle.MONTAG,
37 UhrzeitTabelle.DIENSTAG,
38 UhrzeitTabelle.MITTWOCH,
39 UhrzeitTabelle.DONNERSTAG,
40 UhrzeitTabelle.FREITAG,
41 UhrzeitTabelle.SAMSTAG,
42 UhrzeitTabelle.SONNTAG,
43 UhrzeitTabelle.ART,
44 UhrzeitTabelle.PICOGUARD
45 };
46 /*
47 * Spaltenamen der Picoguard Tabelle.
48 */
49 private static final String[] SUCHE_PICOGUARD = new String[] {
50 AnlagenTabelle.ID,
51 AnlagenTabelle.NAME,
52 AnlagenTabelle.VERTRAGSNUMMER,
53 AnlagenTabelle.RUFNUMMER,
54 AnlagenTabelle.PINSCHARF,
55 AnlagenTabelle.PINUNSCHARF,
56 };
57 //Datenbank
58 private volatile PicoguardDatenbank picoguardDatenbank;
59 /**
60 * Diese Methode wird nach anschalten des Handys aufgerufen.
61 *
62 * @param context
63 * @param intent
64 */
65 @Override
66 public void onReceive(Context context, Intent intent) {
67
68 try {
69 //Datenbank wird erstellt.
70 picoguardDatenbank = new PicoguardDatenbank(context);
71 //Thread wird gestart. Dieser lauscht auf anstehende Termine.
72 Thread t = new Thread(this);
73 t.start();
74 }
75 catch (Exception ex) {
76 Log.e("ALARM_RECEIVER", ex.toString());
77 }
78 }
79 /**
80 * Run Methode des Threads.
81 */
82 @Override
83 public void run() {
84
85 while(true) {
86 /*
87 * Mit diesen Cursor erhalten wir alle Datensätze der
88 * Zeitplan Tabelle.
89 */
90 Cursor smsCursor = picoguardDatenbank.getReadableDatabase().query(
91 UhrzeitTabelle.TABELLEN_NAME, SUCHE, null, null,
92 null, null, null);
93 /*
94 * Diese For schleife wird eingesetzt um durch alle
95 * Datensätze durchzuschalten.
96 */
97 for(int count = 1; count <= smsCursor.getCount(); count++) {
98 //Zeiger auf den nächsten Datensatz
99 smsCursor.moveToNext();
100 /*
101 * Werte für den aktuellen Datensatz werden aus der
102 * Datenbank geholt.
103 */
104 String uhrzeit = smsCursor.getString(1);
105 Boolean montag = Boolean.parseBoolean(smsCursor.getString(2));
106 Boolean dienstag = Boolean.parseBoolean(smsCursor.getString(3));
107 Boolean mittwoch = Boolean.parseBoolean(smsCursor.getString(4));
108 Boolean donnerstag = Boolean.parseBoolean(smsCursor.getString(5));
109 Boolean freitag = Boolean.parseBoolean(smsCursor.getString(6));
110 Boolean samstag = Boolean.parseBoolean(smsCursor.getString(7));
111 Boolean sonntag = Boolean.parseBoolean(smsCursor.getString(8));
112 String art = smsCursor.getString(9);
113 int picoguard = smsCursor.getInt(10);
114 /*
115 * Die Uhrzeit (aus der Datenbank) wird in das richtige
116 * Format übertragen. Also im Stunden-Minuten Format
117 */
118 SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
119 Date gespeicherteZeit = null;
120 try {
121 gespeicherteZeit = sdf.parse(uhrzeit);
122 }
123 catch (ParseException e) {
124 e.printStackTrace();
125 }
126 //Aktuelle Systemzeit.
127 Date aktuelleZeit = new Date();
128 /*
129 * Um Beide Zeiten (Systemzeit und Gespeicherte Zeit)
130 * vergleichen zu können, werden sie in Minuten umgerechnet.
131 */
132 int aktuellMinuten = aktuelleZeit.getHours() * 60 + aktuelleZeit.getMinutes();
133 int gespeichertMinuten = gespeicherteZeit.getHours() * 60 + gespeicherteZeit.getMinutes();
134 /*
135 * Wenn die Systemzeit gleich der gespeicherten Zeit ist.
136 */
137 if(aktuellMinuten == gespeichertMinuten) {
138 /*
139 * Von dem aktuellen Zeitplan datensatz wird der
140 * dazugehörige Picoguard Datensatz geholt.
141 */
142 Cursor picoguardCursor = picoguardDatenbank.getReadableDatabase().query(
143 AnlagenTabelle.TABELLEN_NAME, SUCHE_PICOGUARD,
144 "_id = ?", new String[] {String.valueOf(picoguard)}, null, null, null);
145
146 picoguardCursor.move(1);
147 //SmsManger zum versand von SMS
148 SmsManager smsManager = SmsManager.getDefault();
149
150 /*
151 * Abfrage ob der Tag stimmt. Wenn ja, dann soll
152 * die SMS gesendet werden.
153 */
154 if(montag == true && aktuelleZeit.getDay() == 1) {
155 if(art.equals("Scharf")) {
156 smsManager.sendTextMessage(picoguardCursor.getString(3), null,
157 picoguardCursor.getString(4), null, null);
158 }
159 else if(art.equals("Unscharf")) {
160 smsManager.sendTextMessage(picoguardCursor.getString(3), null,
161 picoguardCursor.getString(5), null, null);
162 }
163 }
164 else if(dienstag == true && aktuelleZeit.getDay() == 2) {
165 if(art.equals("Scharf")) {
166 smsManager.sendTextMessage(picoguardCursor.getString(3), null,
167 picoguardCursor.getString(4), null, null);
168 }
169 else if(art.equals("Unscharf")) {
170 smsManager.sendTextMessage(picoguardCursor.getString(3), null,
171 picoguardCursor.getString(5), null, null);
172 }
173 }
174 else if(mittwoch == true && aktuelleZeit.getDay() == 3) {
175 if(art.equals("Scharf")) {
176 smsManager.sendTextMessage(picoguardCursor.getString(3), null,
177 picoguardCursor.getString(4), null, null);
178 }
179 else if(art.equals("Unscharf")) {
180 smsManager.sendTextMessage(picoguardCursor.getString(3), null,
181 picoguardCursor.getString(5), null, null);
182 }
183 }
184 else if(donnerstag == true && aktuelleZeit.getDay() == 4) {
185 if(art.equals("Scharf")) {
186 smsManager.sendTextMessage(picoguardCursor.getString(3), null,
187 picoguardCursor.getString(4), null, null);
188 }
189 else if(art.equals("Unscharf")) {
190 smsManager.sendTextMessage(picoguardCursor.getString(3), null,
191 picoguardCursor.getString(5), null, null);
192 }
193 }
194 else if(freitag == true && aktuelleZeit.getDay() == 5) {
195 if(art.equals("Scharf")) {
196 smsManager.sendTextMessage(picoguardCursor.getString(3), null,
197 picoguardCursor.getString(4), null, null);
198 }
199 else if(art.equals("Unscharf")) {
200 smsManager.sendTextMessage(picoguardCursor.getString(3), null,
201 picoguardCursor.getString(5), null, null);
202 }
203 }
204 else if(samstag == true && aktuelleZeit.getDay() == 6) {
205 if(art.equals("Scharf")) {
206 smsManager.sendTextMessage(picoguardCursor.getString(3), null,
207 picoguardCursor.getString(4), null, null);
208 }
209 else if(art.equals("Unscharf")) {
210 smsManager.sendTextMessage(picoguardCursor.getString(3), null,
211 picoguardCursor.getString(5), null, null);
212 }
213 }
214 else if(sonntag == true && aktuelleZeit.getDay() == 0) {
215 if(art.equals("Scharf")) {
216 smsManager.sendTextMessage(picoguardCursor.getString(3), null,
217 picoguardCursor.getString(4), null, null);
218 }
219 else if(art.equals("Unscharf")) {
220 smsManager.sendTextMessage(picoguardCursor.getString(3), null,
221 picoguardCursor.getString(5), null, null);
222 }
223 }
224 }
225 }
226 /*
227 * Thread legt sich eine Minute "schlafen"
228 */
229 try {
230 Thread.sleep(60000);
231 }
232 catch (InterruptedException e) {
233 }
234 }
235 }
236}
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.