如何解决“设置 > 连接设备 > 连接首选项”页面的意图
我想知道 AdvancedConnectedDeviceDashboardFragment
的 Intent
。在 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 举报,一经查实,本站将立刻删除。