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

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

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

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

Android

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

Android Studio

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

Q&A

0回答

1692閲覧

撮影開始ボタンと、停止ボタンを押してなくても画像のようなエラーが出る

giant

総合スコア132

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2017/08/09 07:08

編集2017/08/09 07:10

撮影開始ボタンと、停止ボタンを押したときに、startRecordingVideo();や、stopRecordingVideo();を呼び出すコードを書きます。
ここを書いていないのに、画像のようなエラーが出ます。
このActivityでの動画撮影のサンプルを元に、Serviceで撮影できるアプリを作りたいです。:AtivityのURL

java

1public class MyService7 extends Service { 2private CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() { 3 @Override 4 public void onOpened(@NonNull CameraDevice cameraDevice) { 5 Log.d(TAG, "onOpened"); 6 mCameraDevice = cameraDevice; 7 startPreview(); 8 mCameraOpenCloseLock.release(); 9 //ここでクラス変数に値を入れて、その値が、何かで、これを呼ぶかどうかを決める 10 11 Log.e(TAG, "firstOpend"); 12 startRecordingVideo(); 13 14 } 15 private void closePreviewSession() { 16 Log.e(TAG,"closePreviewSession()"); 17 if (mPreviewSession != null) { 18 mPreviewSession.close(); 19 mPreviewSession = null; 20 } 21 } 22 23 24 @Override 25 public void onDisconnected(@NonNull CameraDevice cameraDevice) { 26 Log.e(TAG,"onDisConnected"); 27 mCameraOpenCloseLock.release(); 28 cameraDevice.close(); 29 mCameraDevice = null; 30 } 31 32 @Override 33 public void onError(@NonNull CameraDevice cameraDevice, int error) { 34 Log.e(TAG,"onError"); 35 mCameraOpenCloseLock.release(); 36 cameraDevice.close(); 37 mCameraDevice = null; 38 } 39 }; 40 41 private void closePreviewSession() { 42 Log.e(TAG,"closePreviewSession"); 43 if (mPreviewSession != null) { 44 mPreviewSession.close(); 45 mPreviewSession = null; 46 } 47 } 48 49 50 51 52 @Override 53 public int onStartCommand(Intent intent, int flags, int startId) { 54 Log.d(TAG, "onStartCommand"); 55 startBackgroundThread(); 56 openCamera(); 57 return super.onStartCommand(intent, flags, startId); 58 } 59 60 61////////////////////OnCLick() 62ここで、撮影開始ボタンと、停止ボタンを押したときに、startRecordingVideo();や、stopRecordingVideo();を呼び出すコードを書きます。 63ここを書いていないのに、画像のようなエラーが出ます。 64 65 66 67 @SuppressWarnings("MissingPermission") 68 private void openCamera() { 69 Log.d(TAG,"openCamera"); 70 CameraManager manager = (CameraManager) this.getSystemService(Context.CAMERA_SERVICE); 71 72 try { 73 Log.d(TAG, "tryAcquire"); 74 if (!mCameraOpenCloseLock.tryAcquire(2500, TimeUnit.MILLISECONDS)) { 75 throw new RuntimeException("Time out waiting to lock camera opening."); 76 } 77 String cameraId = manager.getCameraIdList()[0]; 78 CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); 79 StreamConfigurationMap map = characteristics 80 .get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); 81 mSensorOrientation = characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION); 82 if (map == null) { 83 throw new RuntimeException("Cannot get available preview/video sizes"); 84 } 85 86 mVideoSize = chooseVideoSize(map.getOutputSizes(MediaRecorder.class)); 87 mMediaRecorder = new MediaRecorder(); 88 manager.openCamera(cameraId, mStateCallback, null); 89 90 } catch (CameraAccessException e) { 91 Log.e(TAG, "CameraAccessException e"); 92 } 93 } 94 95 96 97 private void closeCamera() { 98 Log.e(TAG,"closeCamera()"); 99 try { 100 mCameraOpenCloseLock.acquire(); 101 closePreviewSession(); 102 if (null != mCameraDevice) { 103 mCameraDevice.close(); 104 mCameraDevice = null; 105 } 106 if (null != mMediaRecorder) { 107 mMediaRecorder.release(); 108 mMediaRecorder = null; 109 } 110 } catch (InterruptedException e) { 111 throw new RuntimeException("Interrupted while trying to lock camera closing."); 112 } finally { 113 mCameraOpenCloseLock.release(); 114 } 115 } 116 117 118 119 private void startPreview() { 120 Log.d(TAG,"startPreview"); 121 if (null == mCameraDevice) { 122 return; 123 } 124 closePreviewSession(); 125 } 126 127 128 //もう一度closePreviewSession()が呼ばれる 129 private void setUpMediaRecorder() throws IOException { 130 Log.e(TAG,"setUpMediaRecorder"); 131 132 mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE); 133 mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 134 if (mNextVideoAbsolutePath == null || mNextVideoAbsolutePath.isEmpty()) { 135 mNextVideoAbsolutePath = getVideoFilePathy(); 136 Log.e(TAG,mNextVideoAbsolutePath); 137 } 138 mMediaRecorder.setOutputFile(mNextVideoAbsolutePath); 139 mMediaRecorder.setVideoEncodingBitRate(10000000); 140 mMediaRecorder.setVideoFrameRate(30); 141 mMediaRecorder.setVideoSize(mVideoSize.getWidth(), mVideoSize.getHeight()); 142 mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 143 // mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 144 WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 145 int rotation = windowManager.getDefaultDisplay().getRotation(); 146 switch (mSensorOrientation) { 147 case SENSOR_ORIENTATION_DEFAULT_DEGREES: 148 mMediaRecorder.setOrientationHint(DEFAULT_ORIENTATIONS.get(rotation)); 149 break; 150 case SENSOR_ORIENTATION_INVERSE_DEGREES: 151 mMediaRecorder.setOrientationHint(INVERSE_ORIENTATIONS.get(rotation)); 152 break; 153 } 154 mMediaRecorder.prepare(); 155 } 156 157 158 159 160 private void startRecordingVideo() { 161 Log.e(TAG,"startRecordingVideo()"); 162 if (null == mCameraDevice) { 163 Log.e(TAG,"return"); 164 return; 165 } 166 try { 167 Log.e(TAG,"try"); 168 closePreviewSession(); 169 setUpMediaRecorder(); 170 mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD); 171 List<Surface> surfaces = new ArrayList<>(); 172 173 Surface recorderSurface = mMediaRecorder.getSurface(); 174 surfaces.add(recorderSurface); 175 mPreviewBuilder.addTarget(recorderSurface); 176 mCameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() { 177 178 179 @Override 180 public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) { 181 Log.e(TAG, "CameraCaptureSession:onCongigured"); 182 mMediaRecorder.start(); 183 mIsRecordingVideo = true; 184 //やっぱここでか? 185 //ここでクラス変数に値を入れて、その値が、何かで、これを呼ぶかどうかを決める 186 187 Timer mTimer = new Timer(); 188 handler = new Handler(); 189 mTimer.schedule(new TimerTask() { 190 @Override 191 public void run() { 192 // mHandlerを通じてUI Threadへ処理をキューイング 193 handler.post(new Runnable() { 194 public void run() { 195 196 mMediaRecorder.start(); 197 } 198 }); 199 } 200 }, 10000, 10000); 201// //Activityの参考にしたコード 202// getActivity().runOnUiThread(new Runnable() { 203// @Override 204// public void run() { 205// // UI 206// mButtonVideo.setText(R.string.stop); 207// mIsRecordingVideo = true; 208// 209// // Start recording 210// mMediaRecorder.start(); 211// } 212// }); 213 } 214 215 @Override 216 public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) { 217 //省略 218 } 219 }, mBackgroundHandler); 220 } catch (CameraAccessException | IOException e) { 221 e.printStackTrace(); 222 } 223 } 224 225 private void stopRecordingVideo() { 226 Log.e(TAG,"stopRecordingVideo"); 227 mIsRecordingVideo = false; 228 try{ 229 mMediaRecorder.stop(); 230 mMediaRecorder.reset(); 231 }catch(RuntimeException stopException){ 232 233 } 234 mNextVideoAbsolutePath = null; 235 startPreview(); 236 } 237} 238

イメージ説明

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問