ACTION_CAMERA_BUTTON 的广播接收器永远不会被调用

Posted

技术标签:

【中文标题】ACTION_CAMERA_BUTTON 的广播接收器永远不会被调用【英文标题】:broadcast receiver for ACTION_CAMERA_BUTTON never gets called 【发布时间】:2011-08-24 13:39:52 【问题描述】:

我在 android 中有一个应用程序,我想在按下相机的物理硬件按钮时拍照。我为这种类型的操作注册了一个意图,但我的广播接收器从未被调用。

我是这样做的:

扩展BroadcastReceiver的类

public class Adisor extends BroadcastReceiver 

    @Override
    public void onReceive(Context context, Intent intent) 

        if (intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT) != null) 
            // prevent the camera app from opening
            abortBroadcast();
            System.out.println("HEY");
            mCamera.takePicture(null, mPictureCallback, mPictureCallback);
        
    


这里是我注册接收器以监听操作的地方:

protected void onResume() 
    Log.e(TAG, "onResume");
    super.onResume();
    drb = new Adisor();
    IntentFilter i = new IntentFilter(
      "android.intent.action.CAMERA_BUTTON"
    );
    registerReceiver(drb, i);

在我的清单文件中,我有这个:

<activity android:name=".TakePhoto" />
<receiver android:name=".Adisor" >
    <intent-filter android:priority="10000">         
        <action android:name="android.intent.action.CAMERA_BUTTON" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>            
</receiver>

我正在做这一切的活动的名称是:TakePhoto。我的问题是为什么我的 onReceive() 方法永远不会被调用!

这都不是:

System.out.println("HEY");

出现在我的logcat或方法中

System.out.println("HEY");
mCamera.takePicture(null, mPictureCallbacmPictureCallback); 

被调用! 我做错了什么?

【问题讨论】:

你有没有看到它是否在 if() 之外进入广播接收器 我尝试了 System.out.println() 并且没有显示任何内容.....我在外部尝试了 if()...可能出了什么问题? 请帮助我***.com/questions/24989221/… 【参考方案1】:

您应该在清单中注册接收器或以编程方式注册。从onResume 方法中删除registerReceiver() 调用。

编辑: 将这些添加到您的清单中。

 <uses-permission android:name="android.permission.CAMERA" />
 <uses-feature android:name="android.hardware.camera" />

【讨论】:

应该在哪里注册。你能提供一段工作代码吗? 将接收器放在清单中,默认注册它。不需要以编程方式注册。只需将其从 onResume 中删除即可。 @user7777777777 让我们continue this discussion in chat【参考方案2】:

您的意图过滤器的优先级绝不应为 10000。用户应用程序允许的最大值为 999。

请参阅 AndroidDev 网站上的setPriority(int)。

【讨论】:

【参考方案3】:

要打开应用程序的唯一相机,您可以使用以下意图:

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, ACTION_IMAGE_CAPTURE);

【讨论】:

以上是关于ACTION_CAMERA_BUTTON 的广播接收器永远不会被调用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UDP 广播中处理同时作为发送方和接收方的客户端

Android BroadcastReceiver详解

BroadcastReceiver

BroadcastReceiver--Android广播机制

Linux 上 C 中的 UDP 发送方和 Windows 上 Qt 中的接收方不起作用? [关闭]

vlan划分