我想在我的应用程序中获取未接来电和未读消息的计数。我想在用户点击计数时打开相关应用程序。
现在最大的问题是如何得到计数?
我在网上搜索但找不到任何解决方案。
提前致谢。
最佳答案
http://developer.android.com/reference/android/provider/CallLog.Calls.html
看看这个 CallLog
类。您所需要做的就是查询电话中的任何电话,然后提取未接电话(或在查询电话时在选择参数中执行此操作)。这同样适用于消息。 SMS 存储在 Content Provider 下的 "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
这需要在 list 中添加权限
<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/sent
或 content://sms/inbox
和为 query()
方法的第二个参数添加投影和选择,例如姓名、人员、消息状态(如 Calls 示例)。
这需要许可:
<uses-permission android:name="android.permission.READ_SMS"></uses-permission>
关于android - 如何获得未接来电和短信计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7621893/