【发布时间】:2012-02-11 11:06:30
【问题描述】:
我知道这里有一些关于 SO 的问题与此相关,但没有一个问题能帮助我完成这项工作 - 捕获正在发送的 SMS。 我在三星手机上使用 Android 2.2 (FROYO)(如果这很重要的话)。
我在 Stackoverflow 上搜索了很多内容,并意识到我需要 ContentObserver 来满足我的要求。我使用的是 Service 而不是 Activity,所以我在 Service 类中注册了 ContentObserver,它看起来像这样:
public class SMSSending extends Service {
private class MyContentObserver extends ContentObserver {
public MyContentObserver() {
super(null);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Uri uriSMSURI = Uri.parse("content://sms/sent");
Cursor cur = getBaseContext().getContentResolver().query(uriSMSURI, null, null, null, null);
cur.moveToNext();
String content = cur.getString(cur.getColumnIndex("body"));
Toast.makeText(getApplicationContext(), "SOME TEXT", Toast.LENGTH_LONG).show();
}
@Override
public boolean deliverSelfNotifications() {
return false;
}
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
MyContentObserver contentObserver = new MyContentObserver();
ContentResolver contentResolver = getBaseContext().getContentResolver();
contentResolver.registerContentObserver(Uri.parse("content://sms/sent"),true, contentObserver);
Toast.makeText(getApplicationContext(), "SERVICE CREATED", Toast.LENGTH_LONG).show();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
@Override
public void onStart(Intent intent, int startid) {
Toast.makeText(getApplicationContext(), "SERVICE STARTED", Toast.LENGTH_LONG).show();
}
}
如您所见,我已将Toast 放在几个地方,因此我可以查看这是否有效 - 不幸的是,这些通知都没有出现。另外,我尝试为 LogCat 放置一些代码,但没有任何反应。
我还尝试使用Uri uriSMSURI = Uri.parse("content://sms"); 而不是content://sms/sent
但应用程序根本不做任何事情。
当然,我在 Manifest 中有权限:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.READ_CONTACTS"/>
我错过了什么?
【问题讨论】:
标签: android sms contentobserver