gpt4 book ai didi

Android 短信收件箱未读计数问题

转载 作者:行者123 更新时间:2023-11-29 16:10:33 35 4
gpt4 key购买 nike

我创建了一个小的 Android 应用程序,可以对传入的 SMS 消息使用react。问题是我似乎无法可靠地获取收件箱中未读邮件的数量。

这里有一个最低限度的类来说明这个问题。有时它会打印“收到短信!未读计数:0”,有时会打印“收到短信!未读计数:1”。对我来说,如果每当程序流输入该命令时,未读计数总是至少为 1,那将显得更合乎逻辑。我一直在通过从一个模拟器向另一个模拟器发送 SMS 消息来对此进行测试(您可以通过将消息发送到模拟器号码——比如 5554 来做到这一点)。

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.util.Log;

public class SmsReceiver extends BroadcastReceiver {
private static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";

@Override
public void onReceive(Context context, Intent intent) {
Log.d("onReceive", "Got something: "+intent.getAction());
if (!SMS_RECEIVED_ACTION.equals(intent.getAction())) {
Log.d("onReceive", "Returning.");
return;
}
Log.d("onReceive", "Got SMS! Unread count: " + getNumberOfUnreadMessages(context));
// Do stuff
}

public int getNumberOfUnreadMessages(Context context) {
final Uri SMS_INBOX_URI = Uri.parse("content://sms/inbox");
Cursor inboxCursor = context.getContentResolver().query(SMS_INBOX_URI, null, "read = 0", null, null);
int unreadMessagesCount = inboxCursor.getCount();
inboxCursor.close();
return unreadMessagesCount;
}
}

最后,这是 AndroidManifest.xml 文件中的相关部分:

<receiver android:name=".SmsReceiver" >
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>

如何获得正确数量的未读消息?

编辑/添加:或者,如果是在保存 SMS 之前发送广播的情况,是否有办法订阅该应用程序以监听正在发送新 SMS 消息的事件保存到收件箱?

最佳答案

如果你想观察短信收件箱,使用像这样的 ContentObserver :

OnCreate() :

contentObserver observer = new contentObserver(handler);
getContentResolver().registerContentObserver(Uri.parse("content://sms/inbox"), true, observer);

创建一个新的内部类或外部类:

public class contentObserver extends ContentObserver {

public contentObserver(Handler handler) {
super(handler);
// you can use a handler if you want or directly do everythinh onChange();
}

@Override
public void onChange(boolean selfChange) {
// Do your stuff here
super.onChange(selfChange);
}
}

OnDestroy() :

getContentResolver().unregisterContentObserver(observer);

关于Android 短信收件箱未读计数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13777462/

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