Как предотвратить запись звука в приложениях? - PullRequest
1 голос
/ 30 января 2020

Я разрабатываю приложение для отображения видео. Я хочу, чтобы приложение не записывало и не делало скриншоты экрана и достигло этого window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE). Но я не могу предотвратить аудиозапись видео.

Мой код

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        super.setTheme(R.style.AppTheme_NoActionBar_1)
        window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)
        setContentView(R.layout.activity_video)

        videoView = findViewById<VideoView>(R.id.videoView)

        videoView!!.setVideoPath(path)

        ctlr = MediaController(this)
        ctlr!!.setAnchorView(videoView)
        videoView!!.setMediaController(ctlr)

        videoView!!.start()

        detectAudioRecording(this)
}

Я пытался определить, используют ли другие приложения микрофон, используя UsageStateManager, а код выглядит следующим образом

public static void detectAudioRecording(final Context context) {

        AppOpsManager appOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
        int mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS,
                android.os.Process.myUid(), context.getPackageName());

        if (mode != AppOpsManager.MODE_ALLOWED) {
            Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
            context.startActivity(intent);
        }

        /*if (otherAppAudioTimer != null) {
            otherAppAudioTimer.cancel();
        }*/

        Timer otherAppAudioTimer = new Timer();
        otherAppAudioTimer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                UsageStatsManager usm = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
                long now = System.currentTimeMillis();
                final List<UsageStats> queryUsageStats = usm.queryUsageStats(UsageStatsManager.INTERVAL_YEARLY, now - (1000 * 60 * 60), now);
                if (queryUsageStats != null && queryUsageStats.size() > 0) {
                    SortedMap<Long, UsageStats> mySortedMap = new TreeMap<>();
                    for (UsageStats usageStats : queryUsageStats) {
                        mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);
                    }
                    if (!mySortedMap.isEmpty()) {
                        String currentApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName();
                        boolean hasRecordAudio = context.getPackageManager()
                                .checkPermission(Manifest.permission.RECORD_AUDIO, currentApp)
                                == PackageManager.PERMISSION_GRANTED;

                        if (context.getApplicationContext().getPackageName().equals(currentApp)) {
                            Log.e("hasAudio", "Current app is self");
                            return;
                        }


                        if (hasRecordAudio) {
                            //the current app can record audio
                        } else {
                            //the current app cannot record audio
                        }

                    }
                }
            }
        }, 0, 3000);
    }

Но все же, проблема преобладает.

Есть ли способ предотвратить это ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...