作为一个简单的测试,我尝试有一个 broadcastReceiver,它将通过 Toast 消息通知用户在 android 中单击了硬件按钮。
我在我的 list 文件中创建了一个名为 .TestReceiver 的接收器标签,它监听 Action_CALL_BUTTON,以便在用户点击绿色 SEND 按钮时得到通知:
<receiver android:name=".TestReceiver" >
<intent-filter>
<action android:name="android.intent.action.ACTION_CALL_BUTTON" />
</intent-filter>
</receiver>
接下来,我创建了扩展 BroadcastReceiver 的 TestReceiver 类并创建了一个 Toast。 当我点击调用按钮时,我没有看到 Toast 消息,但我在一个 Activity 上测试了它,它显示了。 我在这里缺少什么?
package com.example.helloandroid;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class TestReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
CharSequence text = "Hello toast!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
}
谢谢
最佳答案
以下是任何 BroadcastReceiver
可能无法接收的一些原因:
- 在您的特定情况下,
ACTION_CALL_BUTTON
不是广播Intent
操作。它是一个 ActivityIntent
Action ,不会被BroadcastReceivers
拦截。您可以通过 documentation for this particular action 中的“Activity 操作”语句来说明这一点. - 广播
Intent
可能不符合 list 注册接收者的条件。ACTION_BATTERY_STATUS
就是这样一种操作。这些只能由通过registerReceiver()
在 Java 中注册的接收器接收。不幸的是,遵循这条规则的只有零星的记录。 - 您可能需要特殊许可才能接收
Intent
。例如,ACTION_BOOT_COMPLETED
仅在您拥有RECEIVE_BOOT_COMPLETED
权限时才有效。这些通常会在该操作的文档中提及。
关于android - 监听android中的硬件按钮点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1760107/