質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

2358閲覧

Camera2APIで、カメラの撮影ボタンを、Activityが起動したら自動で押すようにして、10秒後に停止させたいです。

zzzggg

総合スコア13

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/08/16 08:30

編集2017/08/16 08:38

Camera2APIで、カメラの撮影ボタンを、Activityが起動したら押すようにして、10秒後に停止させたいです。

Activityで、カメラの撮影ボタンを自動で押して、撮影を開始するアプリを作ってます。
startと、stopを自動化するにはどうすればいいでしょうか?

java

1 2public class MainActivity extends Activity 3 implements ActivityCompat.OnRequestPermissionsResultCallback { 4 5 6 @Override 7 public void onOpened(@NonNull CameraDevice cameraDevice) { 8 startPreview(); 9 mCameraOpenCloseLock.release(); 10 } 11 }; 12 13 private static Size chooseVideoSize(Size[] choices) { 14 } 15 16 @Override 17 public void onCreate(Bundle savedInstanceState) { 18 super.onCreate(savedInstanceState); 19 setContentView(R.layout.activity_camera2_video); 20 } 21 22 @Override 23 public void onResume() { 24 super.onResume(); 25 startBackgroundThread(); 26 openCamera(mTextureView.getWidth(), mTextureView.getHeight()); 27 mTextureView.setSurfaceTextureListener(mSurfaceTextureListener); 28 } 29 30 @Override 31 public void onPause() { 32 closeCamera(); 33 stopBackgroundThread(); 34 } 35 36 37 @SuppressWarnings("MissingPermission") 38 private void openCamera(int width, int height) { 39 40 CameraManager manager = (CameraManager) this.getSystemService(Context.CAMERA_SERVICE); 41 try { 42 43 String cameraId = manager.getCameraIdList()[1]; 44 CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); 45 StreamConfigurationMap map = characteristics 46 .get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); 47 mSensorOrientation = characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION); 48 mVideoSize = chooseVideoSize(map.getOutputSizes(MediaRecorder.class)); 49 mPreviewSize = chooseOptimalSize(map.getOutputSizes(SurfaceTexture.class), 50 width, height, mVideoSize); 51 mMediaRecorder = new MediaRecorder(); 52 manager.openCamera(cameraId, mStateCallback, null); 53 } catch (Exception e) { 54 this.finish(); 55 } 56 } 57 58 private void closeCamera() { 59 mCameraOpenCloseLock.acquire(); 60 closePreviewSession(); 61 if (null != mCameraDevice) { 62 mCameraDevice.close(); 63 mCameraDevice = null; 64 } 65 if (null != mMediaRecorder) { 66 mMediaRecorder.release(); 67 mMediaRecorder = null; 68 } 69 } 70 mCameraOpenCloseLock.release(); 71 72 private void startPreview() { 73 if (null == mCameraDevice || !mTextureView.isAvailable() || null == mPreviewSize) { 74 return; 75 } 76 closePreviewSession(); 77 SurfaceTexture texture = mTextureView.getSurfaceTexture(); 78 assert texture != null; 79 texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight()); 80 mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); 81 82 Surface previewSurface = new Surface(texture); 83 mPreviewBuilder.addTarget(previewSurface); 84 85 mCameraDevice.createCaptureSession(Collections.singletonList(previewSurface), 86 new CameraCaptureSession.StateCallback() { 87 88 @Override 89 public void onConfigured(@NonNull CameraCaptureSession session) { 90 mPreviewSession = session; 91 updatePreview(); 92 } 93 94 @Override 95 public void onConfigureFailed(@NonNull CameraCaptureSession session) { 96 } 97 }, mBackgroundHandler); 98 } 99 100 101private void updatePreview() { 102 setUpCaptureRequestBuilder(mPreviewBuilder); 103 HandlerThread thread = new HandlerThread("CameraPreview"); 104 thread.start(); 105 mPreviewSession.setRepeatingRequest(mPreviewBuilder.build(), null, mBackgroundHandler); 106 107 thread.sleep(10000); 108 startRecordingVideo(); 109 110 final Handler handler = new Handler(); 111 handler.postDelayed(new Runnable() { 112 @Override 113 public void run() { 114 stopRecordingVideo(); 115 } 116 }, 5000); 117 } 118 } 119 120 private void setUpCaptureRequestBuilder(CaptureRequest.Builder builder) { 121 builder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO); 122 } 123 124 125 private void setUpMediaRecorder() throws IOException { 126 mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 127 mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE); 128 mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 129 if (mNextVideoAbsolutePath == null || mNextVideoAbsolutePath.isEmpty()) { 130 mNextVideoAbsolutePath = getVideoFilePathy(); 131 } 132 mMediaRecorder.setOutputFile(mNextVideoAbsolutePath); 133 mMediaRecorder.setVideoEncodingBitRate(10000000); 134 mMediaRecorder.setVideoFrameRate(30); 135 mMediaRecorder.setVideoSize(mVideoSize.getWidth(), mVideoSize.getHeight()); 136 mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 137 mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 138 int rotation = this.getWindowManager().getDefaultDisplay().getRotation(); 139 switch (mSensorOrientation) { 140 case SENSOR_ORIENTATION_DEFAULT_DEGREES: 141 mMediaRecorder.setOrientationHint(DEFAULT_ORIENTATIONS.get(rotation)); 142 break; 143 case SENSOR_ORIENTATION_INVERSE_DEGREES: 144 mMediaRecorder.setOrientationHint(INVERSE_ORIENTATIONS.get(rotation)); 145 break; 146 } 147 mMediaRecorder.prepare(); 148 } 149 150 private void startRecordingVideo() { 151 if (null == mCameraDevice || !mTextureView.isAvailable() || null == mPreviewSize) { 152 return; 153 } 154 try { 155 closePreviewSession(); 156 setUpMediaRecorder(); 157 SurfaceTexture texture = mTextureView.getSurfaceTexture(); 158 assert texture != null; 159 texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight()); 160 mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD); 161 List<Surface> surfaces = new ArrayList<>(); 162 163 Surface previewSurface = new Surface(texture); 164 surfaces.add(previewSurface); 165 mPreviewBuilder.addTarget(previewSurface); 166 167 // Set up Surface for the MediaRecorder 168 Surface recorderSurface = mMediaRecorder.getSurface(); 169 surfaces.add(recorderSurface); 170 mPreviewBuilder.addTarget(recorderSurface); 171 172 173 mCameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() { 174 175 @Override 176 public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) { 177 mPreviewSession = cameraCaptureSession; 178 updatePreview(); 179 Camera2VideoActivity.this.runOnUiThread(new Runnable() { 180 @Override 181 public void run() { 182 mButtonVideo.setText(R.string.stop); 183 mIsRecordingVideo = true; 184 mMediaRecorder.start(); 185 } 186 }); 187 } 188 } 189 190 private void closePreviewSession() { 191 if (mPreviewSession != null) { 192 mPreviewSession.close(); 193 mPreviewSession = null; 194 } 195 } 196 197 private void stopRecordingVideo() { 198 mIsRecordingVideo = false; 199 mButtonVideo.setText(R.string.record); 200 try { 201 mPreviewSession.stopRepeating(); 202 mPreviewSession.abortCaptures(); 203 } catch (CameraAccessException e) { 204 e.printStackTrace(); 205 } 206 mMediaRecorder.stop(); 207 mMediaRecorder.reset(); 208 209 mNextVideoAbsolutePath = null; 210 startPreview(); 211 } 212} 213

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

@Override
public void onConfigured(@NonNull CameraCaptureSession session) {

のように、onCongiguredに、startと、stopを書いたところ解決しました。

投稿2017/08/16 09:22

zzzggg

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問