【发布时间】:2016-07-31 17:28:37
【问题描述】:
我的应用需要使用访问权限才能获取用户手机上当前正在运行的应用的信息。在以下链接的帮助下,我能够使用以下代码成功实现它。
这是我的工作代码
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();
}
}
此代码将向用户显示需要使用访问权限的警报对话框,并将用户带到可以启用它的设置屏幕。
一切都与此完美配合。我唯一想要的是如何在不向用户显示任何对话框的情况下默认授予我的应用使用访问权限,直到他/她没有手动关闭它?
【问题讨论】:
-
请问您找到解决方案了吗?
-
@vivek,一旦打开,你是如何检测到用户手机中正在打开的当前应用程序..?我的意思是 PackageService 详细信息
-
@Anukoolsrivastav 你能描述更多你想问的问题吗?
-
@VivekMishra 我想编写一个服务,该服务将检测手机中任何其他应用程序何时打开/前台。
-
PackageService.class 是什么?
标签: android android-security usagestatsmanager