A atividade de lançamento da atividade de preferência causa a exceção de negação de permissão

StackOverflow https://stackoverflow.com/questions/2077436

Pergunta

Estou tendo um problema aqui. O que eu quero fazer é lançar uma atividade de dentro da preferenceatividade. Então, minha preferência.xml, que mantém o layout de preferência, é assim:

<Preference android:title="Launch Activity" >
   <intent android:action="org.momo.SOME_ACTIVITY" />
</Preference>

O manifesto está ciente da atividade que quero lançar.

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

Adivinha o quê, estou recebendo uma exceção de segurança (negação de permissão) quando quero lançá -la. Estou esquecendo de algo? Meu entendimento das intenções ainda está um pouco incompleto, mas imaginei que devo trabalhar dessa maneira.

Obrigado por qualquer ajuda!

Foi útil?

Solução

Fazer um filtro de intenção parece uma maneira um pouco indireta de fazer isso. Esta é uma abordagem mais simples:

<PreferenceScreen
    android:title="@string/settings.title" 
    android:summary="@string/settings.summary">
    <intent
        android:targetPackage="com.companyname.appname"
        android:targetClass="com.companyname.appname.classname"/>
</PreferenceScreen>

Outras dicas

Exemplo de trabalho totalmente em sua preferência.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>

Em seu 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>

No meu caso, todas as minhas configurações XML estavam corretas.

Mas a atividade que lancei (nomeada AppPreferences) Devido à má refraturação, existia em lugares: [package].AppPreferences e[ [package].commmon.PreferencesPor causa de um import common._, estava tomando isso como atividade e, é claro, não foi declarado no manifesto do Android. Eu só tive que excluir a segunda atividade do meu código e voilà!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top