相机应用程序拍摄新照片时如何生成通知?

Posted

技术标签:

【中文标题】相机应用程序拍摄新照片时如何生成通知?【英文标题】:How to generate notification when a new picture is taken by camera app? 【发布时间】:2018-09-10 10:14:39 【问题描述】:

我想在从相机应用拍摄新照片时从我的应用创建通知。我想在我的应用程序未运行时实现这一点。我正在使用广播接收器来执行此操作。 这是我的代码...

android 清单中..

<receiver
    android:name=".receivers.CameraEventReceiver"
    android:label="CameraEventReceiver"
    android:enabled="true">
    <intent-filter>
        <action android:name="android.hardware.action.NEW_PICTURE" />

        <data android:mimeType="image/*" />
    </intent-filter>
</receiver>

在我的接收器类中

public class CameraEventReceiver extends BroadcastReceiver 

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

            NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)

                NotificationChannel channel = new NotificationChannel("CHANNEL_ID", "my channel name", NotificationManager.IMPORTANCE_HIGH);
                manager.createNotificationChannel(channel);
            
            NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "CHANNEL_ID")
                    .setColor(ContextCompat.getColor(context, R.color.colorPrimary))
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentTitle("Picture Taken")
                    .setContentText("here is the uri : "+intent.getData())
                    .setDefaults(NotificationCompat.DEFAULT_VIBRATE)
                    .setAutoCancel(true);

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN && Build.VERSION.SDK_INT < Build.VERSION_CODES.O)
                builder.setPriority(NotificationCompat.PRIORITY_HIGH);
            

            manager.notify(222, builder.build());
        
    

当应用程序运行时,它适用于 Android 6.0... 但它不适用于较新的版本。 我能做些什么来实现这一目标? 我希望它支持所有 android 版本高于 4.1 (JELLY_BEAN) 的设备

提前致谢

【问题讨论】:

尝试使用最新版本android的通知渠道,参考:***.com/questions/49590489/… 【参考方案1】:

但它不适用于较新的版本。

正确。不再支持这些广播。见the Android 7.0 release notes。

我能做些什么来实现这个目标?

自己拍摄照片,无论是使用ACTION_IMAGE_CAPTURE、相机 API 还是库(例如,Fotoapparat、CameraKit-Android)。

该广播没有直接替代品,相机应用也不需要触发该广播。

您可以使用JobScheduler and addTriggerContentUri() 监控MediaStore 的更改。但是,我不知道您如何将其限制为仅由相机应用拍摄的照片。

【讨论】:

但是在这个developer.android.com/reference/android/hardware/… 文档中。他们说 “在 Android O 中,这个广播已经恢复,但只针对注册的接收者” .. 所以它应该可以在 Android O 上工作,对吧? @user9333500:我认为“注册的接收者”是指在运行时通过registerReceiver() 注册的。当您的进程未运行时,这将不起作用。 我尝试在运行时在我的 Activity 中使用 registerReceiver(),但它仍然无法正常工作。 @user9333500:那么文档可能是错误的。或者,该特定设备上的相机应用程序可能不会触发此广播。请记住,有数百个相机应用程序。他们中的任何一个都不需要触发此广播。 是的。没错...我尝试使用默认的相机应用程序。无论如何,感谢您的回复。【参考方案2】:

当新短信到达时我已经实施,我面临同样的问题。我在清单文件中添加了以下几行。

<intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.INPUT_METHOD_CHANGED" />
</intent-filter> 

【讨论】:

以上是关于相机应用程序拍摄新照片时如何生成通知?的主要内容,如果未能解决你的问题,请参考以下文章

当我的应用程序在后台运行时,可以从摄像头获取通知吗?

为啥每一张相机拍摄的影像都存在位置信息和姿态信息

如何在 INTENT_ACTION_STILL_IMAGE_CAMERA 中为新照片指定目录

如何知道相机拍摄的照片的方向? [复制]

Android:BroadcastReceiver 意图检测拍摄的相机照片?

无法上传照片库视频,但可以上传从相机 iOS 拍摄的视频