BroadcastReceiver Service

  • Antworten:14
Johannes
  • Forum-Beiträge: 75

05.04.2012, 09:28:06 via Website

Hy, ich hab zwei classen: MyActivity(ruft die Klasse SMSReceiver auf) und SMSReceiver, wie der Name schon verät vearbeite ich hereinkommende SMS´s, da ich aber so bald ich auf Stand-By gehe keine SMS mehr vearbeiten kann möchte ich jetzt das ganze als Service laufen lassen, ich hab mir zwar schon ein Tutorial ageschaut bin aber aus diesem nicht ganz schlüssig geworden! Was brauch ich dafür alles?

Ich denke mal:
-> Änderungen im Mainfest (Service definieren)
-> Änderunge in meiner MyActivity classe

lg

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

05.04.2012, 10:54:50 via App

Hm,
ich würde eher einen Broadcast Receiver benutzen um auf die SMS zu lauschen und der kann dann einen Service zu Verarbeitung starten.
Lg Ansgar

Antworten
Johannes
  • Forum-Beiträge: 75

05.04.2012, 11:21:30 via Website

Derzeit verwende ich dafür einen Brodcast Receiver, aber sobald das Handy in den Stand-By geht reagiert die App nicht mehr!

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

05.04.2012, 11:47:10 via App

Definierst du den IntentFilter des BroadcastReceiver im Manifest der App?
Lg Ansgar

Antworten
Johannes
  • Forum-Beiträge: 75

05.04.2012, 11:59:30 via Website

hier mein Mainfest wo ich den Receiver definiere:
1<?xml version="1.0" encoding="utf-8"?>
2<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 package="at.TEST"
4 android:versionCode="1"
5 android:versionName="1.0" >
6
7 <uses-sdk android:minSdkVersion="8" />
8<uses-permission android:name="android.permission.RECEIVE_SMS" />
9<uses-permission android:name="android.permission.INTERNET" />
10<uses-permission android:name="android.permission.SEND_SMS" />
11<uses-permission android:name = "android.telephony.SmsManager"/>
12
13 <application
14 android:icon="@drawable/icon"
15 android:label="@string/app_name" >
16 <activity
17 android:name=".TestAPPActivity"
18 android:label="@string/app_name" >
19 <intent-filter>
20 <action android:name="android.intent.action.MAIN" />
21
22 <category android:name="android.intent.category.LAUNCHER" />
23 </intent-filter>
24 </activity>
25 <receiver android:name = ".SMSReceiver">
26 <intent-filter>
27 <action android:name="android.provider.Telephony.SMS_RECEIVED" />
28 </intent-filter>
29 </receiver>
30
31 </application>
32
33</manifest>

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

05.04.2012, 12:03:27 via App

Und der wird nicht richtig aufgerufen?
Lg Ansgar

Antworten
Johannes
  • Forum-Beiträge: 75

05.04.2012, 12:07:42 via Website

Was meinst du mit der wird nicht richtig aufgerufen?

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

05.04.2012, 12:09:53 via App

Naja,
hast du mal eine Log Nachricht eingebaut, bzw. den Debugger benutzt um zu gucken, ob der Receiver aufgerufen wird?
Lg Ansgar

Antworten
Johannes
  • Forum-Beiträge: 75

05.04.2012, 12:13:05 via Website

Nein hab ich nicht eingebaut, aber die APP funktioniert schon soweit das der Receiver SMS bemerkt und Sie verarbeitet (onReceive()), und ich lass mir den aktuellen Staus der app mit Toast´s ausgeben, mein Problem ist nur mehr das ich das ganze jetzt als programm im Hintergrund laufen lassen möchte und dazu wahrscheinlich einen Service benötige?

Antworten
Johannes
  • Forum-Beiträge: 75

05.04.2012, 13:52:19 via Website

was muss ich in den remote Service dann rein soll ich mal meine ganzen klassen posten das man weiss wie das alles aussieht?

Antworten
Markus B.
  • Forum-Beiträge: 636

05.04.2012, 14:31:57 via Website

Johannes
was muss ich in den remote Service dann rein soll ich mal meine ganzen klassen posten das man weiss wie das alles aussieht?

Hi, das ist ein ziemlich gruseliger "Satz" ...
Nun zum eigentlichen Thema:
In den Server kommt die Logik zum Verarbeiten deiner SMS. Ich weiß nicht was du mit der verarbeiteten Daten machst aber prinzipiell kannst du die Logik einfach in den Service kopieren. Ich habe hier mal ein Beispiel für einen Service erstellt. Das werde ich heute Abend mal überarbeiten, da es leider etwas unschön ist. Du kannst dir dort aber schon mal anschauen wie ein Service prinzipiell funktionier.
Ich sage gleich schon mal das diese Thematik nicht ganz einfach ist und dich dort noch einlesen musst.

Gruß,
Markus

Antworten
Michael Haar
  • Forum-Beiträge: 55

06.04.2012, 19:35:49 via App

Ein Service wird erstmal auch nicht helfen. Du brauchst ein WakeLock. Die App ist sonst nur aktiv solange er im Broadcastreceivercode ist.

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

06.04.2012, 19:42:56 via Website

Michael Haar
Ein Service wird erstmal auch nicht helfen. Du brauchst ein WakeLock. Die App ist sonst nur aktiv solange er im Broadcastreceivercode ist.

Das ist aber hahnebüchener Unsinn den du da schreibst. Das würde ja beispielsweise bedeuten, dass Dein Smartphone keine SMS empfangen kann wenn es im Sleep mode ist.

WakeLocks werden für ganz andere Dinge eingesetzt.

lg Voss

Antworten
Michael Haar
  • Forum-Beiträge: 55

07.04.2012, 08:06:21 via App

Sms laufen sowieso ganz nebenher. Und der Sms-Receiver wird auch aufgerufen. Exakt das Problem hatte ich bei meiner MobileWebCam App. Das Bearbeiten und Hochladen der Bilder im Service fand nicht statt nachdem die App per Sms "aufgeweckt" wurde da nur die Broadcastreceivermethode läuft und nicht der neue Thread solange das Telefon "aus" ist. Steht auch irgendwo in der Doku sonst hätte ich nie rausgefunden warum mein weiterer Code abbricht sobald die Cpu wieder schläft. WakeLock hilft dann dass auch der Service zu Ende läuft bzw. überhaupt startet bis manuell wieder schlafen erlaubt wird. Und wenn man gar eine Activity starten will muss auch geunlockt werden solange sie laufen soll.

— geändert am 07.04.2012, 08:51:32

Antworten