Я разрабатываю приложение для отображения видео. Я хочу, чтобы приложение не записывало и не делало скриншоты экрана и достигло этого 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);
}
Но все же, проблема преобладает.
Есть ли способ предотвратить это ??