Android 5三星设备的Android使用访问

40

你可能知道,自从 Android 5 推出以来,访问设备的最近任务(使用统计信息)需要用户手动启用此功能(设置->安全性->使用情况访问)。

我的应用程序会检查设备是否使用 Android 5,如果是,则为用户提供打开设置屏幕以启用使用访问的可能性:

Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
                    startActivityForResult(intent, 12345);

在Samsung设备上运行Android 5时,当我执行上面显示的代码行时,出现了以下错误:

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)

看起来并没有实现Settings.ACTION_USAGE_ACCESS_SETTINGS操作,这很奇怪,因为如果您进入设置,启用应用程序访问此使用情况统计信息的选项就在那里...

有没有想法如何针对这个特定情况解决这个问题?


我认为你应该使用 intent.resolveActivity(context.getPackageManager()) != null。 - Pauland
我有同样的问题 - 你手头上有三星设备吗?如果有,你能否提供带启动Intent的LogCat日志吗(它看起来类似于这个:I/ActivityManager(18815): START u0 {act=android.intent.action.MAIN cmp=com.android.settings/.SubSettings (has extras)} from pid 12226 D/audio_hw_primary(18477): select_devices: out_snd_device(2: speaker) in_snd_device(0: ) D/SubSettings(12226): Launching fragment com.android.settings.OwnerInfoSettings),这样可以创建一个打开精确页面的Intent。 - Force
@Force,这是在运行Android 5.0 G900IZTU1BOA1固件的三星Galaxy S5 SM-G900I上的日志:I/ActivityManager: START u0 {act=android.intent.action.MAIN cmp=com.android.settings/.SubSettings (has extras)} from uid 1000 on display 0 D/SubSettings: Launching fragment com.android.settings.UsageAccessSettings D/SettingsPreferenceFragment: intent.hasExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT : true D/SettingsPreferenceFragment: fragmentName : com.android.settings.UsageAccessSettings I/ActivityManager: Displayed com.android.settings/.SubSettings: +145ms - Sam
@Force,我尝试使用片段注入,但是出现了一个错误,指出“com.android.settings/.SubSettings”未被导出。 - Sam
显示剩余5条评论
1个回答

1
抱歉回复晚了,希望你已经找到了好的解决方案。如果没有或其他人也遇到了这个问题,这个bug似乎存在于一些三星手机型号中。为了避免你的应用程序崩溃,你可以检查一下你的意图是否能够被处理。
PackageManager packageManager = getActivity().getPackageManager();

if (intent.resolveActivity(packageManager) != null) {
    startActivity(intent);
} else {
    Toast.makeText(getBaseContext(), "Please open settings, your model can't be forced 
                          to open it", Toast.LENGTH_LONG).show();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接