2014-01-02 4 views
0

Я работаю с Android проекта, представленного в разделе Образцы проявителя Android сайта (в частности, это MediaRecorder samplejava.lang.RuntimeException:. Невозможно создать экземпляр путь активности ComponentInfo Java сборки

Я downloded файл и импортировать его в Eclipse.
процесс импорта, казалось, осуществляется должным образом, и я запустил приложение на затмение эмулятора.
я получаю это сообщение «к сожалению, MediaRecorder остановился».

Эти ошибки в catlog:

01-01 07:22:33.336: I/Process(1423): Sending signal. PID: 1423 SIG: 9 
01-02 04:34:23.366: D/AndroidRuntime(1558): Shutting down VM 
01-02 04:34:23.376: W/dalvikvm(1558): threadid=1: thread exiting with uncaught   exception (group=0xb1aadb90) 
01-02 04:34:23.506: E/AndroidRuntime(1558): FATAL EXCEPTION: main 
01-02 04:34:23.506: E/AndroidRuntime(1558): Process: com.example.android.mediarecorder, PID: 1558 
01-02 04:34:23.506: E/AndroidRuntime(1558): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.android.mediarecorder/com.example.android.mediarecorder.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.example.android.mediarecorder.MainActivity" on path: DexPathList[[zip file "/data/app/com.example.android.mediarecorder-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.android.mediarecorder-1, /system/lib]] 
01-02 04:34:23.506: E/AndroidRuntime(1558):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2102) 
01-02 04:34:23.506: E/AndroidRuntime(1558):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226) 
01-02 04:34:23.506: E/AndroidRuntime(1558):  at android.app.ActivityThread.access$700(ActivityThread.java:135) 
01-02 04:34:23.506: E/AndroidRuntime(1558):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397) 
01-02 04:34:23.506: E/AndroidRuntime(1558):  at android.os.Handler.dispatchMessage(Handler.java:102) 
01-02 04:34:23.506: E/AndroidRuntime(1558):  at android.os.Looper.loop(Looper.java:137) 
01-02 04:34:23.506: E/AndroidRuntime(1558):  at android.app.ActivityThread.main(ActivityThread.java:4998) 
01-02 04:34:23.506: E/AndroidRuntime(1558):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-02 04:34:23.506: E/AndroidRuntime(1558):  at java.lang.reflect.Method.invoke(Method.java:515) 
01-02 04:34:23.506: E/AndroidRuntime(1558):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777) 
01-02 04:34:23.506: E/AndroidRuntime(1558):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593) 
01-02 04:34:23.506: E/AndroidRuntime(1558):  at dalvik.system.NativeStart.main(Native Method) 
01-02 04:34:23.506: E/AndroidRuntime(1558): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.android.mediarecorder.MainActivity" on path: DexPathList[[zip file "/data/app/com.example.android.mediarecorder-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.android.mediarecorder-1, /system/lib]] 
01-02 04:34:23.506: E/AndroidRuntime(1558):  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
01-02 04:34:23.506: E/AndroidRuntime(1558):  at java.lang.ClassLoader.loadClass(ClassLoader.java:497) 
01-02 04:34:23.506: E/AndroidRuntime(1558):  at java.lang.ClassLoader.loadClass(ClassLoader.java:457) 
01-02 04:34:23.506: E/AndroidRuntime(1558):  at android.app.Instrumentation.newActivity(Instrumentation.java:1061) 
01-02 04:34:23.506: E/AndroidRuntime(1558):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2093) 
01-02 04:34:23.506: E/AndroidRuntime(1558):  ... 11 more 
01-02 04:34:32.246: I/Process(1558): Sending signal. PID: 1558 SIG: 9 

Мой манифест был:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.android.mediarecorder" 
android:versionCode="1" 
android:versionName="1.0"> 

<uses-sdk 
    android:minSdkVersion="14" 
    android:targetSdkVersion="17" /> 

<!-- This app records A/V content from camera and stores it to disk --> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.RECORD_VIDEO" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO"/> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme"> 
    <!-- Since this sample records video from camera preview, locking the orientation to 
     landscape. Landscape mode offers us more preview space with standard video aspect 
     ratios (width > height) --> 
    <activity 
     android:name=".MainActivity" 


     android:label="@string/app_name" 
     android:screenOrientation="landscape"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

