Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中监听硬件按钮点击事件_Android_Broadcastreceiver - Fatal编程技术网

在android中监听硬件按钮点击事件

在android中监听硬件按钮点击事件,android,broadcastreceiver,Android,Broadcastreceiver,作为一个简单的测试,我正在尝试一个broadcastReceiver,它会用一条Toast消息通知用户android中有一个硬件按钮被点击 我在清单文件中创建了一个名为.TestReceiver的receiver标记,该标记侦听用户单击绿色发送按钮时通知的操作调用按钮: <receiver android:name=".TestReceiver" > <intent-filter> <action android:n

作为一个简单的测试,我正在尝试一个broadcastReceiver,它会用一条Toast消息通知用户android中有一个硬件按钮被点击

我在清单文件中创建了一个名为.TestReceiver的receiver标记,该标记侦听用户单击绿色发送按钮时通知的操作调用按钮:

<receiver android:name=".TestReceiver" >
    <intent-filter>             
        <action android:name="android.intent.action.ACTION_CALL_BUTTON" />
    </intent-filter>            
</receiver>

谢谢

以下是任何
广播接收器
可能无法接收的一些原因:

  • 在您的特定情况下,
    ACTION\u CALL\u按钮
    不是广播
    意图
    操作。这是一个活动
    Intent
    操作,不会被
    BroadcastReceivers
    截获。您可以通过中的“Activity Action”语句来说明这一点
  • 广播
    Intent
    可能不符合清单注册接收者的资格<代码>操作\电池状态就是这样一种操作。只有通过
    registerReceiver()
    在Java中注册的接收器才能接收这些信息。不幸的是,遵循这一规则的行为只是零星记录
  • 您可能需要特殊权限才能接收
    意图
    。例如,
    ACTION\u BOOT\u COMPLETED
    仅在您持有
    RECEIVE\u BOOT\u COMPLETED
    权限时有效。这些通常在该行动的文件中提及

  • 因此,我可以使用
    registerReceiver()
    注册到
    操作调用\u按钮
    ? 我看不到这需要任何权限。

    嘿,您可以按照此操作。您可以通过单击按钮查看自定义意图调用广播意图的教程

    这是显而易见的

    <receiver android:name="MyReceiver">
      <intent-filter>
         <action android:name="com.tutorialspoint.CUSTOM_INTENT">
      </action>
      </intent-filter>
    
    在主活动中声明此方法

    public void broadcastIntent(View view)
    {
        Intent intent = new Intent();
        intent.setAction("com.tutorialspoint.CUSTOM_INTENT");
        sendBroadcast(intent);
    }
    }
    
    最后是你的按钮

     <Button android:id="@+id/btnStartService"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="@string/broadcast_intent"
      android:onClick="broadcastIntent"/>
    

    您可以使用onKeyDown()方法

    方法:-

    @Override
    public boolean onKeyDown(int keycode, KeyEvent e) {
        switch(keycode) {
            case KeyEvent.KEYCODE_MENU:
               // Your Task on hard menu click
                break;
            case KeyEvent.KEYCODE_BACK:
              // Your Task on hard back click
                 break;
    
                return true;
        }
    
        return super.onKeyDown(keycode, e);
    }
    

    正如我所写:“在您的特定情况下,ACTION\u CALL\u按钮不是广播意图动作。它是一个活动意图动作,广播接收者不会截获。您可以通过文档中针对该特定动作的“activity ACTION”语句来说明这一点。”那么您是说这是不可能的吗?我想写一个服务来接收这个动作,而不是一个活动。你们的答案和问题不符。他正在谈论硬件按钮
     <Button android:id="@+id/btnStartService"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="@string/broadcast_intent"
      android:onClick="broadcastIntent"/>
    
    @Override
    public boolean onKeyDown(int keycode, KeyEvent e) {
        switch(keycode) {
            case KeyEvent.KEYCODE_MENU:
               // Your Task on hard menu click
                break;
            case KeyEvent.KEYCODE_BACK:
              // Your Task on hard back click
                 break;
    
                return true;
        }
    
        return super.onKeyDown(keycode, e);
    }