2014-04-08 2 views
0

사용자가 버튼을 누른 후 5 초마다 사진을 계속 찍는 앱을 구현하려고합니다. 앱을 표시 한 후타이머를 기반으로하는 Android 카메라 앱

  1. :

    import android.os.Bundle; 
    import android.app.Activity; 
    import android.view.Menu; 
    import java.io.File; 
    import java.io.FileNotFoundException; 
    import java.io.FileOutputStream; 
    import java.io.IOException; 
    import android.graphics.Bitmap; 
    import android.graphics.BitmapFactory; 
    import android.hardware.Camera; 
    import android.os.CountDownTimer; 
    import android.os.Environment; 
    import android.view.SurfaceView; 
    import android.view.View; 
    import android.widget.TextView; 
    
    public class MyAutoCamera extends Activity { 
        private Camera camera; // camera object 
        private TextView textTimeLeft; // time left field 
        @Override 
        protected void onCreate(Bundle savedInstanceState) { 
         super.onCreate(savedInstanceState); 
         setContentView(R.layout.main); 
         textTimeLeft=(TextView)findViewById(R.id.textTimeLeft); //make time left object 
         camera = Camera.open(); 
         SurfaceView view = new SurfaceView(this); 
    
         try { 
          camera.setPreviewDisplay(view.getHolder()); // feed dummy surface to surface 
         } catch (IOException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
         camera.startPreview(); 
        } 
    
    
        Camera.PictureCallback jpegCallBack=new Camera.PictureCallback() {  
         public void onPictureTaken(byte[] data, Camera camera) { 
          // set file destination and file name 
          String path = Environment.getExternalStorageDirectory().getAbsolutePath(); 
          path += "/AutoPictures/myPicture.jpg";//*** 
          File file = new File(path);//*** 
    
          //File destination=new File(Environment.getExternalStorageDirectory(),"myPicture.jpg"); 
          try { 
           Bitmap userImage = BitmapFactory.decodeByteArray(data, 0, data.length); 
           // set file out stream 
           FileOutputStream out = new FileOutputStream(file);//** 
           //FileOutputStream out = new FileOutputStream(destination); 
           // set compress format quality and stream 
           userImage.compress(Bitmap.CompressFormat.JPEG, 90, out);   
    
          } catch (FileNotFoundException e) { 
           // TODO Auto-generated catch block 
           e.printStackTrace(); 
          } 
    
         } 
        }; 
    
        public void startTimer(View v){ 
    
         // 5000ms=5s at intervals of 1000ms=1s so that means it lasts 5 seconds 
         new CountDownTimer(5000,1000){ 
    
          @Override 
          public void onFinish() { 
           // count finished 
           textTimeLeft.setText("Picture Taken"); 
           camera.takePicture(null, null, null, jpegCallBack); 
          } 
    
          @Override 
          public void onTick(long millisUntilFinished) { 
           // every time 1 second passes 
           textTimeLeft.setText("Seconds Left: "+millisUntilFinished/1000); 
          } 
    
         }.start(); 
        } 
        @Override 
        public boolean onCreateOptionsMenu(Menu menu) { 
         // Inflate the menu; this adds items to the action bar if it is present. 
         getMenuInflater().inflate(R.menu.my_auto_camera, menu); 
         return true; 
        } 
    
    } 
    

    main.xml에 :

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        xmlns:tools="http://schemas.android.com/tools" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:orientation="vertical" 
        android:paddingBottom="@dimen/activity_vertical_margin" 
        android:paddingLeft="@dimen/activity_horizontal_margin" 
        android:paddingRight="@dimen/activity_horizontal_margin" 
        android:paddingTop="@dimen/activity_vertical_margin" 
        tools:context=".MyAutoCamera" > 
    
    
        <Button 
         android:id ="@+id/buttonStartTimer" 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content" 
         android:text= "Start Timer" 
         android:onClick="startTimer"/> 
    
        <TextView 
         android:id ="@+id/textTimeLeft" 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content" 
         android:text="" /> 
    
    </LinearLayout> 
    

    그리고 권한 :

    <uses-feature android:name="android.hardware.camera" /> 
        <uses-feature 
         android:name="android.hardware.camera.front" 
         android:required="false" /> 
    
        <uses-permission android:name="android.permission.CAMERA" /> 
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    

    내 문제는 여기에 내 전체 코드입니다 사진을 찍은 후 저장 용량에서 사진을 찾을 수 없습니다. 내 장치에서 AutoPictures라는 폴더를 만들었습니다.

  2. 위의 코드를 수정하여 한 장의 사진이 아닌 5 초마다 사진을 계속 찍을 수 있습니까?

도움이 될 것입니다.

답변

0

스토리지 실행에이 코드를 연결할 때 당신은 그것을 볼 수 있도록하기 위해 파일 시스템에 파일을 추가 한 후 : 그것은, 핸들러를 수행하는 방법에는 여러 가지가 사진을 계속 관해서는

Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
Uri uri = Uri.fromFile(exportFile); 
intent.setData(uri); 
ctx.sendBroadcast(intent); 

을 당신은 (시간 기반?) 그래서 그들은 쓰기 위에 있지 않을 것이다 파일 이름을 생성한다 http://developer.android.com/reference/java/util/Timer.html http://developer.android.com/reference/android/os/AsyncTask.html

, 타이머,로 스케줄, AsyncTask를 등 ....

+0

작동하지 않았습니다. 사진이 여전히 나타나지 않습니다. 미디어 스캐너에서 찾을 수 있도록 파일을 추가 한 후 장치를 재부팅했기 때문에 문제가 미디어 스캐너와 관련이 없습니다. – user2262955

+0

.getAbsolutePath() 제거 시도하십시오 - 않고 작동하는 유사한 코드가 있지만 내가 MEDIA_SCANNER 호출하지 않으면 파일이 나타나지 않습니다. 그렇지 않으면 나는 더 좋은 생각이 없습니다. – Raanan

관련 문제