ユーザーの電話で現在実行中のアプリに関する情報を取得するには、アプリに使用アクセス許可が必要です。次のリンクの助けを借りて、次のコードを使用して正常に実装できます。
これが私の作業コードです
public void showDialog()
{
if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.Lollipop) {
@SuppressWarnings("WrongConstant")
UsageStatsManager usm = (UsageStatsManager) getSystemService("usagestats");
long time = System.currentTimeMillis();
List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY,
time - 1000 * 1000, time);
if (appList.size()==0)
{
AlertDialog alertDialog = new AlertDialog.Builder(this)
.setTitle("Usage Access")
.setMessage("App will not run without usage access permissions.")
.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
@TargetApi(Build.VERSION_CODES.Lollipop)
public void onClick(DialogInterface dialog, int which) {
// continue with delete
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
// intent.setComponent(new ComponentName("com.Android.settings","com.Android.settings.Settings$SecuritySettingsActivity"));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(intent,0);
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// do nothing
dialog.dismiss();
}
})
.setIcon(Android.R.drawable.ic_dialog_alert)
.create();
alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
alertDialog.show();
} else {
Intent intent = new Intent(this, PackageService.class);
startService(intent);
finish();
}
}else
{
Intent intent = new Intent(this, PackageService.class);
startService(intent);
finish();
}
}
このコードは、ユーザーに使用状況アクセス許可が必要であることを示す警告ダイアログを表示し、有効にすることができる設定画面にユーザーを連れて行きます。
これですべてが完璧に動作します。私が欲しいのはそれだけですデフォルトでユーザーにダイアログを表示せずに、ユーザーにそれを有効にするまで、アクセス許可を付与する方法手動でオフにしますか?
このアクセス許可エラーのみを無視して、マニフェストにこのアクセス許可を与えることができます:
<uses-permission Android:name="Android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions"/>
許可のために以下のコードを使用するより
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!isAccessGranted()) {
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
startActivity(intent);
}
}
private boolean isAccessGranted() {
try {
PackageManager packageManager = getPackageManager();
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(getPackageName(), 0);
AppOpsManager appOpsManager = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
int mode = 0;
if (Android.os.Build.VERSION.SDK_INT > Android.os.Build.VERSION_CODES.KitKat) {
mode = appOpsManager.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS,
applicationInfo.uid, applicationInfo.packageName);
}
return (mode == AppOpsManager.MODE_ALLOWED);
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}