相关疑难解决方法(0)

Android marshmallow请求权限?

我目前正在开发一个需要几个"危险"权限的应用程序.因此,我尝试在Android Marshmallow(API级别23)中添加"请求许可",但无法找到如何执行此操作.

如何在我的应用中使用新的权限模型请求权限?

android android-permissions android-6.0-marshmallow

151
推荐指数
8
解决办法
24万
查看次数

如何使用UsageStatsManager?

背景

谷歌已弃用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

52
推荐指数
5
解决办法
5万
查看次数

如何在运行时检查授权权限?

Android M(预览)中,用户可以选择特定应用并检索特定权限.

所以我问如何在运行时检查授权权限

android android-permissions android-6.0-marshmallow

39
推荐指数
4
解决办法
8万
查看次数

检查我的应用程序是否启用了使用权限

我正在使用新的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 usage-statistics

25
推荐指数
4
解决办法
1万
查看次数

Android - 如何检测3d party应用程序何时启动

我目前正在开发一款适用于平板电脑的应用程序,可以在商店中展示广告.我需要为设置应用程序添加密码保护.为此,我需要检测设置应用程序是在后台服务中启动的.对于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 password-protection android-5.1.1-lollipop

15
推荐指数
1
解决办法
1502
查看次数

Android Lollipop知道app是否可以访问Usage Stats

自Android Lollipop以来,我们现在拥有一个用于访问应用使用情况统计数据的API.但是,您的应用必须由用户授予这些权限.

我知道使用Settings.ACTION_USAGE_ACCESS_SETTINGS将用户重定向到这些设置.

现在,我的问题是您如何知道用户已授予您这些权限,以便您可以停止将其重定向到设置.

谢谢!

android usage-statistics android-recents android-5.0-lollipop

7
推荐指数
2
解决办法
1万
查看次数

以编程方式确定Android应用程序是否具有系统级权限

我正在构建一个应用程序,用于收集和显示使用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)

App明显有许可

但是,即使应用程序已被授予此权限,也会checkCallingOrSelfPermission(String)始终返回PackageManager.PERMISSION_DENIED(也称-1)返回.

有没有一种特殊的方法来检查系统级权限,或者我做错了什么?

permissions android

6
推荐指数
0
解决办法
1343
查看次数

如何在Android O上使用StorageStatsManager.queryStatsForPackage?

背景

在使用Android O之前,为了获得应用程序的大小,您必须具有特殊的权限,并使用隐藏的API。

问题

这样的解决方案不再起作用,但是Google提供了一个不太细粒度的官方API:queryStatsForPackage,它返回StorageStats对象。

但是,我找不到有关如何使用它的任何信息。

与仅需要应用程序包名称的隐藏API相比,该API还需要“ String volumeUuid”和“ UserHandle user”。

问题

  1. 如何提供这些参数?
  2. 他们的意思是什么?每个volumeUuid是否都引用不同的存储(例如,内置存储和真实的SD卡),而UserHandle是针对每个用户的吗?
  3. 如果#2是正确的,我是否应该为每个可能的值分别调用它们,以获取应用程序占用的实际总存储量?如果是这样,怎么办?

storage android android-8.0-oreo

2
推荐指数
1
解决办法
2418
查看次数