如何获得未接电话和短信计数

问题描述 投票:5回答:2

我想在我的应用程序中获得未接电话和未读消息的计数。并且当用户单击计数时,我想打开相关的应用程序。

现在最大的问题是如何获得计数?

我在线搜索,但找不到任何解决方案。

提前感谢。

android events sms counter
2个回答
22
投票

http://developer.android.com/reference/android/provider/CallLog.Calls.html

看看这个CallLog类。您所需要做的就是查询电话中是否有任何电话,然后提取未接电话(在查询电话时,在选择参数中执行此操作)。消息也是如此。 SMS存储在"content://sms/"

下的内容提供程序中

然后只获取查询返回的游标中的行数。 :)

我希望这会有所帮助。

对于未接来电:

String[] projection = {
    CallLog.Calls.CACHED_NAME,
    CallLog.Calls.CACHED_NUMBER_LABEL,
    CallLog.Calls.TYPE
};
String where = CallLog.Calls.TYPE + "=" + CallLog.Calls.MISSED_TYPE;          
Cursor c = this.getContentResolver().query(
    CallLog.Calls.CONTENT_URI,
    selection,
    where,
    null,
    null
);
c.moveToFirst();    
Log.d("CALL", ""+c.getCount()); //do some other operation
if (c.getCount() == SOME_VALUE_TO_START_APP_ONE) //...etc etc

在where子句中,设置数据选择条件。在我们的情况下,我们需要所有类型等于CallLog.Calls.MISSED_TYPE的东西。我们选择项目的呼叫者姓名和电话号码,当然您可以指定要查询的更多信息,例如手机,住宅,工作电话等号码类型。该表达式等效于SQL查询,类似于:SELECT CACHED_NAME, CACHED_NUMBER_LABEL, TYPE FROM CONTENT_URI WHERE TYPE=MISSED_TYPE

这需要将权限添加到清单中

<uses-permission android:name="android.permission.READ_LOGS"></uses-permission>

<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>

用于查询短信ContentProvider

Uri sms_content = Uri.parse("content://sms");
Cursor c = this.getContentResolver().query(sms_content, null,null, null, null);
c.moveToFirst();
Log.d("SMS COUNT", "" + c.getCount()); //do some other operation
// Here proceed with the what you wanted
if (c.getCount() == SOME_VALUE_TO_START_APP_ONE)//...etc etc

您可以在内容树中更深入,例如指定短信类型,例如:content://sms/sentcontent://sms/inbox,并为query()方法的第二个参数添加投影和选择,例如名称,人物,状态消息(例如“通话”示例)。

这需要许可:

<uses-permission android:name="android.permission.READ_SMS"></uses-permission>

0
投票

由于我没有足够的声誉来回答有关@Prasad的问题的评论,所以>

错误-> getContentResolver()对于new Runnable(){} {}

类型是未定义的

getContentResolver()是应用程序上下文的一部分,因此,如果您使用的是BroadcastReceiver,请在onReceive()函数中使用上下文,如下所示:>

    @Override
    public void onReceive(Context context, Intent intent) {

    context.getContentResolver()
}

如果您在活动中使用上面的代码,则可以使用

getApplicationContext().getContentResolver()

还请确保使用[Ctrl + Shift + O(O不为零)]组织导入

Key Shortcut for Eclipse Imports

我希望这会帮助您并帮助其他人,也希望这不会违反我们的社区规则。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.