SMS auslesen und vearbeiten, Fehler

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

02.04.2012, 00:48:29 via Website

Hy, ich bin gerade dabei bzw. versuche die SMS von meinem Handy auszulesen wenn Sie neu angkommen

Ich hab mir jetzt folgenden Code zusammen geschrieben aber da funktioniert noch etwas nicht,

[code]
package at.smsRead;


import android.os.Bundle;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

import android.telephony.SmsMessage;


public abstract class SMSReadActivity extends BroadcastReceiver
{



public String message ="";
public String phonenumber ="066441875***";
public String adress="";
public void onReceive(Context context, Intent intent)
{


Bundle bundle = intent.getExtras();

if (bundle != null) {
Object[] pdusObj = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdusObj.length];

.
for (int i = 0; i < pdusObj.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
}

for (SmsMessage currentMessage : messages)
{
if (phonenumber == currentMessage.getDisplayOriginatingAddress() ) // number of Sender
{
message = currentMessage.getDisplayMessageBody(); // Text Message
this.getAdress();

}

}
}

}
public void getAdress() // Spliten
{

String hilfs1 ="";
hilfs1.split(message,':');
final Pattern searchRex = Pattern.compile("(^a-zA-ZßöÖäÄüÜ-)+(\\s).(0-9){1,3}(A-Za-z)." );
Matcher findPairs = searchRex.matcher(hilfs1);
if ( findPairs.find())
{
adress = findPairs.group(1) + findPairs.group(2) + findPairs.group(3)+ findPairs.group(4);
}

}
public void sendToServer
{
// Adresse an Server schicken
}
}
[/code]

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

Ich bekomme von einer bestimmten Nummer eine SMS aus welcher ich ein Adresse auslesen will um diese weiter zu vearbeiten.
SMS aufbau : Einsatz für FF ***: Straße 66a B21 Mittelbrand................
Aus dieser SMS versuche ich mir die Straße raus zubekommen

Lg Johannes

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

02.04.2012, 08:44:28 via Website

Ich glaub ich hab Dir schonmal den Tipp gegeben, dass "da funktioniert noch irgendwo irgendwas nicht" keine Aussage ist, anhand derer wir dir hier weiterhelfen können. :)
Eine genaue Fehlerbeschreibung ist Grundvoraussetzung für eine Analyse.

Hier aber schonmal die erste Denksport Aufgabe :)

1String hilfs1 ="";
2hilfs1.split(message,':');

Was steht nach dieser Befehlsfolge in der Variable hilfs1 ?

Außerdem empfehle ich das hier zu lesen, um zu verstehen, warum der zweite Parameter ':' an der Stelle falsch ist.
http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#split%28java.lang.String,%20int%29

— geändert am 02.04.2012, 08:47:11

Antworten
Johannes
  • Forum-Beiträge: 75

02.04.2012, 09:03:14 via Website

Den Fehler hab ich auch schon gefunden hab ihn auf
1String hilfs1 [] = message.split(" \\:")
ausgetausch, aktuelle Activity classe sieht jetzt so aus:
[code]package at.smsRead;


import android.os.Bundle;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

import android.telephony.SmsMessage;


public abstract class SMSReadActivity extends BroadcastReceiver
{



public String message ="";
public String phonenumber ="********";
public String adress="";
public void onReceive(Context context, Intent intent)
{


Bundle bundle = intent.getExtras();

if (bundle != null) {
Object[] pdusObj = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdusObj.length];

// getting SMS information from Pdu.
for (int i = 0; i < pdusObj.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
}

for (SmsMessage currentMessage : messages)
{
if (phonenumber == currentMessage.getDisplayOriginatingAddress() ) // number of Sender
{
message = currentMessage.getDisplayMessageBody(); // Text Message
this.getAdress();

}

}
}

}
public void getAdress() // Spliten
{

String hilfs1 [] = message.split("\\:");

final Pattern searchRex = Pattern.compile("(^A-Za-zßöÖäÄüÜ-)+(\\s).(0-9){1,3}(A-Za-z)." );
Matcher findPairs = searchRex.matcher(hilfs1[1]);
if ( findPairs.find())
{
adress = findPairs.group(1) + findPairs.group(2) + findPairs.group(3)+ findPairs.group(4);
}
this.senToServer();
}
public void senToServer()
{
// Http Conect zum senden verwenden
}
}
[/code]

