当前位置: 首页 > 知识库问答 >
问题:

如何获得gallery应用程序可见的每个新图像的通知?

越学博
2023-03-14

当用户下载新图像或使用相机捕获图像时,图库应用程序将更新以显示新图像。

我需要在创建每个新图像时立即收到通知,无论它是如何创建的(相机、浏览器、...),就像画廊应用程序显示的那样。

原来有一个mediaScanner Android组件负责扫描所有类型的媒体文件,当它完成时,它应该发送一个intent“MEDIA _ SCANNER _ FINISHED”(如本例所示)。

所以我添加了下一段代码,希望它能在用户每次从相机应用程序拍照时显示一段祝酒词:

清单:

    ...
    <receiver android:name="com.example.newgalleryimagereceivertest.MediaScannerBroadcastReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.MEDIA_SCANNER_FINISHED" />
            <data android:scheme="file" />
        </intent-filter>
    </receiver>
    ...

java文件:

package com.example.newgalleryimagereceivertest;
...
public class MediaScannerBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(final Context context, final Intent intent) {
        android.util.Log.d("AppLog", "gallery has new images");
    }

出于某种原因,此代码不起作用...

代码怎么了?

拍摄照片后,广播接收者会被调用吗?

正确的方法是什么?

我真的需要使用 contentObserver 并监视其更改(使用类似的东西),并保持应用程序为此运行吗?我真的希望不是...

共有3个答案

饶铭
2023-03-14

我想你可以使用文件观察者来实现这一点。

如留档所述:

监视文件以在设备上的任何进程访问或更改文件后触发事件。每个FileObserver实例监视单个文件或目录。如果监视目录,则将触发监视目录内所有文件和子目录的事件。

但你必须记住:

如果FileObserver被垃圾收集,它将停止发送事件。为了确保您持续接收事件,您必须从其他一些活动对象中保存对FileObserver实例的引用。

请给我一些反馈。希望有帮助。

秦飞航
2023-03-14

您可能也想考虑将这些添加到您的过滤器中:

com.android.camera.NEW_PICTURE
com.android.camera.NEW_VIDEO
android.hardware.action.NEW_PICTURE
android.hardware.action.NEW_VIDEO

android.hardware.x操作是当前“官方”广播,但com.android.x操作是由三星设备和旧版本的Android发送的。

凤高澹
2023-03-14

ACTION_MEDIA_SCANNER_FINISHED用于向图库添加新目录:

广播操作:媒体扫描程序已完成目录扫描。扫描目录的路径包含在意图中。mData字段。

常数值:" Android . intent . action . media _ SCANNER _ FINISHED "

您应该使用ACTION_MEDIA_SCANNER_SCAN_FILE,它用于添加新文件 - 而不仅仅是目录:

广播操作:请求媒体扫描仪扫描文件并将其添加到媒体数据库。文件的路径包含在意图中。mData字段。

常量值:“android.intent.action.MEDIA_SCANNER_SCAN_FILE”

您可以使用此处讨论的代码测试此Intent

此外,据报道,有些人需要包含mime类型和文件扩展名,例如:

<data android:mimeType="*/*"/>
<data android:pathPattern=".*\\.png" />
 类似资料:
  • 我正在尝试让一些在应用程序中拍摄的图片在图库中可见(这样它们就可以在应用程序外部共享和查看),但我希望将图片本身保存在应用程序的数据目录中,这样当应用程序被删除时,它们就会被删除(因此它们被存储在“{sdcard}/android/data/{appID}/pictures/{subfolder}/”中)。 我看了很多答案,对于较老版本的Android来说,以下两种解决方案都有效,但在Lollip

  • 我试图为Java程序做一些样式检查/翻译工作。 首先,我想要一个库(最好是在Java中),这样我就可以在我的程序中使用它。其次,我希望它能做到以下几点: null null

  • 我试图打开内置的画廊应用程序按下我的应用程序中的按钮。 我正在试用Android 2.3及以上版本的手机。我拥有的手机/平板电脑是 三星S(Android2.3.5)、LG手机(Android3.3)、Nexus One(Android1.3.6)、Android平板电脑(Android4.0.3)和Galaxy Nexus(Android5.3) 我尝试了以下方法: 上述代码在Android平板

  • 我有一些盒子里面有图像。我想让它做的是,如果图像高度小于其内部的div-boxs高度,则向图像添加一个类。 但是我已经用css将图像设置为div框的100%宽度,所以当我使用jquery时。在图像上,它给出了原始尺寸。有什么建议吗? ID为imgProjekt1和ImgProjekt2的文本从codebehind生成一个普通的img标记。

  • 我正在处理使用通知侦听器服务类从通知中读取数据的应用程序。我已完成文本部分,但无法存储通知中收到的图像。 我想存储在WhatsApp应用程序中从通知中收到的图像。我已经尝试了堆栈溢出的所有解决方案,但没有得到任何解决方案。我已经尝试了<代码>通知。EXTRA_PICTURE但它总是返回null。 我见过许多应用程序这样做,但看起来我错过了一些东西。 因此,如果有人能以任何方式提供帮助,我们将不胜感

  • 问题内容: 当然会抛出NPE。 如果实例为空,我应该使用什么语法来获取T类?可能吗? 问题答案: 由于类型擦除,这是不可能的。 有以下解决方法: