Как я могу использовать UsageStatsManager в .NET MAUI
Я пытаюсь использовать UsageStatsManager в .NET MAUI.
Я просил разрешения, но не могу его получить. Это всегда отрицается, и, конечно же, статистика не возвращает никаких значений.
private async Task<bool> CheckPermissions()
{
PermissionStatus status = PermissionStatus.Unknown;
if (DeviceInfo.Platform == DevicePlatform.Android)
{
status = await Permissions.CheckStatusAsync<PackagePermission.PackageUsageStatsPermission>();
if (status == PermissionStatus.Granted)
return true;
if(Permissions.ShouldShowRationale<PackagePermission.PackageUsageStatsPermission>())
{
await Shell.Current.DisplayAlert("Needs permissions", "You must activate manualy", "OK");
}
status = await Permissions.RequestAsync<PackagePermission.PackageUsageStatsPermission>();
}
return status == PermissionStatus.Granted;
}
И это мой
BasePlatformPermission
using static Microsoft.Maui.ApplicationModel.Permissions;
namespace MauiStats.PackagePermission;
internal class PackageUsageStatsPermission : BasePlatformPermission
{
#if ANDROID
public override (string androidPermission, bool isRuntime)[] RequiredPermissions =>
new List<(string permission, bool isRuntime)>
{
("android.permission.PACKAGE_USAGE_STATS", true)
}.ToArray();
#endif
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application android:allowBackup="true" android:icon="@mipmap/appicon" android:supportsRtl="true"></application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>
<uses-sdk android:minSdkVersion="21" />
</manifest>
Я хотел бы получить такое приложение
1 ответ
В официальном документе об UsageStatsManager говорится:
ПРИМЕЧАНИЕ. Для большинства методов этого API требуется разрешение android.permission.PACKAGE_USAGE_STATS. Однако объявление разрешения подразумевает намерение использовать API, и пользователю устройства все равно необходимо предоставить разрешение через приложение «Настройки». См. Настройки.ACTION_USAGE_ACCESS_SETTINGS. Методы, которые возвращают информацию только для вызывающего пакета, не требуют этого разрешения.
Поэтому вам также необходимо разрешить пользователю предоставить разрешение на действие:
Microsoft.Maui.ApplicationModel.Platform.CurrentActivity.StartActivity(new Android.Content.Intent(Android.Provider.Settings.ActionUsageAccessSettings));
отправится вSettings.ACTION_USAGE_ACCESS_SETTINGS
активности, а затем пользователю необходимо найти приложение в списке и предоставить ему разрешение.
Затем вы можете использовать следующий код для получения статистики приложений:
var usm = Android.App.Application.Context.GetSystemService(Android.Content.Context.UsageStatsService) as Android.App.Usage.UsageStatsManager;
var list = usm.QueryUsageStats(Android.App.Usage.UsageStatsInterval.Daily, DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() - 1000*3600*24, DateTimeOffset.UtcNow.ToUnixTimeMilliseconds());
Вы можете проверить, предоставлено ли разрешение, проверив, что счетчик списка равен 0 или значение списка равно нулю или нет.