Запуск действия из предпочтения вызывает исключение отказа в разрешении
-
21-09-2019 - |
Вопрос
У меня тут небольшая проблема.Что я хочу сделать, так это запустить Activity из PreferenceActivity.Итак, мой preference.xml, который содержит макет предпочтений, выглядит следующим образом:
<Preference android:title="Launch Activity" >
<intent android:action="org.momo.SOME_ACTIVITY" />
</Preference>
Манифест знает о действии, которое я хочу запустить..
<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>
угадайте что, я получаю исключение безопасности (Отказ в разрешении), когда я хочу его запустить.Я что-то упускаю?Мое понимание намерений все еще немного неполное, но я полагал, что это должен работайте таким образом.
Спасибо вам за любую помощь!
Решение
Создание фильтра намерений кажется немного окольным способом.Это более простой подход:
<PreferenceScreen
android:title="@string/settings.title"
android:summary="@string/settings.summary">
<intent
android:targetPackage="com.companyname.appname"
android:targetClass="com.companyname.appname.classname"/>
</PreferenceScreen>
Другие советы
Полностью рабочий пример В вашем 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>
В вашем 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>
В моем случае все настройки xml были правильными.
Но деятельность, которую я запустил (названную AppPreferences
) из-за плохого огнеупора в местах: [package].AppPreferences
и[ [package].commmon.Preferences
Из-за import common._
, он воспринимал это как действие и, конечно же, не был объявлен в манифесте Android.Мне просто нужно было удалить второе действие из моего кода и вуаля!