onReceive方法不会被调用

时间:2011-05-18 05:54:19

标签: android broadcastreceiver

public class BroadcastTest extends Activity {
BroadcastReceiver receiver;

/** Called when the activity is first created. */

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    try{
    receiver=new Receiver(this);
    registerReceiver(receiver,new IntentFilter(Intent.ACTION_CALL_BUTTON));
    }catch(Exception e){
        Log.d("error",e.getMessage());
    }
  }
}

和另一个班级

public class Receiver extends BroadcastReceiver{
public Receiver(BroadcastTest broadcastTest) {
    // TODO Auto-generated constructor stub
}

@Override
public void onReceive(Context arg0, Intent arg1) {
    // TODO Auto-generated method stub
    Log.d("Fired","Hi");
}
}

是接收器类的onReceive方法,当我按下呼叫按钮时应该被呼叫?如果是,那么它没有接通电话。我在这里做错了什么。我在按下呼叫按钮时没有在logcat中看到任何东西。谢谢提前

1 个答案:

答案 0 :(得分:6)

这个Blog post描述了AlarmManager和BroadcastReceiver的一些常见缺陷。包括的例子!希望有所帮助。

编辑: 一些常见的陷阱:

  1. 未在AndroidManifest.xml中声明接收器

    在Manifest文件中声明接收器:

    <receiver android:name="net.fusonic.testapp.receivers.TestAlarmReceiver"></receiver>
    
  2. 清单中的接收器xml拼写错误

    永远记住整个Android系统区分大小写。因此,请检查AndroidMainfest.xml中的拼写是否正确。请记住,如果使用“.receivers.TestAlarmReceiver”这样的简短形式,eclipse重构函数不会正确更改包名。

  3. PendingIntent requestCode缺失?

    如果您为接收器创建了PendingIntent,请添加requestCode - 即使它是随机数!没有你的“onReceive”代码永远不会被调用!

  4. AVD长时间运行(非常棘手)

    请注意使用AVD,尤其是在使用“REALTIME_WAKEUP”和SystemClock时......如果您尝试测试闹钟,请重启AVD或在真实设备上进行测试!