2010-09-20 14 views
2

J'écris une très petite application qui ouvre juste l'application de la caméra prête pour la vidéo. Je suis en mesure d'obtenir mon code pour travailler sur un émulateur Android 2.2, mais il ne fonctionnera pas sur mon appareil, Motorola Droid 1 stock 2.2 FRG22D. Des idées où je me suis trompé sur ce code?Démarrage de la caméra vidéo avec l'intention

public class StartVid extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

final int VIDEO = 1; 

    Intent intent = new Intent(); 
    intent.setClassName("com.android.camera","com.android.camera.VideoCamera"); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivityForResult(intent, VIDEO); 
    finish(); 

Il semble que ThorstenW soit correct. Je voudrais upvote votre réponse si j'avais assez de rep. Vous pouvez voir à partir du logcat que com.android.camera n'a pas pu être trouvé et déclenche une exception fatale. Logcat ci-dessous. D/dalvikvm (1159): GC_EXTERNAL_ALLOC libéré 251 objets/13456 octets dans 66ms I/ActivityManager (1086): Début de l'activité: Intent {act = android.intent.action. MAIN cat = [android.intent.category.LAUNCHER] flg = 0x10200000 cmp = com.goatpen.Phobo s.QSVideo/.StartVid} I/ActivityManager (1086): lancez proc.goatpen.Phobos.QSVidéo pour l'activité com .goatpen.Phobos.QSVideo/.StartVid: pid = 483 uid = 10092 Gids = {}

E/AndroidRuntime (483): java.lang.RuntimeException: Impossible de démarrer l'activité Co mponentInfo {com. goatpen.Phobos.QSVideo/com.goatpen.Phobos.QSVideo.StartVid}: et roid.content.ActivityNotFoundException: Impossible de trouver la classe d'activité explicite { com.android.camera/com.android.camera.VideoCamera}; avez-vous déclaré cette activité dans votre AndroidManifest.xml?

E/AndroidRuntime (483): Causé par: android.content.ActivityNotFoundException: U nable pour trouver la classe explicite d'activité {com.android.camera/com.android.camera.Vid eoCamera}; avez-vous déclaré cette activité dans votre AndroidManifest.xml?

+0

peut vous coller l'logcat générée par votre motorola? – Cristian

Répondre

4

Vous ne croirez pas à quel point la solution était facile. Tout d'abord, l'application appareil photo de droïde motorola est com.google.android.camera. Ceci est le nom du paquet standard Android 2.2. J'ai utilisé adb pour extraire le fichier de /data/system/packages.xml pour le confirmer.

Il existe également une intention d'ouvrir l'application de la caméra en mode enregistreur vidéo. INTENT_ACTION_VIDEO_CAPTURE.

Intent intent = new Intent("android.media.action.VIDEO_CAMERA"); 

Ceci est l'intention d'utiliser pour appeler l'application de caméra en mode vidéo.

+3

Super, j'ai appris quelque chose de nouveau aujourd'hui. Cependant, l'intention que vous avez écrite ne se résout pas sur un Motorola Milestone 2.1-update1. La méthode correcte consiste à utiliser la constante SDK MediaStore.ACTION_VIDEO_CAPTURE, qui se résout à "android.media.action.VIDEO_CAPTURE". – Thorstenvv

+0

Merci pour la clarification. J'essaie toujours de répondre à mes questions si je le peux. Jusqu'à présent, j'aime Android. Je n'ai pas écrit de code depuis Pascal. La programmation orientée objet et les intentions sont nouvelles pour moi. Merci pour le représentant. – Phobos

2

Motorola a mis sa propre application de caméra sur le Droid, donc l'activité est différente. Sur mon Milestone (version européenne de Droid), la classe est com.motorola.Camera.Camcorder. Cet exemple montre que vous ne pouvez pas utiliser le mécanisme d'intention avec des chaînes fixes de nom de package et de classe s'il n'y a pas d'action commune dans Android SDK pour une certaine tâche - ce qui est malheureusement le cas pour l'appel de la caméra vidéo. L'activité que vous devez appeler pour la caméra vidéo peut et sera différente sur différents types de téléphone (potentiellement même parmi le même modèle de téléphone si modifié par l'utilisateur).

Vous pouvez cependant lancer l'application de caméra par défaut (fixe) en envoyant une diffusion ordonnée avec ACTION_CAMERA_BUTTON.

    i = new Intent(); 
        i.setFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION); 
        i.setAction(Intent.ACTION_CAMERA_BUTTON); 
        i.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_CAMERA)); 
        sendOrderedBroadcast(i, null); 
+0

Donc, il n'y a aucun moyen de démarrer la caméra vidéo d'une intention? Je veux juste écrire une très petite application à utiliser comme raccourci pour la caméra vidéo. Depuis la valeur par défaut est d'ouvrir le processus en mode caméra fixe. Merci de votre aide. Je voudrais upvote votre réponse si j'avais assez de rep. P.S. J'ai collé les exceptions du logcat ci-dessus. – Phobos

3

en tant que Thorstenvv points out; évitez de démarrer Intents avec des noms de composants explicites, à moins qu'ils ne se trouvent dans votre application. Cela pourrait casser votre application dans différentes versions d'Android.

plutôt utiliser le methods that appear in the docs.

Pour démarrer l'appareil photo pour les vidéos uniquement:

static final int REQUEST_VIDEO_CAPTURE = 1; 

private void dispatchTakeVideoIntent() { 
    Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
    if (takeVideoIntent.resolveActivity(getPackageManager()) != null) { 
     startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE); 
    } 
} 

Lire le résultat sur votre activité onActivityResult:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) { 
     Uri videoUri = intent.getData(); 
     mVideoView.setVideoURI(videoUri); 
    } 
}