Guten Tag, ich programmiere Anwendung über das Abfangen der gesendeten Nachrichten. Alles funktioniert, die ContentObserver wird jedes Mal aufgerufen, wenn ich versuche, eine SMS zu schicken, aber in onChange (boolean selfChange) Methode der Anwendung fällt auf die.App wird gestoppt auf getContentResolver(). Abfrage (...), wenn SMS gesendet wird
- Cursor cur = getContentResolver() Abfrage (uriSMS, null, null, null, null) .............................. Bildschirm http://imgur.com/a/hE94K
in TrackerService .java in mObserver. Wenn ich debbuging, dass über Step Over (F8), auf dieser Linie öffnen Sie mir ein Looper.java und fällt auf diese Linien http://imgur.com/a/uh4Dl ... Wie das für die Arbeit bitte reparieren? Ich hoffe, Sie werden mein Problem verstehen und mein schlechtes Englisch entschuldigen. Ich danke dir sehr!
MainActivity.java
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
public class MainActivity extends Activity {
Intent serviceIntent;
private static MyReceiver mServiceReceiver;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onPause() {
Log.i("Status","Pause");
unregisterReceiver(mServiceReceiver);
super.onPause();
}
@Override
protected void onResume() {
Log.i("Status","Resume");
serviceIntent = new Intent(MainActivity.this, TrackerService.class);
startService(serviceIntent);
mServiceReceiver = new MyReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(TrackerService.mAction);
registerReceiver(mServiceReceiver, intentFilter);
super.onResume();
}
private class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
Log.i("ServiceReceiver", "onReceive()");
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
TrackerService.java
import android.app.Service;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;
public class TrackerService extends Service
{
public static final String mAction = "SMSTracker";
ContentResolver content;
ContentResolver contentResolver;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("Status","Service Start");
contentResolver = this.getContentResolver();
contentResolver.registerContentObserver(Uri.parse("content://sms/"), true, new mObserver(new Handler()));
return super.onStartCommand(intent, flags, startId);
}
class mObserver extends ContentObserver {
public mObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.i("Status","onChange");
Uri uriSMS = Uri.parse("content://sms/out/");
Cursor cur = getContentResolver().query(uriSMS, null, null, null, null);
//Log.i("SMS", "Columns: " + cur.getColumnNames());
cur.moveToNext();
String smsText = cur.getString(cur.getColumnIndex("body"));
Log.i("SMS", "SMS Lenght: " + smsText.length());
}
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i("Status","Service Destroy");
}
@Override
public IBinder onBind(Intent intent) {
Log.i("Status","Service Bind");
return null;
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="wut.com.smstry">
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<uses-permission android:name="android.permission.READ_SMS"></uses-permission>
<application
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".TrackerService" />
</application>
</manifest>
getContentResolver() Abfrage (uriSMS, null, null, null, null);. returns java.lang.SecurityException – fauzt
Die SMS-Berechtigungen sind gefährliche Berechtigungen, also müssen Sie sie zur Laufzeit anfordern, wenn Sie auf Marshmallow oder höher mit einer 'targetSdkVersion' von 23+ laufen. http://stackoverflow.com/questions/32635704/android-permission-doesnt-work-even-if-i-have-declared-it Auch "content: // sms/out /" ist eine ungültige URI. Es ist "outbox", nicht "out". –
Vielen Dank @MikeM. Ich änderte eine targetSdkVersion auf 19 und out auf outbox und es funktioniert, aber jetzt bekomme ich eine Fehlermeldung über den Befehl smsText = cur.getString (cur.getColumnIndex ("body")) ;, Es gibt dieses http:/zurück /imgur.com/a/hIUK5 – fauzt