0

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

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

问题是当我拍照时这个触发器不起作用(我的 JobService 还没有启动),我找不到原因。关于它的文档真的很差。我在官方 repo 的源代码中发现的所有内容: https ://github.com/firebase/firebase-jobdispatcher-android

这是我的代码:

主要活动:

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

工作服务:

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 文件夹更改时看到通知)

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

4

0 回答 0