安卓中用于未接来电的广播接收器

6

有人知道未接来电的意图是什么吗?实际上,我想在我的应用程序中未接来电和呼入电话时发送短信。

2个回答

12

您需要使用ContentObserver。

public class MissedCallsContentObserver extends ContentObserver
{
    public MissedCallsContentObserver()
    {
        super(null);
    }

    @Override
    public void onChange(boolean selfChange)
    {
        Cursor cursor = getContentResolver().query(
            Calls.CONTENT_URI, 
            null, 
            Calls.TYPE +  " = ? AND " + Calls.NEW + " = ?", 
            new String[] { Integer.toString(Calls.MISSED_TYPE), "1" }, 
            Calls.DATE + " DESC ");

        //this is the number of missed calls
        //for your case you may need to track this number
        //so that you can figure out when it changes
        cursor.getCount(); 

        cursor.close();
    }
}

从您的应用程序中,您只需要执行以下操作:

MissedCallsContentObserver mcco = new MissedCallsContentObserver();
getApplicationContext().getContentResolver().registerContentObserver(Calls.CONTENT_URI, true, mcco);

你好,我想知道你是否有意故意省略了 cursor.close()?因为 ContentObserver 会自动关闭它,所以这不是必需的吗? - lock
好问题。我没有故意遗漏它,它应该在那里。我会更新我的答案。 - Joe

10

据我所知,没有针对未接来电的特定广播。

您可以监听ACTION_PHONE_STATE_CHANGED广播,等到手机从EXTRA_STATE_RINGING转换为EXTRA_STATE_IDLE,然后尝试检查CallLog内容提供程序以查看是否有未接来电。我尚未尝试过这种技术,但它可能有效。


@CommonsWare-我们能区分未接来电和拒接来电吗?因为它们在上述方式中都有相同的功能!!! - Name is Nilay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接