</manifest> 

Я читал на предыдущих постах, что проблема может зависеть от правильной конфигурации Java Build Path, но так как я новичок в Android и программирование я не могу понять как изменить java-сборку, чтобы приложение работало.

Прилагаю также образы сборки Путь Java

java build path libraries

java build path order and export

Может кто-нибудь дать мне несколько советов? Заранее спасибо

добавить код MainActivity ниже

/* 
* Copyright (C) 2013 The Android Open Source Project 
* 
* Licensed under the Apache License, Version 2.0 (the "License"); 
* you may not use this file except in compliance with the License. 
* You may obtain a copy of the License at 
* 
*  http://www.apache.org/licenses/LICENSE-2.0 
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed under the License is distributed on an "AS IS" BASIS, 
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
* See the License for the specific language governing permissions and 
* limitations under the License. 
*/ 

package com.example.android.mediarecorder; 

import android.annotation.TargetApi; 
import android.app.Activity; 
import android.hardware.Camera; 
import android.media.CamcorderProfile; 
import android.media.MediaRecorder; 
import android.os.AsyncTask; 
import android.os.Build; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.TextureView; 
import android.view.View; 
import android.widget.Button; 

import com.example.android.common.media.CameraHelper; 

import java.io.IOException; 
import java.util.List; 

/** 
* This activity uses the camera/camcorder as the A/V source for the {@link android.media.MediaRecorder} API. 
* A {@link android.view.TextureView} is used as the camera preview which limits the code to API 14+. This 
* can be easily replaced with a {@link android.view.SurfaceView} to run on older devices. 
*/ 
public class MainActivity extends Activity { 

    private Camera mCamera; 
    private TextureView mPreview; 
    private MediaRecorder mMediaRecorder; 

