使用广播接收器来接收来电,onReceive没有触发?

时间:2012-04-14 01:30:04

标签: android broadcastreceiver

我想实现一个简单的BroadcastReceiver,它会在有来电时被触发。但是,似乎onReceive永远不会被触发(我仔细检查了LogCat,没有输出),出了什么问题? TKS 我的班级:

public class MyPhoneReceiver extends BroadcastReceiver {
    private static final String TAG = "DEBUG";

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e(TAG, "Test loggiiiiiiiiiiiiiiiiiiiiiiiiing!");

    }

}

我的清单文件:

<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="tung.le.android.receiver.phone"
    android:versionCode="1"
    android:versionName="1.0" >


    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
         <receiver android:name=".MyPhoneReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.PHONE_STATE" >
                </action>

            </intent-filter>
        </receiver>

    </application>
    <uses-sdk android:minSdkVersion="15" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" >
    </uses-permission>

</manifest>

4 个答案:

答案 0 :(得分:2)

您可能需要在清单中的标记中添加 android:enabled =“true”,或者您必须在某处注册(例如自定义“YourApplication”类)。

答案 1 :(得分:1)

我使用此BroadcastReceiver解决方案遇到的问题是它无法触发在活动呼叫期间发生的任何呼叫。当我和一个人在电话上交谈而有人在另一条线路上打电话给我时(我接受第二次电话),实际上没有任何状态发生变化。之前电话被摘机了,当我接到第二个电话时它仍然被摘机。

我到目前为止找到的唯一解决方案是注册android.provider.Calls的观察者,然后在每次数据更改后从中获取最新的条目。如果有人知道更好的解决方案,请告诉我。

答案 2 :(得分:0)

您是否在代码中注册了Receiver?如果不是,则必须在manifest.xml中注册接收器。

答案 3 :(得分:0)

您的项目中至少应该有一个活动。即使你的应用程序启动就完成了它。它不需要做任何事情,但它应该在安装后至少启动一次。