Android应用在后台使用设备管理和麦克风权限进行秘密窃听的可能性

74次阅读
没有评论

问题描述

Android 12及更高版本要求应用程序在后台运行时必须有一个前台服务(具有永久的通知),否则将会被系统自动停止。根据官方文档,唯一可行的替代方案是使用计划任务。我的问题是,这些计划任务是否可以启动麦克风录音?更重要的是,用户是否会通过通知栏看到录音活动?

我了解到,使用永久位置跟踪权限可以达到类似的效果,但对于麦克风权限来说,似乎没有类似的机制。Android在这方面有多严格?应用程序在没有前台活动时会停止录音吗?拥有全设备管理权限的应用程序能否绕过这一限制?

目前的研究表明,从Android 9开始,后台录音是不可能的,并且自Android 12起,任何录音活动都会在右上角的通知栏中显示。我希望获得更多具体的细节。

解决方案

方案1:使用前台服务

请注意,从Android 12开始,应用程序需要始终运行前台服务以避免被系统停止。

前台服务概述

根据Android官方文档,应用程序在后台运行时必须保持前台服务,这意味着必须有一个始终可见的通知。如果应用程序没有运行前台服务,它将在一段时间后被系统停止。对于麦克风权限,应用程序需要持续地在前台运行以进行录音操作。

实现步骤

  1. 创建前台服务
  2. 创建一个新的类继承自Service,并重写onStartCommand()方法。
  3. onStartCommand()方法中,调用startForeground()方法启动前台服务,并传递一个通知。

  4. 添加通知

  5. startForeground()方法中,提供一个通知,确保用户可以看到该通知。

  6. 使用麦克风权限

  7. 确保在AndroidManifest.xml中声明了RECORD_AUDIO权限。
  8. 在运行时请求麦克风权限,并处理用户的授权结果。
<!-- 在AndroidManifest.xml中声明权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
// 在Activity或Service中请求权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, REQUEST_CODE);
}

方案2:使用计划任务

请注意,计划任务只能定期执行,不能实时响应用户的操作。

计划任务概述

计划任务可以用于定期执行某些操作,但不能实时响应用户的操作。这对于麦克风录音来说并不适用,因为用户需要实时监控录音活动。

实现步骤

  1. 创建计划任务
  2. 使用JobSchedulerWorkManager来创建计划任务。
  3. 在计划任务中执行麦克风录音操作。

  4. 处理录音结果

  5. 在计划任务完成后,处理录音结果,并将结果保存到文件或发送到服务器。
// 使用WorkManager创建计划任务
OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(MyWorker.class)
    .setInitialDelay(10, TimeUnit.MINUTES)
    .build();
WorkManager.getInstance().enqueue(request);

// 在MyWorker中执行录音操作
public class MyWorker extends Worker {
    @NonNull
    @Override
    public Result doWork() {
        // 执行录音操作
        return Result.success();
    }
}

方案3:利用设备管理权限

请注意,拥有设备管理权限的应用程序可以绕过许多限制。

设备管理权限概述

拥有设备管理权限的应用程序可以执行更多的后台操作,包括在没有前台活动时进行录音。然而,这种做法可能会引起用户的警惕,并可能导致应用被卸载。

实现步骤

  1. 请求设备管理权限
  2. AndroidManifest.xml中声明MANAGE_DEVICE_ADMIN权限。
  3. 在运行时请求设备管理权限,并处理用户的授权结果。

  4. 启用设备管理器

  5. 在用户授权后,调用DevicePolicyManager.setDeviceOwnerApp()方法启用设备管理器。

  6. 执行录音操作

  7. 在设备管理器启用后,应用程序可以在后台运行并进行录音操作。
<!-- 在AndroidManifest.xml中声明权限 -->
<uses-permission android:name="android.permission.MANAGE_DEVICE_ADMIN"/>
// 请求设备管理权限
if (!isAdminActive(mAdminName)) {
    Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
    intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mAdmin);
    intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "请启用设备管理权限以继续使用此功能。");
    startActivityForResult(intent, REQUEST_CODE);
}

// 启用设备管理器
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
if (dpm.isAdminActive(mAdminName)) {
    // 执行录音操作
}

通过以上三种方案,我们可以更好地理解Android在后台录音方面的限制和可能性。拥有设备管理权限的应用程序可以绕过许多限制,但在实际应用中,应确保遵守隐私政策和用户协议,以维护良好的用户体验。

正文完