    private boolean isRecording = false; 
    private static final String TAG = "Recorder"; 
    private Button captureButton; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.sample_main); 

     mPreview = (TextureView) findViewById(R.id.surface_view); 
     captureButton = (Button) findViewById(R.id.button_capture); 
    } 

    /** 
    * The capture button controls all user interaction. When recording, the button click 
    * stops recording, releases {@link android.media.MediaRecorder} and {@link android.hardware.Camera}. When not recording, 
    * it prepares the {@link android.media.MediaRecorder} and starts recording. 
    * 
    * @param view the view generating the event. 
    */ 
    public void onCaptureClick(View view) { 
    if (isRecording) { 
      // BEGIN_INCLUDE(stop_release_media_recorder) 

      // stop recording and release camera 
      mMediaRecorder.stop(); // stop the recording 
      releaseMediaRecorder(); // release the MediaRecorder object 
      mCamera.lock();   // take camera access back from MediaRecorder 

      // inform the user that recording has stopped 
      setCaptureButtonText("Capture"); 
      isRecording = false; 
      releaseCamera(); 
      // END_INCLUDE(stop_release_media_recorder) 

     } else { 

      // BEGIN_INCLUDE(prepare_start_media_recorder) 

      new MediaPrepareTask().execute(null, null, null); 

      // END_INCLUDE(prepare_start_media_recorder) 

     } 
    } 

    private void setCaptureButtonText(String title) { 
     captureButton.setText(title); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     // if we are using MediaRecorder, release it first 
     releaseMediaRecorder(); 
     // release the camera immediately on pause event 
     releaseCamera(); 
    } 

    private void releaseMediaRecorder(){ 
     if (mMediaRecorder != null) { 
      // clear recorder configuration 
      mMediaRecorder.reset(); 
      // release the recorder object 
      mMediaRecorder.release(); 
      mMediaRecorder = null; 
      // Lock camera for later use i.e taking it back from MediaRecorder. 
      // MediaRecorder doesn't need it anymore and we will release it if the activity pauses. 
      mCamera.lock(); 
     } 
    } 

    private void releaseCamera(){ 
     if (mCamera != null){ 
      // release the camera for other applications 
      mCamera.release(); 
      mCamera = null; 
     } 
    } 

    @TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    private boolean prepareVideoRecorder(){ 

     // BEGIN_INCLUDE (configure_preview) 
     mCamera = CameraHelper.getDefaultCameraInstance(); 

     // We need to make sure that our preview and recording video size are supported by the 
     // camera. Query camera to find all the sizes and choose the optimal size given the 
     // dimensions of our preview surface. 
     Camera.Parameters parameters = mCamera.getParameters(); 
     List<Camera.Size> mSupportedPreviewSizes = parameters.getSupportedPreviewSizes(); 
     Camera.Size optimalSize = CameraHelper.getOptimalPreviewSize(mSupportedPreviewSizes,    mPreview.getWidth(), mPreview.getHeight()); 

     // Use the same size for recording profile. 
     CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); 
     profile.videoFrameWidth = optimalSize.width; 
     profile.videoFrameHeight = optimalSize.height; 

     // likewise for the camera object itself. 
     parameters.setPreviewSize(profile.videoFrameWidth, profile.videoFrameHeight); 
     mCamera.setParameters(parameters); 
     try { 
       // Requires API level 11+, For backward compatibility use {@link setPreviewDisplay} 
       // with {@link SurfaceView} 
       mCamera.setPreviewTexture(mPreview.getSurfaceTexture()); 
     } catch (IOException e) { 
      Log.e(TAG, "Surface texture is unavailable or unsuitable" + e.getMessage()); 
      return false; 
     } 
     // END_INCLUDE (configure_preview) 


     // BEGIN_INCLUDE (configure_media_recorder) 
     mMediaRecorder = new MediaRecorder(); 

     // Step 1: Unlock and set camera to MediaRecorder 
     mCamera.unlock(); 
     mMediaRecorder.setCamera(mCamera); 

     // Step 2: Set sources 
     mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
     mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 

     // Step 3: Set a CamcorderProfile (requires API Level 8 or higher) 
     mMediaRecorder.setProfile(profile); 

     // Step 4: Set output file 
     mMediaRecorder.setOutputFile(CameraHelper.getOutputMediaFile(
      CameraHelper.MEDIA_TYPE_VIDEO).toString()); 
     // END_INCLUDE (configure_media_recorder) 

     // Step 5: Prepare configured MediaRecorder 
     try { 
      mMediaRecorder.prepare(); 
     } catch (IllegalStateException e) { 
      Log.d(TAG, "IllegalStateException preparing MediaRecorder: " + e.getMessage()); 
      releaseMediaRecorder(); 
      return false; 
     } catch (IOException e) { 
      Log.d(TAG, "IOException preparing MediaRecorder: " + e.getMessage()); 
      releaseMediaRecorder(); 
      return false; 
     } 
     return true; 
    } 

    /** 
    * Asynchronous task for preparing the {@link android.media.MediaRecorder} since it's a long blocking 
    * operation. 
    */ 
    class MediaPrepareTask extends AsyncTask<Void, Void, Boolean> { 

     @Override 
     protected Boolean doInBackground(Void... voids) { 
      // initialize video camera 
      if (prepareVideoRecorder()) { 
       // Camera is available and unlocked, MediaRecorder is prepared, 
       // now you can start recording 
       mMediaRecorder.start(); 

       isRecording = true; 
      } else { 
       // prepare didn't work, release the camera 
       releaseMediaRecorder(); 
       return false; 
      } 
      return true; 
     } 

     @Override 
     protected void onPostExecute(Boolean result) { 
      if (!result) { 
       MainActivity.this.finish(); 
      } 
      // inform the user that recording has started 
      setCaptureButtonText("Stop"); 

     } 
    } 

} 

ответ

2

Попробуйте это, изменив Activity имя полного имени класса:

<activity 
    android:name="com.example.android.mediaRecorder.MainActivity" 
0

Я думаю, вам имя пакета класса или манифеста имя пакета изменен, когда вы установите его в среду IDE. Ошибка показывает, что существует несоответствие с именем класса, которое используется в файле манифеста с файлом класса.

Смежные вопросы