0

Je travaille sur une application qui a 2 saveurs, gratuite et professionnelle. Le libre semble fonctionner très bien mais lorsque je tente de passer des paramètres d'activité de préférence aux noms d'activité Il apparaît cette erreur:Erreur: java.lang.SecurityException: Permission Denial: début Intention avec une autre saveur

-12 00:41:49.473 18533-18533/com.albertoha94.apps.DuelHelperReloaded.Pro E/AndroidRuntime? FATAL EXCEPTION: main 
Process: com.albertoha94.apps.DuelHelperReloaded.Pro, PID: 18533 
java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.VIEW cmp=com.albertoha94.apps.DuelHelperReloaded/.NameList } from ProcessRecord{9f48ed8 18533:com.albertoha94.apps.DuelHelperReloaded.Pro/u0a59} (pid=18533, uid=10059) not exported from uid 10060 
     at android.os.Parcel.readException(Parcel.java:1599) 
     at android.os.Parcel.readException(Parcel.java:1552) 
     at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2611) 
     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1502) 
     at android.app.Activity.startActivityForResult(Activity.java:3825) 
     at android.app.Activity.startActivityForResult(Activity.java:3785) 
     at android.app.Activity.startActivity(Activity.java:4100) 
     at android.app.Activity.startActivity(Activity.java:4068) 
     at android.preference.Preference.performClick(Preference.java:1012) 
     at android.preference.PreferenceScreen.onItemClick(PreferenceScreen.java:214) 
     at android.widget.AdapterView.performItemClick(AdapterView.java:309) 
     at android.widget.AbsListView.performItemClick(AbsListView.java:1156) 
     at android.widget.AbsListView$PerformClick.run(AbsListView.java:3071) 
     at android.widget.AbsListView$3.run(AbsListView.java:3899) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:148) 
     at android.app.ActivityThread.main(ActivityThread.java:5401) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:725) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:615) 

La structure de mon module est quelque chose comme ceci:

src 
    -debug 
     -java->package->Namelist 
    -main 
     -java->package->SettingsDuel 
         NameListStructure(A class that extends arrayAdapter, i use it to show the list in a format i want) 
    -pro 
     -layout->mainscreen(used in Dhmain) 
    -prodebug 
     -java->...DHMain 
    -prorelease 
     -java->...DHMain 
    -release 
     -java->...NameList 

N'a pas montré la structure de la version gratuite car je ne pense pas que c'est nécessaire, son fonctionnement bien. NameList est à la fois dans le débogage en version, ils ont tous les deux des modifications mineures et j'ai créé ce répertoire, donc je n'ai pas besoin d'en avoir une copie dans les répertoires libres/pro. DHMain change en fonction de son free/pro et du débogage/de la version.

SettingsDuel est en mode principal uniquement et ne change jamais.

-je accéder au NameList d'activité par SettingsDuel cette façon:

<Preference 
     android:enabled="true" 
     android:title="@string/Names"> 
     <intent 
      android:action="android.intent.action.VIEW" 
      android:targetPackage="com.albertoha94.apps.DuelHelperReloaded" 
      android:targetClass="com.albertoha94.apps.DuelHelperReloaded.NameList"/> 
    </Preference> 

Ceci est dans un fichier xml dans le répertoire principal, il ne change jamais. C'est aussi le seul moyen d'accéder à l'activité NameList.

Et enfin, les changements AppID selon le goût de l'application (je pense que cela pourrait être la cause du problème, car la version gratuite ne marche pas changer son identifiant et il fonctionne très bien):

gratuit:

applicationId 'com.albertoha94.apps.DuelHelperReloaded' 

pro:

applicationId 'com.albertoha94.apps.DuelHelperReloaded.Pro' 

J'ai essayé ce qui suit:

-Ajouter android: exporté = "true" dans la classe SettingsDuel.

-Ajouter android: exporté = "true" dans la classe NameList.

-Ajouter android: exported = "true" dans la classe Les deux classes.

