微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

“设置 > 连接设备 > 连接首选项”页面的意图

如何解决“设置 > 连接设备 > 连接首选项”页面的意图

我想知道 AdvancedConnectedDeviceDashboardFragmentIntent。在 API 28 上,可以通过以下方式访问此页面Settings > Connected Devices > Connection Preferences

此片段包含所有高级连接首选项(即蓝牙、NFC、USB ..)

手动交互的logcat:

D/SettingsActivity: Switching to fragment com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment
D/SubSettings: Launching fragment com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment

通过 SubSettings 启动它不起作用:

try {
    Intent intent = new Intent();
    intent.setClassName("com.android.settings","com.android.settings.SubSettings");
    getActivity().startActivity(intent);
} catch (ActivityNotFoundException e) {
    Log.e(LOG_TAG,e.getMessage());
}

因为它没有设置 exported="true" 它给了我:

.SecurityException:权限拒绝:从 ProcessRecord{75bbdbc 11970:com.acme.application.debug/u0a460} 开始 Intent { cmp=com.android.settings/.SubSettings (has extras) } (pid=11970,uid= 10460) 未从 uid 1000 导出

是否有机会通过带有 SettingsActivity 附加项的父 Intent 启动它?

解决方法

在浏览 com.android.settings.Settings 时,我找到了 SettingsActivity 的名字:

ConnectedDeviceDashboardActivity extends SettingsActivity
AdvancedConnectedDeviceActivity extends SettingsActivity

所以我写了一个简单的包装方法,它仍然throws

public void showSettings(@NonNull String activityName) throws ActivityNotFoundException {
    Intent intent = new Intent();
    intent.setClassName("com.android.settings","com.android.settings.Settings$" + activityName);
    getActivity().startActivity(intent);
}

可以这样使用:

try {
    showSettings("AdvancedConnectedDeviceActivity");
} catch (ActivityNotFoundException e) {
    Log.e(LOG_TAG,e.getMessage());
}

请参阅 Settings.java 以了解更多要使用的 SettingsActivity 名称。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。