Logcat:
[code]
04-02 07:02:39.243: D/dalvikvm(200): newInstance failed: p0 i0 [0 a1
04-02 07:02:39.253: D/AndroidRuntime(200): Shutting down VM
04-02 07:02:39.253: W/dalvikvm(200): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
04-02 07:02:39.253: E/AndroidRuntime(200): Uncaught handler: thread main exiting due to uncaught exception
04-02 07:02:39.283: E/AndroidRuntime(200): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{at.smsRead/at.smsRead.SMSReadActivity}: java.lang.InstantiationException: at.smsRead.SMSReadActivity
04-02 07:02:39.283: E/AndroidRuntime(200): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
04-02 07:02:39.283: E/AndroidRuntime(200): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
04-02 07:02:39.283: E/AndroidRuntime(200): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
04-02 07:02:39.283: E/AndroidRuntime(200): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
04-02 07:02:39.283: E/AndroidRuntime(200): at android.os.Handler.dispatchMessage(Handler.java:99)
04-02 07:02:39.283: E/AndroidRuntime(200): at android.os.Looper.loop(Looper.java:123)
04-02 07:02:39.283: E/AndroidRuntime(200): at android.app.ActivityThread.main(ActivityThread.java:4363)
04-02 07:02:39.283: E/AndroidRuntime(200): at java.lang.reflect.Method.invokeNative(Native Method)
04-02 07:02:39.283: E/AndroidRuntime(200): at java.lang.reflect.Method.invoke(Method.java:521)
04-02 07:02:39.283: E/AndroidRuntime(200): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
04-02 07:02:39.283: E/AndroidRuntime(200): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
04-02 07:02:39.283: E/AndroidRuntime(200): at dalvik.system.NativeStart.main(Native Method)
04-02 07:02:39.283: E/AndroidRuntime(200): Caused by: java.lang.InstantiationException: at.smsRead.SMSReadActivity
04-02 07:02:39.283: E/AndroidRuntime(200): at java.lang.Class.newInstanceImpl(Native Method)
04-02 07:02:39.283: E/AndroidRuntime(200): at java.lang.Class.newInstance(Class.java:1479)
04-02 07:02:39.283: E/AndroidRuntime(200): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
04-02 07:02:39.283: E/AndroidRuntime(200): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409)
04-02 07:02:39.283: E/AndroidRuntime(200): ... 11 more
04-02 07:02:39.333: I/dalvikvm(200): threadid=7: reacting to signal 3
04-02 07:02:39.333: E/dalvikvm(200): Unable to open stack trace file '/data/anr/traces.txt': Permission denied

[/code]
das ist mein Logcat ich sehe das ich Fehler hab aber bestimmen kann ich ihn nicht genau

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

02.04.2012, 09:09:43 via Website

Noch 2 Tipps

1Unable to instantiate activity ComponentInfo{at.smsRead/at.smsRead.SMSReadActivity}: java.lang.InstantiationException: at.smsRead.SMSReadActivity

1public abstract class SMSReadActivity extends BroadcastReceiver

— geändert am 02.04.2012, 09:13:30

Antworten
Johannes
  • Forum-Beiträge: 75

02.04.2012, 09:20:46 via Website

Hab jetzt den BrodcastReceiver entfernt und gegen Activity erstetzt, abstürzen tut die App trotzdem noch immer, brauch ich den Brodcast Receiver nicht?
lg

Antworten
Johannes
  • Forum-Beiträge: 75

02.04.2012, 09:36:18 via Website

Ja mein Logcat ist jetzt folgendes:

[code]04-02 07:33:24.165: D/dalvikvm(220): newInstance failed: p0 i0 [0 a1
04-02 07:33:24.215: D/AndroidRuntime(220): Shutting down VM
04-02 07:33:24.225: W/dalvikvm(220): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
04-02 07:33:24.225: E/AndroidRuntime(220): Uncaught handler: thread main exiting due to uncaught exception
04-02 07:33:24.265: E/AndroidRuntime(220): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{at.smsRead/at.smsRead.SMSReadActivity}: java.lang.InstantiationException: at.smsRead.SMSReadActivity
04-02 07:33:24.265: E/AndroidRuntime(220): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
04-02 07:33:24.265: E/AndroidRuntime(220): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
04-02 07:33:24.265: E/AndroidRuntime(220): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
04-02 07:33:24.265: E/AndroidRuntime(220): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
04-02 07:33:24.265: E/AndroidRuntime(220): at android.os.Handler.dispatchMessage(Handler.java:99)
04-02 07:33:24.265: E/AndroidRuntime(220): at android.os.Looper.loop(Looper.java:123)
04-02 07:33:24.265: E/AndroidRuntime(220): at android.app.ActivityThread.main(ActivityThread.java:4363)
04-02 07:33:24.265: E/AndroidRuntime(220): at java.lang.reflect.Method.invokeNative(Native Method)
04-02 07:33:24.265: E/AndroidRuntime(220): at java.lang.reflect.Method.invoke(Method.java:521)
04-02 07:33:24.265: E/AndroidRuntime(220): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
04-02 07:33:24.265: E/AndroidRuntime(220): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
04-02 07:33:24.265: E/AndroidRuntime(220): at dalvik.system.NativeStart.main(Native Method)
04-02 07:33:24.265: E/AndroidRuntime(220): Caused by: java.lang.InstantiationException: at.smsRead.SMSReadActivity
04-02 07:33:24.265: E/AndroidRuntime(220): at java.lang.Class.newInstanceImpl(Native Method)
04-02 07:33:24.265: E/AndroidRuntime(220): at java.lang.Class.newInstance(Class.java:1479)
04-02 07:33:24.265: E/AndroidRuntime(220): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
04-02 07:33:24.265: E/AndroidRuntime(220): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409)
04-02 07:33:24.265: E/AndroidRuntime(220): ... 11 more
04-02 07:33:24.305: I/dalvikvm(220): threadid=7: reacting to signal 3
04-02 07:33:24.305: E/dalvikvm(220): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
[/code]

Die App soll ja später immer im Hintergrund laufen und auf eingehende SMS reagieren ( check ob von bestimmter nummer --> vearbeiten), was muss ich da dann genau hinzufügen, entfernen.
Dachte ich bräuchte den Receiver

Antworten