我正在构建负责图像加密的简单 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 文件夹更改时看到通知)
以前有人遇到过这样的问题吗?如果没有,还有其他方法可以实现这种行为吗?请帮忙!