0

Je la situation suivante: lorsque je lance mon application le scénario suivant se déroule:activité poignée Android lancement

  • Je commence l'activité StartActivity
  • Si je ne l'ai fait un login (je le sais basé Si vous avez déjà fait un login, je commence quand même LoginActivity, mais j'utilise des données (cryptées) sauvegardées dans les préférences partagées sans demander de nouvelles informations d'identification à l'utilisateur.
  • Lorsque la connexion à réussir je lance l'activité StartActivity

Maintenant, dans mon fichier manifest j'ai l'IntentFilter suivante pour MainActivity:

<intent-filter android:label="Conio" > 
    <action android:name="android.intent.action.VIEW" /> 
    <data android:scheme="myprotocol" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <category android:name="android.intent.category.BROWSABLE" /> 
</intent-filter> 

Et tout fonctionne bien avec un grand « mais »: tout fonctionne uniquement lorsque mon application est déjà ouverte: mon application est mise en avant, la méthode onCreate est appelée et avec getIntent.getData() je peux accéder à l'URI qui a démarré mon application.

LE GROS PROBLEME:

CE QUE JE BESOIN EST:

  • Lorsque mon application n'est pas déjà commencé tout devrait commencer à partir StartActivity selon l'explication précédente
    • Lorsque mon application est l'exécution du comportement doit être celle en cours

Pour ce faire, je fait la tentative suivante: J'ai postulé que IntentFilter à une nouvelle Activity, dans cette méthode onCreate d'activité que je mets le code suivant

Intent intent = getPackageManager().getLaunchIntentForPackage("my.package.name"); 
if (intent != null) { 
    intent.setData(intent.getData()); 
    intent.putExtra("test", "test"); 
    startActivity(intent); 
    finish(); 
} 

mais ce qui se passe ici est que lorsque l'application est ne fonctionne pas l'application démarre correctement à partir StartActivity, mais si si l'application est déjà en cours d'exécution, MainActivity est amené à l'avant, mais je ne peux pas accéder aux extras intention, en fait ce code ne fonctionne pas

@Override 
protected void onResume() { 
    super.onResume(); 
//this code returns null 
    String test=getIntent.getStringExtra("test"); 
} 

Comment puis-je faire tout cela pour travailler?

Répondre

0

si l'application est déjà en cours d'exécution, MainActivity est amené à l'avant, mais je ne peux pas accéder aux extras: intention

Pour obtenir intention lorsque l'activité est livrer en cours d'exécution, utilisez soit LocalBroadcastManager envoyer une nouvelle intention d'exécuter l'activité au lieu d'appeler startActivity méthode.

OU

Sans ajouter LocalBroadcastManagerFLAG_ACTIVITY_SINGLE_TOP en intention ou ajouter android:launchMode="singleTask" dans AndroidManifest.xml lors du démarrage MainActivity:

intent.setData(intent.getData()); 
intent.putExtra("test", "test"); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
startActivity(intent); 

et remplacer méthode onNewIntent dans MainActivity:

protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 
//get data from intent 
}