android - 监听android中的硬件按钮点击事件

标签 android broadcastreceiver

作为一个简单的测试,我尝试有一个 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 可能无法接收的一些原因:

  1. 在您的特定情况下,ACTION_CALL_BUTTON 不是广播 Intent 操作。它是一个 Activity Intent Action ,不会被 BroadcastReceivers 拦截。您可以通过 documentation for this particular action 中的“Activity 操作”语句来说明这一点.
  2. 广播 Intent 可能不符合 list 注册接收者的条件。 ACTION_BATTERY_STATUS 就是这样一种操作。这些只能由通过 registerReceiver() 在 Java 中注册的接收器接收。不幸的是,遵循这条规则的只有零星的记录。
  3. 您可能需要特殊许可才能接收Intent。例如,ACTION_BOOT_COMPLETED 仅在您拥有 RECEIVE_BOOT_COMPLETED 权限时才有效。这些通常会在该操作的文档中提及。

关于android - 监听android中的硬件按钮点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1760107/

相关文章:

Android FirebaseUI Auth - 如何重新认证?

Android 获取有关安装或删除的应用程序的广播

Android 在屏幕打开/关闭时显示自己的锁而不是默认锁

android - 奇怪的 "Receiver not registered"异常

java - Android 语音识别 API 在 Android 7 Nougat 中不起作用

android - Kotlin:我们可以在 Kotlin 中使用 EventBus (GreenRobot) 的 @Subscribe 吗?

android - iFrame allowFullScreen 属性在 Android WebView 上不起作用

android - Google Maps V2 连接问题

android - 即使没有从 Manifest 中实例化,也要让小部件 BroadcastReceiver 保持 Activity 状态

android - 发送长度超过 160 个字的短信,目前我使用 sms.sendTextMessage,如何分段发送?