2010-03-12 14 views
2

J'ai Activité A qui lance l'intention de la caméra via:Comment puis-je recevoir des données CameraActivities dans une activité DIFFÉRENTE (c'est-à-dire pas dans le lancement)?

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(intent, REQUEST_CAMERA); 

Une fois la photo prise, je peux facilement saisir l'image dans:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 

Mais je voudrais recevoir le résultat de l'activité B dans laquelle l'image peut être éditée. En ce moment, je reçois le résultat dans l'activité A et le passer sur à l'activité B qui aboutit à montrer l'interface graphique de l'activité A pendant une courte période:

Intent i = new Intent().setAction("DisplayJPEG"); 
i.setClass(this, EditImageActivity.class); 
i.putExtra("IMAGE_URI", uri); 
startActivityForResult(i, REQUEST_EDIT_IMAGE); 

Bien sûr, je aurai besoin le résultat de l'activité B dans l'activité A après l'édition de l'image. Mais cela ne devrait travailler avec:

setResult(resultCode, data); 

Donc, il doit y avoir un moyen de faire ce que je dois. S'il vous plaît pointez-moi dans la bonne direction.

Répondre

2

Avez-vous essayé de lancer ActivityB, et dans l'événement ActivityB onCreate, lancez Camera Intent?

+0

non, je n'ai pas encore essayé. On dirait une solution laide. Mais ce que j'ai appris de vous, cela semble être la seule solution. Je n'ai jamais vu cela venir ... Merci les gars – stfn

+0

Cela semble être la voie à suivre si vous contrôlez l'activité B. Faites-vous l'intention de commencer l'activité B, puis obtenez l'activité B pour ouvrir la caméra, traiter l'image et l'envoyer retour à l'activité A en conséquence. – Janusz

+0

Ceci est similaire dans d'autres langues pour lancer ShowModal dans un constructeur. J'espère que cela t'aides. Je l'utilise fréquemment. – Pentium10

1

Techniquement, vous ne pouvez pas faire ce que vous demandez. Vous devrez trouver un moyen de continuer à le faire passer comme vous l'êtes et à cacher l'interface utilisateur ou à faire ce que Pentium dit et à faire l'inverse.

1

Editer: Nevermind, j'ai mal lu comment cela fonctionne. En réalité, vous pouvez utiliser l'activité A pour démarrer l'activité B pour le résultat, mais si l'activité B doit démarrer l'activité C pour continuer le traitement de l'activité A souhaitée, vous pouvez utiliser FLAG_ACTIVITY_FORWARD_RESULT pour que l'activité C renvoie son résultat à l'activité A et non B .


Je ne l'ai pas regardé dans ce plus d'un rapide coup d'œil, mais je remarque un drapeau intention appelé FLAG_ACTIVITY_FORWARD_RESULT qui, selon la documentation:

If set and this intent is being used to launch a new activity from an existing one, then the reply target of the existing activity will be transfered to the new activity. This way the new activity can call setResult(int) and have that result sent back to the reply target of the original activity.

Comme je l'ai dit, je havre de paix 't expérimenté avec cela, mais cela semble suggérer que vous pourrait lancer l'intention de votre caméra à partir de l'activité A mais l'envoyer à l'activité B.

+0

Je ne pense pas que cela fonctionnera puisque vous ne pouvez pas influencer l'intention créée par l'application de la caméra intégrée. – stfn

+0

Oui, c'est ce que je voulais dire par l'édition de mon commentaire - j'ai réalisé que ça ne marcherait pas. –