簡體   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