【问题标题】:ActivityNotFoundException in Lollipop when trying to launch activity with intent android.settings.USAGE_ACCESS_SETTINGS尝试使用意图启动活动时,棒棒糖中的 ActivityNotFoundException android.settings.USAGE_ACCESS_SETTINGS
【发布时间】:2015-04-06 08:25:16
【问题描述】:

我正在尝试使用this 权限获得访问应用使用数据的权限。这仅针对 Lollipop 进行,当我以此意图 (android.settings.USAGE_ACCESS_SETTINGS) 开始活动时,应用程序崩溃(下面的堆栈跟踪)

观察到另一位开发人员在 LG G3 手机中注意到了这个问题 - thread here。从用户日志中,我主要看到这发生在 LG G3 上,也曾在三星 S5 上发生过。

为 LG 和三星 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>

我没有真正的带有 Lollipop 的 LG 设备(甚至是三星 S3)来测试。我只在使用 Android 5.0 (API21) 的 Genymotion 模拟器中进行测试,它运行良好。

【问题讨论】:

  • 请粘贴您的清单。
  • 刚刚添加了清单文件。我已经删除了应用程序选项卡下的活动和接收器 - 其余的都在那里。
  • 我确实添加了以下权限:“
  • 伙计们,在 LG 和三星提供的 Android 5 版本中,整个库似乎丢失或隐藏。碎片化万岁。它在 Moto X build of 5 和 Nexus 设备上运行良好。

标签: android android-5.0-lollipop usage-statistics activitynotfoundexception


【解决方案1】:

是否有人知道如何收听该设置中的更改,代码类似于或类似

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_USAG‌​E_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; 
            } 
        });

【讨论】:

  • @SunilChaudhary,使用统计仅在 Lollipop (21) 中引入。
【解决方案2】:

我在 google nexus 5.0 和模拟器上检查了相同的代码,它工作正常。它没有显示任何错误。Intent 工作正常,并且应用程序使用访问活动也启动了,尽管它没有在此列出任何应用程序。

在设置-->安全-->应用使用--首先检查你的设备列表中的所有应用。

试试下面的代码,看看你的应用是否开启了使用访问权限

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

【讨论】:

    【解决方案3】:

    您需要像这样将活动添加到清单 xml 中

    (申请中)

    <activity
           android:name="com.yournamespace.yourclassname"
           android:label="@string/app_name" >           
    </activity>
    

    【讨论】:

    • 我的活动和接收者已经添加到应用程序标签下。出于隐私原因,我没有在这里展示(正如我在问题中提到的那样)。
    • 无论如何,必须在里面,而不是下面,
    猜你喜欢
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 2016-10-09
    • 1970-01-01
    • 2015-06-22
    相关资源
    最近更新 更多