我正在尝试使用this权限获取访问应用使用情况数据的权限。这只是为Lollipop做的,当我用这个意图开始活动时(android.settings.USAGE_ACCESS_SETTINGS),应用程序崩溃(下面的堆栈跟踪)
观察到另一位开发人员在LG G3手机中发现了这个问题 - thread here。从用户日志来看,我大多看到这种情况发生在LG G3上,一次发生在三星S5上。
启动LG& amp;窗口的正确意图是什么?三星S3手机获取应用程序使用数据?
如果此“使用使用数据的应用”权限选项存在
,是否有人拥有这些手机中的任何一种并且可以提供建议android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.settings.USAGE_ACCESS_SETTINGS }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1801)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1499)
at android.app.Activity.startActivityForResult(Activity.java:3913)
at android.app.Activity.startActivityForResult(Activity.java:3860)
at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivi ty.java:849)
at android.support.v4.app.Fragment.startActivity(Fragment.java:880)
at com.mavdev.focusoutfacebook.fragments.addablock.apps.Fragment_appsselect_addbloc k$2.onClick(Fragment_appsselect_addblock.java:182)
at android.view.View.performClick(View.java:5162)
at android.view.View$PerformClick.run(View.java:20873)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5834)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
这是我的清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="hidden"
android:installLocation="internalOnly"
android:versionCode="50"
android:versionName="2.0.5" >
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" />
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<application
android:allowBackup="true"
android:allowClearUserData="true"
android:hardwareAccelerated="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:theme="@style/MyActionBarTheme"
android:vmSafeMode="true" >
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
</application>
</manifest>
我没有一个真正的LG设备(甚至三星S3)上面有Lollipop进行测试。我只在使用Android 5.0(API21)的Genymotion仿真器中进行测试,它运行正常。
答案 0 :(得分:2)
有人知道如何倾听更改该设置,代码与
类似或相似Context context = configuration.getContext();
ContentResolver resolver = context.getContentResolver();
resolver.registerContentObserver(Settings.System.CONTENT_URI, true, observer = new TimeoutSettingContentObserver(context, new Handler()));
以下是代码:
PackageManager packageManager = getPackageManager();
final ApplicationInfo applicationInfo = packageManager.getApplicationInfo(getPackageName(), 0);
appOpsManager = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
appOpsManager.startWatchingMode(AppOpsManager.OPSTR_GET_USAGE_STATS,
applicationInfo.packageName,
new AppOpsManager.OnOpChangedListener(){
@Override public void onOpChanged(String op, String packageName) {
int mode = appOpsManager.checkOpNoThrow(op, applicationInfo.uid, packageName);
boolean enabled = mode == AppOpsManager.MODE_ALLOWED;
}
});
答案 1 :(得分:0)
我在谷歌nexus 5.0和模拟器上检查了相同的代码,它工作正常。它没有显示任何错误。内容工作正常,虽然它没有列出任何应用程序,但也启动了应用程序使用访问行为。
在设置下 - &gt;安全性 - &gt; APPS使用 - 首先检查您的设备列表是否有任何应用。
尝试以下代码并检查您的应用程序是否具有使用启用功能
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
startActivity(intent);
try {
PackageManager packageManager = context.getPackageManager();
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(context.getPackageName(), 0);
AppOpsManager appOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
int mode = appOpsManager.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, applicationInfo.uid, applicationInfo.packageName);
return (mode == AppOpsManager.MODE_ALLOWED);
} catch (PackageManager.NameNotFoundException e) {
return false;
}
您也可以参考此链接this link
答案 2 :(得分:-5)
你需要添加活动来清除那个
的xml(正在申请中)
<activity
android:name="com.yournamespace.yourclassname"
android:label="@string/app_name" >
</activity>