사용자가 버튼을 누른 후 5 초마다 사진을 계속 찍는 앱을 구현하려고합니다. 앱을 표시 한 후타이머를 기반으로하는 Android 카메라 앱
- :
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라는 폴더를 만들었습니다.
- 위의 코드를 수정하여 한 장의 사진이 아닌 5 초마다 사진을 계속 찍을 수 있습니까?
도움이 될 것입니다.
작동하지 않았습니다. 사진이 여전히 나타나지 않습니다. 미디어 스캐너에서 찾을 수 있도록 파일을 추가 한 후 장치를 재부팅했기 때문에 문제가 미디어 스캐너와 관련이 없습니다. – user2262955
.getAbsolutePath() 제거 시도하십시오 - 않고 작동하는 유사한 코드가 있지만 내가 MEDIA_SCANNER 호출하지 않으면 파일이 나타나지 않습니다. 그렇지 않으면 나는 더 좋은 생각이 없습니다. – Raanan