Android P:UsageStatsManager getAppStandbyBucket [英] Android P: UsageStatsManager getAppStandbyBucket

查看:139
本文介绍了Android P:UsageStatsManager getAppStandbyBucket的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想显示当前存储桶

I want to display the current bucket of my application with a device under Android P beta. Therefore, I try to use the UsageStatsManager class like this :

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (Build.VERSION.SDK_INT >= 28) {
        UsageStatsManager usageStatsManager = (UsageStatsManager) getSystemService(USAGE_STATS_SERVICE);
        if (usageStatsManager != null) {
            Log.d(TAG, "getAppStandbyBucket():" + usageStatsManager.getAppStandbyBucket()); 
        }
    }
}

我的清单拥有android.permission.PACKAGE_USAGE_STATS权限:

My Manifest possesses the permission android.permission.PACKAGE_USAGE_STATS :

<uses-permission 
    android:name="android.permission.PACKAGE_USAGE_STATS" 
    tools:ignore="ProtectedPermissions" />

但是在启动应用程序时遇到崩溃:

But I encounter a crash when I launch my application :

07-24 10:23:39.061 26967-26967/com.app.bucket E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.app.bucket, PID: 26967
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.app.bucket/com.app.bucket.MainActivity}: java.lang.SecurityException: MATCH_ANY_USER flag requires INTERACT_ACROSS_USERS permission at com.android.server.pm.PackageManagerService.getPackageUid:4343 com.android.server.pm.PackageManagerService$PackageManagerInternalImpl.getPackageUid:23964 com.android.server.usage.UsageStatsService$BinderService.getAppStandbyBucket:927 android.app.usage.IUsageStatsManager$Stub.onTransact:274 android.os.Binder.execTransact:731 : Neither user 10118 nor current process has android.permission.INTERACT_ACROSS_USERS.
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.SecurityException: MATCH_ANY_USER flag requires INTERACT_ACROSS_USERS permission at com.android.server.pm.PackageManagerService.getPackageUid:4343 com.android.server.pm.PackageManagerService$PackageManagerInternalImpl.getPackageUid:23964 com.android.server.usage.UsageStatsService$BinderService.getAppStandbyBucket:927 android.app.usage.IUsageStatsManager$Stub.onTransact:274 android.os.Binder.execTransact:731 : Neither user 10118 nor current process has android.permission.INTERACT_ACROSS_USERS.
        at android.os.Parcel.createException(Parcel.java:1942)
        at android.os.Parcel.readException(Parcel.java:1910)
        at android.os.Parcel.readException(Parcel.java:1860)
        at android.app.usage.IUsageStatsManager$Stub$Proxy.getAppStandbyBucket(IUsageStatsManager.java:658)
        at android.app.usage.UsageStatsManager.getAppStandbyBucket(UsageStatsManager.java:479)
        at com.app.bucket.MainActivity.onCreate(MainActivity.java:60)

似乎我错过了一个权限,但是即使我添加了以下权限:

It seems that I missed a permission, but even when I add the following permission :

  <uses-permission
        android:name="android.permission.INTERACT_ACROSS_USERS"
        tools:ignore="ProtectedPermissions" />

我仍然遇到相同的崩溃.我当时在想,也许我错过了对权限的运行时调用,但是像文档规定:

I still have the same crash. I was thinking that maybe I miss the runtime call for the permission, but like the documentation stipulate :

注意:此API上的大多数方法都需要获得许可 android.permission.PACKAGE_USAGE_STATS.但是,声明 权限表示打算使用API​​和设备的用户 仍然需要通过设置"应用程序授予权限.看 设置.ACTION_USAGE_ACCESS_SETTINGS. 仅返回以下内容的方法 呼叫包的信息不需要此权限. 例如. getAppStandbyBucket ()和queryEventsForSelf(long,long).

NOTE: Most methods on this API require the permission android.permission.PACKAGE_USAGE_STATS. However, declaring the permission implies intention to use the API and the user of the device still needs to grant permission through the Settings application. See Settings.ACTION_USAGE_ACCESS_SETTINGS. Methods which only return the information for the calling package do not require this permission. E.g. getAppStandbyBucket() and queryEventsForSelf(long, long).

没有必要.即使知道我试图使用运行时权限,但仍然会崩溃.如果有人看到缺少的内容,我将非常感谢您的帮助.

It's not necessary. Even knowing that I tried to use the runtime permission, but I still get the crash. If anyone see what is missing, I would really appreciate the help.

推荐答案

我认为这是一个错误.问题追踪器中有一个涉及此问题的公开问题: https://issuetracker.google.com/issues/111102580 .

I think it's a bug. There is an open issue covering this in the issue tracker: https://issuetracker.google.com/issues/111102580.

这篇关于Android P:UsageStatsManager getAppStandbyBucket的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