Lancio di attività da Preferenze di attività provoca Permission Denial Eccezione
-
21-09-2019 - |
Domanda
Sto avendo un po 'di un problema qui. Quello che voglio fare è avviare un'attività all'interno del PreferenceActivity. Quindi il mio preference.xml che detiene il layout preferenza è simile al seguente:
<Preference android:title="Launch Activity" >
<intent android:action="org.momo.SOME_ACTIVITY" />
</Preference>
Il manifesto è a conoscenza delle attività che voglio lanciare ..
<activity android:label="@string/app_name" android:name="SomeActivity">
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<action android:name="org.momo.SOME_ACTIVITY" />
</intent-filter>
</activity>
indovinate un po ', sto diventando un'eccezione di sicurezza (Permission Denial) quando voglio lanciarlo. Mi sto perdendo qualcosa? La mia comprensione di intenti è ancora un po 'incompleta, ma ho pensato che deve lavorare in questo modo.
Grazie per tutto l'aiuto!
Soluzione
Fare una intent-filtro sembra un modo un po 'rotonda di fare questo. Si tratta di un approccio più semplice:
<PreferenceScreen
android:title="@string/settings.title"
android:summary="@string/settings.summary">
<intent
android:targetPackage="com.companyname.appname"
android:targetClass="com.companyname.appname.classname"/>
</PreferenceScreen>
Altri suggerimenti
Completamente lavorare esempio Nel vostro preference.xml
<Preference
android:title="@string/settings_title_notification_silent_mode"
android:summary="@string/settings_title_notification_silent_mode_summary">
<intent
android:action="com.activity.SilentModeList"/> <!-- SilentModeList its activity -->
</Preference>
Nel vostro manifest.xml
<activity android:name="com.activity.SilentModeList"
android:label="@string/ac_settings_description">
<intent-filter>
<action android:name="com.activity.SilentModeList" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Ho il mio caso tutte le mie impostazioni xml erano corrette.
Ma l'attività ho lanciato (chiamato AppPreferences
) a causa di cattiva refractoring esisteva in luoghi: [package].AppPreferences
e [[package].commmon.Preferences
A causa di un import common._
, si stava prendendo questo come l'attività e, naturalmente, non era stato dichiarato nel manifesto di Android.
Ho dovuto cancellare la seconda attività dal mio codice e voilà!