7

Android Lollipop 以降、アプリの使用統計にアクセスするための API が用意されました。ただし、アプリにはユーザーがこれらのアクセス許可を付与する必要があります。

Settings.ACTION_USAGE_ACCESS_SETTINGS を使用してユーザーをこれらの設定にリダイレクトすることを知っています。

さて、私の質問は、ユーザーが設定へのリダイレクトを停止できるように、ユーザーがこれらのアクセス許可を付与したことをどのように知ることができるかということです。

ありがとう!

4

4 に答える 4

7

毎日の間隔と終了時刻を現在の時刻で使用状況統計を照会するだけで、何も返されない場合、これはユーザーが権限を付与されていないことを意味します

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public boolean doIHavePermission(){


    final UsageStatsManager usageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
    final List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, 0,  System.currentTimeMillis());

    return !queryUsageStats.isEmpty();
}

開始日が 0 で終了日が現在の時刻である毎日の間隔は、少なくとも今日の使用状況を返す必要があります。したがって、アクセス許可が付与されていない場合にのみ空になります。

于 2014-12-06T18:46:16.123 に答える
2

私は同じ問題に遭遇しました。Samsung S5 Lollipop の使用統計は、次のコードでは機能しませんでした:

Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

ただし、使用統計は実際に存在します。次のコードを使用すると、セキュリティ設定を開くことができます。

Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS);
intent.setComponent(new ComponentName("com.android.settings","com.android.settings.Settings$SecuritySettingsActivity"));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

一番下までスクロールすると、使用統計があります。また、ログを調べ、使用統計を押すと、UsageStats フラグメントを含む SubActivity に移動します。次のコードを試しました:

Intent intent = new Intent();
intent.setComponent(new ComponentName("com.android.settings", "com.android.settings.SubSettings"));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

しかし、セキュリティ例外が発生しました。問題は、SubActivity を export としてマークしなかったことです。私が知る限り、SubActivity を直接開始することはできません (使用統計ウィンドウ) 唯一の解決策は、ユーザーを Secury 設定に連れて行くことです。ユーザーは手動で使用統計ビューに移動してアプリを有効にするように指示されます。

誰かがより良い解決策を見つけたら、それは素晴らしいことです!

于 2015-04-19T15:53:46.113 に答える
1

android.settings.USAGE_ACCESS_SETTINGS インテントを使用してアクティビティを起動しようとすると、Lollipop で ActivityNotFoundException を参照してください 。メソッドでは、時間間隔の単純な統計がないかどうかを識別できないためです。

于 2015-02-19T15:37:46.373 に答える