OnReceive调用不工作的Android

时间:2014-04-13 11:56:56

标签: java android broadcastreceiver function-calls phone-call

我有一个代码如下的类:

public class CallManager extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        tManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        Log.i("onReceive","here");
    }
}

清单上的权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.PROCESS_INCOMING_CALLS" />
<uses-permission android:name="android.permission.BOOT_COMPLETED" />

接收方意图过滤器:

<receiver android:name="com.ram.tapdetector.CallManager">
    <intent-filter> 
        <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter>
 </receiver>

由于某种原因,没有从onReceive函数中记录任何内容?

我该如何解决这个问题?任何帮助将不胜感激,谢谢。

3 个答案:

答案 0 :(得分:1)

您必须添加权限

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

而不是

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

代表BOOT_COMPLETED。查看文档here

据我所知,其他一切都应该没问题。

p.s。:如果您想接收来电的广播事件,请使用权限

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

并使用

声明您的意图过滤器
<receiver 
  android:name="com.ram.tapdetector.CallManager"
  android:enabled="true">   
    <intent-filter
      android:priority="1000">
        <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
</receiver>

检查这个好tutorial以获取更多信息。

答案 1 :(得分:1)

您的AndroidManifest.xml文件中需要以下内容:

1)在你的元素中:

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

2)在你的元素中(确保为BroadcastReceiver使用完全限定的[或相对]类名称):

<receiver android:name="com.example.CallManager">  
    <intent-filter>  
        <action android:name="android.intent.action.BOOT_COMPLETED" />  
    </intent-filter>  
</receiver>

` 在MyBroadcastReceiver.java中:

`    package com.example;

public class CallManager extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        tManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        Log.i("onReceive","here");
    }
    }`

如果您使用的是HTC mobile -

一起
`<action android:name="android.intent.action.BOOT_COMPLETED" />  `

也用,

`<action android:name="android.intent.action.QUICKBOOT_POWERON" />`

HTC设备似乎没有抓住BOOT_COMPLETED

答案 2 :(得分:0)

你试过旗帜吗?

android:enabled="true" 
android:exported="true"