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

4
我希望我的应用程序在相机应用程序拍摄新照片时能够创建通知。我希望即使我的应用程序没有运行也能实现这一点。我使用广播接收器来完成此操作。 以下是我的代码...
在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中使用通知渠道,参考此链接:https://stackoverflow.com/questions/49590489/how-to-show-a-notification-on-oreo/49594694#49594694 - Deep Patel
2个回答

0
但它不适用于更新版本。
正确。这些广播已不再受支持。请参阅Android 7.0发布说明
我该怎么做才能实现这个?
自己拍照,无论是使用、相机API还是库(如Fotoapparat、CameraKit-Android)。
没有直接替代该广播的方法,并且相机应用程序也没有触发该广播的要求。
您可以使用JobScheduleraddTriggerContentUri()来监视MediaStore的更改。但是,我不知道如何将其限制为仅由相机应用程序拍摄的图片。

@user9333500: 通过“已注册的接收器”,我相信他们是指在运行时通过 registerReceiver() 进行注册的。当您的进程未运行时,这将无法工作。 - CommonsWare
我在我的Activity中尝试在运行时使用registerReceiver(),但它仍然无法工作。 - Abani
MediaStore方法是否是GPhotos检测其他应用程序拍摄照片并上传到云端的方式? - Michael
另外,是否有可能通过针对低于7.0版本的Android特定版本来解决这种功能损失的问题? - Michael
1
@Michael:“MediaStore方法是GPhotos检测其他应用程序何时拍摄照片以便上传到云端的方式吗?”--我不知道,但这肯定是一种可能性。使用JobScheduler有一个选项可以监视ContentProvider的更改。“是否可以通过针对低于7.0版本的Android特定版本来解决此功能丢失的问题?”-- 不行。 - CommonsWare
显示剩余7条评论

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接