gpt4 book ai didi

android - 捕捉发送的短信 (Android 2.2)

转载 作者:行者123 更新时间:2023-11-29 22:14:09 25 4
gpt4 key购买 nike

我知道这里有一些与此相关的问题,但没有一个问题帮助我完成这项工作——捕获正在发送的短信。我在三星手机上使用 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"/>

我错过了什么?

最佳答案

幸运的是,我设法解决了这个问题,但是使用了完全不同的方法。也许这会在将来帮助某人..

我没有使用 ContentObserver(我仍然不知道为什么它不起作用),而是创建了新的 Thread 并在我的服务创建并启动后启动它。所以它看起来像这样:

...

final Uri CONTENT_URI = Uri.parse("content://sms/sent");

...

public void onStart(Intent intent, int startid) {
Go();
}
private void Go(){

new Thread(new Runnable() {
public void run() {

try {

while(true){

Cursor cursor = getContentResolver().query(CONTENT_URI, null, null, null, null);

if(cursor.moveToFirst()){

text = cursor.getString(cursor.getColumnIndexOrThrow("body")).toString();


if(!text.equalsIgnoreCase(actual)){
previous = text;
//do what you need..


}

}

Thread.sleep(60000);
}

} catch (InterruptedException e) {

e.printStackTrace();
}
}
}).start();

它工作绝对稳定,甚至比使用 ContentObserver 还要好,考虑到很多人都遇到过问题,比如 this和其他一些..

关于android - 捕捉发送的短信 (Android 2.2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8881173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com