-Ajouter la NameList classe aux packages pro (et de prodebug proRelease)

-Nettoyage du projet.

-Projet Reebuild.

À ce stade, je ne sais pas quoi d'autre à essayer.

EDIT:

Après avoir fait ce que Minhtdh dit dans sa réponse, il a travaillé en quelque sorte. L'activité NameList ne fonctionne que si j'ai la version gratuite installée.

Si je tente d'accéder NameList d'activité avec la version pro seulement elle montre cette erreur:

android.content.ActivityNotFoundException: Unable to find explicit activity class {com.albertoha94.apps.DuelHelperReloaded/com.albertoha94.apps.DuelHelperReloaded.NameList}; have you declared this activity in your AndroidManifest.xml? 
     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1782) 
     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1507) 
     at android.app.Activity.startActivityForResult(Activity.java:3825) 
     at android.app.Activity.startActivityForResult(Activity.java:3785) 
     at android.app.Activity.startActivity(Activity.java:4100) 
     at android.app.Activity.startActivity(Activity.java:4068) 
     at android.preference.Preference.performClick(Preference.java:1012) 
     at android.preference.PreferenceScreen.onItemClick(PreferenceScreen.java:214) 
     at android.widget.AdapterView.performItemClick(AdapterView.java:309) 
     at android.widget.AbsListView.performItemClick(AbsListView.java:1156) 
     at android.widget.AbsListView$PerformClick.run(AbsListView.java:3071) 
     at android.widget.AbsListView$3.run(AbsListView.java:3899) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:148) 
     at android.app.ActivityThread.main(ActivityThread.java:5401) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:725) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:615) 

Il dit qu'il ne peut pas trouver le NameList d'activité, même si bien que je l'ai dans le manifeste (le manifeste est en le répertoire principal):

 <activity 
     android:name=".NameList" 
     android:label="@string/Names" 
     android:exported="true"> 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="com.albertoha94.apps.DuelHelperReloaded.SettingsDuel" /> 
    </activity> 

Répondre

1

Je pense que votre problème est: votre version pro essaie de démarrer un service en version gratuite.
Et à partir de votre description, je suppose que vous ne reconstruire que la version pro, non?
Si ce vrai, vous devriez essayer ceci:

  • Ajouter android: exporté = "true" dans la classe NameList. Ensuite, reconstruisez et installez version gratuite.
  • Ensuite, exécutez et testez avec la version pro.

Espérons que cela fonctionne.
Mise à jour
Votre identifiant libre app version est com.albertoha94.apps.DuelHelperReloaded
et la version pro est com.albertoha94.apps.DuelHelperReloaded.Pro
En raison de l'intention de SettingsDuel préférence:

<intent 
     android:action="android.intent.action.VIEW" 
     android:targetPackage="com.albertoha94.apps.DuelHelperReloaded" 
     android:targetClass="com.albertoha94.apps.DuelHelperReloaded.NameList"/> 

Cette intention tentera d'ouvrir l'activité de l'application gratuite (le nom de la classe et l'action sont les mêmes dans les deux applications, mais le targetPackage intention de ne pas ouvrir la version gratuite)
-> Donc, quand ouvert de l'application pro, vous aurez une erreur de permission (due processus différent) ou activitynotfound si ne pas installer l'application gratuite.

Si vous voulez ouvrir l'activité de la version pro, il suffit d'utiliser différents targetPackage pour chaque application. (Pour la version pro utilisation android:targetPackage="com.albertoha94.apps.DuelHelperReloaded.Pro")

+0

Oui, je reconstruisait la version pro. Cela semble fonctionner jusqu'à présent! : D Pouvez-vous m'expliquer ce qui s'est passé exactement? Pourquoi l'application a-t-elle soudainement "la permission" et ai-je besoin des deux applications sur le téléphone pour fonctionner? –

+0

Vérifiez mon édition pls. –

+0

@BetunHerreraAlanis, j'ai mis à jour la réponse, s'il vous plaît vérifier si cela peut aider. – Minhtdh