【问题标题】:Unable to Receive ACTION_NEW_PICTURE on Samsung and HTC UI's无法在三星和 HTC UI 上接收 ACTION_NEW_PICTURE
【发布时间】:2012-12-17 00:01:33
【问题描述】:

我有一个应用程序,它有一个接收动作 ACTION_NEW_PICTURE 的广播接收器。该接收器在大多数设备上都能正常工作,除了带有 htc 和三星相机 UI 的设备。

这是我的接收器:

BroadcastReceiver receiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            // Log.e(TAG, "Intent Received");
            // Toast.makeText(Helper.this, "Intent Received",
            // Toast.LENGTH_SHORT).show();
            if (intent.getAction() == android.hardware.Camera.ACTION_NEW_PICTURE) {
                NameEditor.mediaType = "image";
            } else {
                if (intent.getAction() == android.hardware.Camera.ACTION_NEW_VIDEO) {
                    NameEditor.mediaType = "video";
                }
            }
 NameEditor.pictureUri = intent.getData();
            startActivity(dIntent);
        }
    };

    filter = new IntentFilter(android.hardware.Camera.ACTION_NEW_PICTURE);
    filter.addAction(android.hardware.Camera.ACTION_NEW_VIDEO);
    try {
        filter.addDataType("image/*");
        filter.addDataType("video/*");
    } catch (MalformedMimeTypeException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
    registerReceiver(receiver, filter);

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: android broadcastreceiver action intentfilter


    【解决方案1】:

    首先,该广播是 API 级别 14 的新内容,因此除非相关设备运行 Android 4.0,否则不会出现该广播。

    第二,AFAIK,无论相机应用程序是由设备制造商还是第三方在 Play 商店外提供,都不需要相机应用程序必须发送该广播。当然,我可以编写一个不会发送该广播的相机应用程序。因此,我认为ACTION_NEW_PICTURE 是您的应用应该投机取巧使用的东西,而不是依赖它。

    【讨论】:

    • 谢谢,但是我应该怎么做才能支持旧设备和其他相机应用程序?
    • @user1641724:由于您没有解释您要完成的工作,因此无法回答。没有通用的、始终有保证的方法可以让您监视用户对相机的操作。
    • 好吧,我想在用户拍照后执行一项操作(而不是删除一张)。
    • @user1641724:您可以尝试在MediaStore 上使用ContentObserver,但您无法将其限制为新的相机图像——来自任何来源的新图像都会触发您的逻辑。或者,您可以尝试在照片的外部公共存储目录上使用FileObserver(请参阅Environment)。但是,相机应用程序不必将照片存储在那里。您无法可靠地找出“用户拍照”的时间。
    • 哦,好吧,我自己想通了,谢谢你的帮助。您只需对返回的 uri 进行一些检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 2019-03-09
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多