怎么得到错过的电话&短信计数

时间:2011-10-01 17:47:20

标签: android events sms counter

我想在我的应用程序中获取未接来电和未读消息的数量。当用户点击计数时,我想打开相关的应用程序。

现在最大的问题是如何计算?

我在网上搜索但找不到任何解决方案。

提前致谢。

2 个答案:

答案 0 :(得分:22)

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

看一下这个CallLog课程。您只需要在电话中查询任何呼叫,然后提取丢失的呼叫(在查询电话时,在选择参数中执行此操作)。这同样适用于消息。 SMS存储在"content://sms/"

下的内容提供商中

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

我希望这会有所帮助。

编辑:对于未接来电:

 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>

答案 1 :(得分:0)

由于我没有足够的声誉来回答关于

的@Prasad问题评论

错误 - &gt; getContentResolver()未定义类型new Runnable(){}

getContentResolver()是应用程序上下文的一部分,所以如果你在onReceive()函数中使用BroadcastReceiver使用上下文

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

    context.getContentResolver()
}

如果您在Activity中使用上面的代码,那么您可以使用

getApplicationContext().getContentResolver()

还要确保使用[Ctrl + Shift + O(O not zero)]来组织导入

Key Shortcut for Eclipse Imports

我希望这会帮助你并帮助别人,我希望更多的是这不违反我们的社区规则。