简体   繁体   中英

Intent for “Settings > Connected Devices > Connection Preferences” page

I'd like to know the Intent for the AdvancedConnectedDeviceDashboardFragment . On API 28 this page can be reached through: Settings > Connected Devices > Connection Preferences .

This fragment contains all the advanced connection preferences(ie, Bluetooth, NFC, USB..)

The logcat of the manual interaction:

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

Launching it through SubSettings doesn't work:

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

Because it is not set exported="true" it gives me:

.SecurityException: Permission Denial: starting Intent { cmp=com.android.settings/.SubSettings (has extras) } from ProcessRecord{75bbdbc 11970:com.acme.application.debug/u0a460} (pid=11970, uid=10460) not exported from uid 1000

Is there a chance to start it through the parent SettingsActivity with Intent extras?

While browsing com.android.settings.Settings I've found the name of the SettingsActivity :

ConnectedDeviceDashboardActivity extends SettingsActivity
AdvancedConnectedDeviceActivity extends SettingsActivity

And so I've wrote a simple wrapper method, which still 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);
}

It can be used alike this:

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

See Settings.java for further SettingsActivity names to use.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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