BroadcastReceiver不会在Camera按钮上收到按键

时间:2012-11-05 19:05:50

标签: java android broadcastreceiver android-camera broadcast

我正在尝试在我的应用程序处于后台时播放一些音调,然后按“ 相机 ”按钮,我正在执行这个简单的步骤。

  1. 创建BroadcastReceiver

    public class CameraButtonListener extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            ToneGenerator tone = new ToneGenerator(AudioManager.STREAM_DTMF, 100);
            tone.startTone(0,2000);
            abortBroadcast();
        }
    }
    
  2. BrodcastReceiver方法中注册onCreate

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        MediaButtonBrodcastReceiver receiver = new MediaButtonBrodcastReceiver();        
        IntentFilter filter = new IntentFilter(Intent.ACTION_CAMERA_BUTTON);
        filter.setPriority(25645895);
        registerReceiver(receiver,filter);      
    }
    
  3. 将brodcast接收器添加到Android清单。

    <receiver android:enabled="true" android:exported="true" android:name=".CameraButtonListener">
    <intent-filter android:priority="25645895">
        <action android:name="android.intent.action.CAMERA_BUTTON" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    

  4. 启动我的应用程序后,按菜单按钮,应用程序进入后台,按下相机按钮后没有任何内容,只打开相机应用程序。也许我做错了什么或者我错过了什么?

    我使用的是索尼爱立信XPeria Arc手机和Android 2.3.4操作系统版本。

2 个答案:

答案 0 :(得分:1)

如果您使用的是第3步,请删除<category>元素中的<receiver>元素。该广播可能没有类别 - 您通常只能看到用于Intent的{​​{1}}个对象的类别。

请注意,您的步骤#2未指定具有startActivity()的类别,这很好。

答案 1 :(得分:0)

在这里,请阅读Android Services。如果您希望应用程序在后台执行任务,则使用服务。在这种情况下,即使您的应用程序当前不在前台,您也想知道什么时候发生。这是怎么做的。