【发布时间】:2021-11-20 15:14:29
【问题描述】:
我正在尝试为 SDK 版本 30 开发一个 android 应用程序,该应用程序(当单击按钮时)开始监听手机上打开了哪些应用程序。如果它检测到用户打开 Whatsapp,它应该在 Whatsapp 上显示 LockScreen 活动,让您在能够使用 Whatsapp 之前回答数学问题。
我知道可以这样做,因为它们是 QualityTime 或 Forest 之类的应用程序,它们具有类似的功能来限制您使用某些应用程序,但在编程方面我是新手(从我的代码中可能很明显)并且感觉完全被卡住了.
我已经想出了如何使用堆栈溢出代码检测用户在最后一秒打开的应用程序:
public String getCurrentApp() {
String topPackageName = "None";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
UsageStatsManager mUsageStatsManager = (UsageStatsManager) getSystemService("usagestats");
long time = System.currentTimeMillis();
List<UsageStats> stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1, time);
// Sort the stats by the last time used
if (stats != null) {
SortedMap<Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>();
for (UsageStats usageStats : stats) {
mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);
}
if (!mySortedMap.isEmpty())
{
topPackageName = mySortedMap.get(mySortedMap.lastKey()).getPackageName();
}
}
}
return topPackageName;
}
当用户单击我的应用程序中的按钮以“激活”收听过程时,我有另一个功能启动。这个函数会不断检查用户是否打开了 Whatsapp,然后应该在顶部显示 Lockscreen 活动:
public void startListening(View view)
{
System.out.println("Lock activated.");
while (activated) {
String currentlyRunningApp;
currentlyRunningApp = getCurrentApp();
if (currentlyRunningApp.equals("com.whatsapp"))
{
System.out.println("Whatsapp detected. Showing Lockscreen...");
Intent i = new Intent(this,LockScreen.class);
startActivity(i);
}
try {
Thread.sleep(800);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
(我展示的所有代码都在我的 MainActivity 中。)
我的应用获得了以下权限:
- android.permission.PACKAGE_USAGE_STATS(用于 getCurrentApp() 函数)
- android.permission.SYSTEM_ALERT_WINDOW(建议here)
- android.permission.ACTION_MANAGE_OVERLAY_PERMISSION(虽然我不确定我什至需要这个)
我的问题是,它没有显示我创建的锁屏活动,而是只为用户显示黑屏。如果我让用户通过 mainActivity 上的按钮打开 Lockscreen 活动,它本身就可以正常工作,所以问题似乎真的是,如果我的应用程序在后台运行并且我想显示它,我无法正确显示活动Whatsapp 的顶部。
我试图查看类似的问题,但这里所有具有类似用例的帖子似乎都非常陈旧和过时(即this 或this),因为较新的版本似乎更严格安全限制。
我也尝试使用屏幕覆盖而不是活动来做到这一点(使用this 源),但这甚至不会给我一个黑屏 - 只是什么都不做......
我也知道可能有更好的方法来编写整个“侦听和检查 whatsapp”部分 - 即使用服务而不是 while 循环或其他东西,但我只是在研究这个问题时才发现服务我想先解决黑屏问题。
【问题讨论】:
标签: android android-studio android-activity