繁体   English   中英

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

[英]Intent for “Settings > Connected Devices > Connection Preferences” page

我想知道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.1060/u0a460} 开始 Intent { cmp=com.android.settings/.SubSettings(有附加功能)}从 uid 1000 导出

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

在浏览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());
}

有关要使用的更多SettingsActivity名称,请参阅Settings.java

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM