views:

175

answers:

2

I am writing a very small app that just opens the camera app ready for video. I am able to get my code to work on an Android 2.2 emulator, but it will not work on my device, Motorola Droid 1 stock 2.2 FRG22D. Any ideas where I went wrong on this code?

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();

It appears ThorstenW is correct. I would upvote your answer if I had enough rep. You can see from the logcat that com.android.camera could not be found and throws a fatal exception. Logcat below.

D/dalvikvm( 1159): GC_EXTERNAL_ALLOC freed 251 objects / 13456 bytes in 66ms I/ActivityManager( 1086): Starting activity: Intent { act=android.intent.action. MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.goatpen.Phobo s.QSVideo/.StartVid } I/ActivityManager( 1086): Start proc com.goatpen.Phobos.QSVideo for activity com .goatpen.Phobos.QSVideo/.StartVid: pid=483 uid=10092 gids={}

E/AndroidRuntime( 483): java.lang.RuntimeException: Unable to start activity Co mponentInfo{com.goatpen.Phobos.QSVideo/com.goatpen.Phobos.QSVideo.StartVid}: and roid.content.ActivityNotFoundException: Unable to find explicit activity class { com.android.camera/com.android.camera.VideoCamera}; have you declared this activ ity in your AndroidManifest.xml?

E/AndroidRuntime( 483): Caused by: android.content.ActivityNotFoundException: U nable to find explicit activity class {com.android.camera/com.android.camera.Vid eoCamera}; have you declared this activity in your AndroidManifest.xml?

A: 

Motorola has put their own camera app on the Droid, so the activity is a different one. On my Milestone (European version of Droid), the class is com.motorola.Camera.Camcorder.

This example shows you that you cannot rely on using the intent mechanism with fixed package and class name strings if there is no common intent action in Android SDK for a certain task - which is unfortunately the case for calling the video camera. The activity that you need to call for the video camera can and will be different on various phone types (potentially even among the same phone model if modified by the user).

You can however launch the default (still) camera app by sending an ordered broadcast with 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);
Thorstenvv
So there is no way to start the video camera from an intent? I just want to write a very small app to use as a shortcut for the video camera. Since the default is to open the process in still camera mode. Thanks for your help. I would upvote your answer if I had enough rep. P.S. I pasted the exceptions from the logcat above.
Phobos
+1  A: 

You will not believe how easy the solution was. First the motorola droid's camera app is com.google.android.camera. This is the standard android 2.2 package name. I used adb to pull the file from /data/system/packages.xml to confirm this.

Also there is an intent to open the camera app in video recorder mode. INTENT_ACTION_VIDEO_CAPTURE.

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

This is the intent to use to call the camera app in video mode.

Phobos
Great, I learned something new today. However, the intent as you wrote it does not resolve on a Motorola Milestone 2.1-update1. The correct way is to use the SDK constant MediaStore.ACTION_VIDEO_CAPTURE, which resolves to "android.media.action.VIDEO_CAPTURE".
Thorstenvv
Thanks for the clarification. I always try to answer my questions if I can. So far I am loving android. I haven't written any code since Pascal. Object Oriented Programming and intents are new to me. Thanks for the rep.
Phobos

related questions