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

问题描述

我想知道 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 名称。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...