Android 如何防止应用程序中的音频录制?

Android 如何防止应用程序中的音频录制?,android,kotlin,Android,Kotlin,我正在开发一个用于显示视频的应用程序。我想阻止应用程序录制屏幕和截图,并通过window.setFlags(WindowManager.LayoutParams.FLAG\u SECURE,WindowManager.LayoutParams.FLAG\u SECURE)实现。但我无法阻止视频的音频录制 我的代码 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceSta

我正在开发一个用于显示视频的应用程序。我想阻止应用程序录制屏幕和截图,并通过
window.setFlags(WindowManager.LayoutParams.FLAG\u SECURE,WindowManager.LayoutParams.FLAG\u 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)
}
但问题依然存在


有什么方法可以防止吗???

请发布一些代码,以便我们可以帮助您。我已经在上面添加了我的代码,请检查。您好@user1850484您找到解决方案了吗?您无法停止音频录制,但您可以检测到这一点,然后您应该停止应用程序,并要求用户停止录制应用程序以继续使用您的应用程序请发布一些代码,所以我们可以帮助你。我已经在上面添加了我的代码,请检查一下。您好@user1850484您找到解决方案了吗?您无法停止音频录制,但您可以检测到这一点,然后您应该停止您的应用程序,并要求用户停止录制应用程序以继续使用您的应用程序
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);
    }