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