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

时间:2018-03-31 16:53:00

标签: android android-notifications intentfilter android-camera-intent android-broadcastreceiver

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

在Android Manifest ..

<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)

提前致谢

2 个答案:

答案 0 :(得分:0)

  

但它不适用于较新版本。

正确。那些广播不再受支持。请参阅the Android 7.0 release notes

  

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

自己拍照,无论是使用ACTION_IMAGE_CAPTURE,相机API还是图书馆(例如,Fotoapparat,CameraKit-Android)。

没有直接替换该广播,并且无论如何都没有要求相机应用程序触发该广播。

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

答案 1 :(得分:0)

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

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