我目前正在开发一个需要几个"危险"权限的应用程序.因此,我尝试在Android Marshmallow(API级别23)中添加"请求许可",但无法找到如何执行此操作.
如何在我的应用中使用新的权限模型请求权限?
谷歌已弃用getRecentTasks"ActivityManager"类的功能" ".现在它所做的只是获取当前应用程序已打开的应用程序列表.
我甚至在StackOverflow上写了一篇关于它的帖子,但我发现这是不可能的.
我发了一篇关于它的帖子(在这里,另一个,类似的由其他人创建,在这里),并要求重新考虑它,谷歌决定创建一个新类,似乎提供类似的功能(更像是统计,但也可能有用),但我无法找到如何使用它.
该类称为" UsageStatsManager",我的猜测是函数" queryUsageStats"完成工作.
此外,它似乎有一个新的权限(" android.permission.PACKAGE_USAGE_STATS"),这是一个系统权限,但它写道:
声明权限意味着使用API的意图,设备用户可以通过Settings应用程序授予权限.
我查看了Android的代码,并注意到"Context"有USAGE_STATS_SERVICE,在JavaDocs中说下一件事:
/**
* Use with {@link #getSystemService} to retrieve a {@link
* android.app.UsageStatsManager} for interacting with the status bar.
*
* @see #getSystemService
* @see android.app.UsageStatsManager
* @hide
*/
public static final String USAGE_STATS_SERVICE = "usagestats";
Run Code Online (Sandbox Code Playgroud)
奇怪的是,不仅它说" status bar",而且packageName也不匹配(应该是" android.app.usage.UsageStatsManager").
我还添加了正确的权限:
<uses-permission
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />
Run Code Online (Sandbox Code Playgroud)
这是我使用的代码:
final UsageStatsManager …Run Code Online (Sandbox Code Playgroud) android usage-statistics activity-manager android-recents usagestatsmanager
在Android M(预览)中,用户可以选择特定应用并检索特定权限.
所以我问如何在运行时检查授权权限?
我正在使用新的UsageStatsManagerAPI来获取 Android 5.0 Lollipop中的当前前台应用程序.要使用此API,用户必须在Settings->Security->Apps with usage access屏幕中启用该应用程序.
我使用此Intent将用户直接发送到此屏幕:
startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
Run Code Online (Sandbox Code Playgroud)
现在,我想验证用户启用我的应用程序.我想这样做,就像我验证用户启用我的应用程序使用NotificationListenerService但我不知道什么是String键,如果它甚至存在.
Settings.Secure.getString(contentResolver, "enabled_notification_listeners");
// Tried Settings.ACTION_USAGE_ACCESS_SETTINGS as key but it returns null
第二种方法是查询使用情况统计信息并检查它是否返回结果(当应用程序未启用时返回一个空数组)并且它大部分时间都有效,但有时即使我的应用程序启用也会返回0结果.
UsageStatsManager mUsageStatsManager = (UsageStatsManager) context.getSystemService("usagestats");
long time = System.currentTimeMillis();
List stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 10, time);
if (stats == null || stats.isEmpty()) {
// Usage access is not enabled
}
Run Code Online (Sandbox Code Playgroud)
有没有办法检查我的应用程序是否启用了使用权限?
我目前正在开发一款适用于平板电脑的应用程序,可以在商店中展示广告.我需要为设置应用程序添加密码保护.为此,我需要检测设置应用程序是在后台服务中启动的.对于Android版本低于API 21的设备,可以使用getRunningTasks()完成此操作.不幸的是,此方法现已弃用.我尝试用这个答案实现我的目标,但事情并没有按照我的需要运作.我正在试着听,V/WindowManager( 740): Adding window Window{1f4535ef u0 com.android.settings/com.android.settings.Settings} at 9 of 16 (before Window{e14eed2 u0 Starting com.android.settings})但我不能把它当成输出.我正在使用上面引用的答案中的代码.而不是烘烤它我在logcat中打印它.
你能告诉我如何在API 21以上的Android版本中实现我的目标吗?我知道这是可能的,因为像Smart AppLock这样的应用程序可以实现.提前致谢!
自Android Lollipop以来,我们现在拥有一个用于访问应用使用情况统计数据的API.但是,您的应用必须由用户授予这些权限.
我知道使用Settings.ACTION_USAGE_ACCESS_SETTINGS将用户重定向到这些设置.
现在,我的问题是您如何知道用户已授予您这些权限,以便您可以停止将其重定向到设置.
谢谢!
android usage-statistics android-recents android-5.0-lollipop
我正在构建一个应用程序,用于收集和显示使用android.app.usage.UsageStatsManager系统服务的详细使用统计信息(科学!).此服务需要系统级权限android.permission.PACKAGE_USAGE_STATS.
用户需要在"设置"下明确授予系统级权限.当应用程序启动时,我想以编程方式确定该应用程序是否已被授予此权限.如果没有,我想显示如下提示:

要检查应用是否具有所需权限,我通常会执行以下操作:
if (PackageManager.PERMISSION_DENIED == checkCallingOrSelfPermission("android.permission.PACKAGE_USAGE_STATS")) {
// display prompt
}
// keep going
Run Code Online (Sandbox Code Playgroud)
提示启动Settings.ACTION_USAGE_ACCESS_SETTINGS意图:
final Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

但是,即使应用程序已被授予此权限,也会checkCallingOrSelfPermission(String)始终返回PackageManager.PERMISSION_DENIED(也称-1)返回.
有没有一种特殊的方法来检查系统级权限,或者我做错了什么?
在使用Android O之前,为了获得应用程序的大小,您必须具有特殊的权限,并使用隐藏的API。
这样的解决方案不再起作用,但是Google提供了一个不太细粒度的官方API:queryStatsForPackage,它返回StorageStats对象。
但是,我找不到有关如何使用它的任何信息。
与仅需要应用程序包名称的隐藏API相比,该API还需要“ String volumeUuid”和“ UserHandle user”。