作为一个简单的测试,我正在尝试使用一个broadcastReceiver,它将通过Toast消息通知用户在android中单击了一个硬件按钮。
我在我的清单文件中创建了一个接收器标签,其名称为.TestReceiver,当用户点击绿色SEND按钮时,它会收听Action_CALL_BUTTON的通知:
<receiver android:name=".TestReceiver" >
<intent-filter>
<action android:name="android.intent.action.ACTION_CALL_BUTTON" />
</intent-filter>
</receiver>
接下来,我创建了TestReceiver类,它扩展了BroadcastReceiver并创建了Toast。 当我点击通话按钮时,我没有看到Toast消息,但我在一个活动上测试了它并显示。 我在这里缺少什么?
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();
}
}
由于
答案 0 :(得分:3)
以下是导致任何BroadcastReceiver
无法接收的原因:
ACTION_CALL_BUTTON
不是广播Intent
操作。这是一项活动Intent
操作,不会被BroadcastReceivers
拦截。您可以通过documentation for this particular action。Intent
可能没有资格使用舱单注册的接收器。 ACTION_BATTERY_STATUS
就是这样一个行动。这些只能由通过registerReceiver()
在Java中注册的接收者接收。不幸的是,遵循这条规则只是偶尔记录在案。Intent
。例如,ACTION_BOOT_COMPLETED
仅在您拥有RECEIVE_BOOT_COMPLETED
权限时才有效。这些通常在该操作的文档中提到。答案 1 :(得分:0)
所以我可以使用ACTION_CALL_BUTTON
注册registerReceiver()
?
我没有看到任何许可。
答案 2 :(得分:0)
嘿,您可以按照link进行操作。您可以通过点击按钮看到自定义Intent教程来调用广播意图
这是清单
<receiver android:name="MyReceiver">
<intent-filter>
<action android:name="com.tutorialspoint.CUSTOM_INTENT">
</action>
</intent-filter>
这是一个广播接收器类
public class MyReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
}
在主要活动中声明此方法
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"/>
答案 3 :(得分:-1)
您可以使用 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);
}