Android-FirebaseJobDispatcher-contentUriTrigger不起作用

时间:2018-11-03 08:45:03

标签: android firebase triggers firebase-job-dispatcher jobservice

我正在构建负责图像加密的简单android应用。 此应用程序应在存储在设备上后立即自动检测包含敏感数据(文档或面部)的图像,并建议用户使用带有“嘿哥们!我们在您的存储中发现了未加密的敏感图像”的消息来对其进行加密。加密吗?”

我需要做的是检测DCIM文件夹中是否出现了一些新文件,分析其中是否包含敏感数据,然后再推送通知,以便用户可以单击它并加密该图像。我需要这个应用程序能与最新的android版本一起使用(从android O,我不能听隐式广播并在后台运行服务),所以我使用了FirebaseJobDispatcher,在其中我将DCIM文件夹的contentUriTrigger设置为触发器。

问题在于,当我拍照时,此触发器不起作用(我的JobService尚未启动),我找不到原因。关于它的文档确实很少。我知道我在官方仓库中的源代码中找到的所有内容: https://github.com/firebase/firebase-jobdispatcher-android

这是我的代码:

MainActivity:

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_safe)

    ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), 1)


    val dispatcher = FirebaseJobDispatcher(GooglePlayDriver(this))

    val dcimUri = Uri.parse(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).path)

    val myJob = dispatcher.newJobBuilder()
            .setService(NotificationJob::class.java)
            .setTag("com.something.something.NOTIFICATION_JOB")
            .setRecurring(true)
            .setLifetime(Lifetime.FOREVER)
            .setTrigger(Trigger.contentUriTrigger(listOf(
                    ObservedUri(dcimUri, ObservedUri.Flags.FLAG_NOTIFY_FOR_DESCENDANTS)
            )))
            .build()

    dispatcher.mustSchedule(myJob)
}}

JobService:

class NotificationJob: JobService() {
override fun onStopJob(job: JobParameters?): Boolean {
    Log.d("NotJob", "job stopped")
    return true
}

override fun onStartJob(job: JobParameters?): Boolean {
    Notifier.pushEncryptonNotification(applicationContext)
    Log.d("NotJob", "job started")
    return true
}}

清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.saomething.something">

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
        </intent-filter>
    </activity>
    <service
        android:exported="false"
        android:name=".job.NotificationJob">
        <intent-filter>
            <action android:name="com.firebase.jobdispatcher.ACTION_EXECUTE"/>
        </intent-filter>
    </service>

</application>

信息:

  • 对于那些不知道WRITE权限的人,还应包括READ。
  • Notifier是我的经理类,用于处理android通知,您可以假定它可以正常工作。
  • 图像分析逻辑尚未实现。我想将其添加到onStartJob方法中。它将异步运行,并且仅在检测到敏感数据时才调用通知程序(目前,我只希望每次DCIM文件夹更改时都可以看到通知)

有人以前有过这样的问题吗?如果没有,还有其他方法可以实现这种行为吗?请帮忙!

0 个答案:

没有答案