3

作为一个简单的测试,我试图有一个广播接收器,它将通过 Toast 消息通知用户在 android 中单击了一个硬件按钮。

我在清单文件中创建了一个名为 .TestReceiver 的接收器标签,它监听 Action_CALL_BUTTON 以在用户单击绿色 SEND 按钮时收到通知:

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

接下来,我创建了扩展 BroadcastReceiver 并创建 Toast 的 TestReceiver 类。当我单击呼叫按钮时,我看不到 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();

    }

}

谢谢

4

4 回答 4

3

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

  1. 在您的具体情况下,ACTION_CALL_BUTTON不是广播Intent动作。它是一个活动Intent动作,不会被BroadcastReceivers. 您可以通过此特定操作的文档中的“活动操作”语句来说明这一点。
  2. 广播Intent可能不适合清单注册的接收器。ACTION_BATTERY_STATUS就是这样一种行动。这些只能由在 Java 中注册的接收者通过registerReceiver(). 不幸的是,遵循此规则的只是零星记录。
  3. 您可能需要特殊权限才能接收Intent. 例如,ACTION_BOOT_COMPLETED仅在您拥有RECEIVE_BOOT_COMPLETED权限时才有效。这些通常在该操作的文档中提到。
于 2009-11-19T01:44:09.663 回答
0

嘿,您可以点击此链接。您可以通过单击按钮查看自定义 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();
}

在 Main Activity 中声明这个方法

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"/>
于 2014-09-19T06:01:26.773 回答
0

所以我可以注册到ACTION_CALL_BUTTONusing registerReceiver()? 我没有看到任何需要的许可。

于 2009-11-19T01:52:44.187 回答
-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);
}
于 2014-12-08T13:35:30.490 回答