こんにちは、送信されたメッセージをキャッチすることをお勧めします。 、SMSが送信されたときにgetContentResolver()。query(...)でアプリケーションが停止しました
- カーソルCUR = getContentResolver()クエリ(uriSMS:すべては、私はSMSを送信しようとすると、ContentObserverは毎回呼ばれ、働いているが、のonChange(ブールselfChange)に方法は、アプリケーションがに落ちます。 NULL、NULL、NULL、NULL) ..............................画面TrackerServiceでhttp://imgur.com/a/hE94K
.java in mObserver。ステップオーバー(F8)を介してそれをデバッグしているときに、この行で私はLooper.javaを開き、この行にドロップしますhttp://imgur.com/a/uh4Dl ...どうすれば問題を解決できますか?私はあなたが私の問題を理解し、私の悪い英語のために申し訳なく思っています。どうもありがとうございます!
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
getContentResolver(上の同じパスを使用して、クエリ(uriSMS、NULL、NULL、NULL、NULL);。 java.lang.SecurityExceptionを返します。 – fauzt
SMSのアクセス許可は危険なアクセス権ですので、Marshmallow以上で実行している場合は実行時に要求し、 'targetSdkVersion'は23+です。 http://stackoverflow.com/questions/32635704/android-permission-doesnt-work-even-if-i-have-declared-itまた、「content:// sms/out /」は無効なURIです。それは 'outbox'ではなく' outbox'です。 –
ありがとう、@MikeM。私はtargetSdkVersionを19に変更して送信トレイに出しましたが、動作していますが、今はこのコマンドでエラーが発生しています。String smsText = cur.getString(cur.getColumnIndex( "body"));このhttp: /imgur.com/a/hIUK5 – fauzt