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

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

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

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

Android

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

Android Studio

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

Q&A

解決済

1回答

262閲覧

このコードは 、CameraAPI2をつかったものですか?

giant

総合スコア132

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2017/08/02 13:38

このコードは 、CameraAPI2をつかったものですか?

java

1public class RecorderService extends Service implements OnInfoListener, SurfaceHolder.Callback { 2 private static final int VIDEO_DURATION = 30 * 60 * 1000; 3 private static final long VIDEO_FILESIZE = 1024 * 1024 * 1024; 4 5 private SurfaceView mSurfaceView; 6 private Camera mCamera; 7 private MediaRecorder mMediaRecorder; 8 private SurfaceHolder mSurfaceHolder; 9 private boolean isRecording = false; 10 11 public RecorderService() { 12 } 13 14 @Override 15 public IBinder onBind( Intent intent ) { 16 return null; 17 } 18 19 @Override 20 public void onCreate() { 21 super.onCreate(); 22 23 Log.v("Service:onCreate()","あああああああああああああああああああああ"); 24 25 26 // MediaRecorderのプレビュー用のSurfaceViewを作成する 27 mSurfaceView = new SurfaceView( this ); 28 mSurfaceHolder = mSurfaceView.getHolder(); 29 mSurfaceHolder.addCallback( this ); 30 31 // SurfaceViewをシステムオーバーレイに登録する 32 WindowManager windowManager = (WindowManager)getSystemService( WINDOW_SERVICE ); 33 WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams( 34 1, 1, 35 WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 36 WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, 37 PixelFormat.TRANSLUCENT ); 38 windowManager.addView( mSurfaceView, layoutParams ); 39 } 40 41 @Override 42 public int onStartCommand( Intent intent, int flags, int startId ) { 43 super.onStartCommand( intent, flags, startId ); 44 45 if ( isRecording ) 46 mSurfaceView.setVisibility( View.VISIBLE ); 47 48 return START_STICKY; 49 } 50 51 @Override 52 public void onDestroy() { 53 super.onDestroy(); 54 55 // 録画停止する 56 stopRecording(); 57 58 // SurfaceViewをシステムオーバーレイから削除する 59 ( (WindowManager)getSystemService( WINDOW_SERVICE ) ).removeView( mSurfaceView ); 60 mSurfaceView = null; 61 } 62 63 /** 64 * プレビュー用のSurfaceViewが作成された後に録画を開始する 65 * 66 * @param holder 67 */ 68 public void surfaceCreated( SurfaceHolder holder ) { 69 if ( !isRecording ) { 70 // 録画中でなければ録画開始する 71 startRecording(); 72 } else { 73 // 録画中であれば録画再開する 74 restartRecording(); 75 } 76 77 // SurfaceViewは録画開始後は不要なため非表示にする 78 mSurfaceView.setVisibility( View.INVISIBLE ); 79 } 80 81 public void surfaceDestroyed( SurfaceHolder holder ) { 82 } 83 84 public void surfaceChanged( SurfaceHolder holder, int format, int width, int height ) { 85 } 86 87 /** 88 * 録画を開始する 89 */ 90 public void startRecording() { 91 // 録画中であれば何もしない 92 if ( isRecording ) 93 return; 94 95 isRecording = true; 96 97 // 通知をタッチした際にGpsGetActivityを起動するためのIntentを作成する 98 Intent intent = new Intent( this, GpsGetActivity.class ).addFlags( Intent.FLAG_ACTIVITY_NEW_TASK ); 99 PendingIntent pendingIntent = PendingIntent.getActivity( this, 0, intent, 0 ); 100 101 102 // 通知を作成する 103 Notification notification = new NotificationCompat.Builder( getApplicationContext() ) 104 .setContentIntent( pendingIntent ) 105 .setContentTitle("recording") 106 .setContentText("recording now") 107 .setTicker("start recording" ) 108 .setSmallIcon( R.mipmap.ic_launcher ) 109 .setOngoing( true ) 110 .build(); 111 112 // Serviceをフォアグラウンド化して常時録画を維持する 113 startForeground( 1, notification ); 114 115 116 // Cameraのフォーカスモードを無限遠に設定する 117 mCamera = Camera.open(); 118 119 120 Camera.Parameters cameraParameters = mCamera.getParameters(); 121 cameraParameters.setFocusMode( Camera.Parameters.FOCUS_MODE_INFINITY ); 122 mCamera.setParameters( cameraParameters ); 123 mCamera.unlock(); 124 125 126 127 // MediaRecorderを設定する 128 mMediaRecorder = new MediaRecorder(); 129 mMediaRecorder.setCamera( mCamera ); 130 131 Log.v("録画機能","5"); 132 133 // オーディオのノイズを抑制するため音声認識用のオーディオソースを使用する 134 mMediaRecorder.setAudioSource( MediaRecorder.AudioSource.VOICE_RECOGNITION ); 135 mMediaRecorder.setVideoSource( MediaRecorder.VideoSource.CAMERA ); 136 137 138 // 高品質プロファイルを設定する 139 mMediaRecorder.setProfile( CamcorderProfile.get( CamcorderProfile.QUALITY_HIGH ) ); 140 141 File filePath = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "movie"); 142 // 録画ファイルのパスを設定する(TODO: 外部ストレージのルートパスは端末ごとに修正する) 143 //mMediaRecorder.setOutputFile( Environment.getExternalStorageDirectory().getPath()+ DateFormat.format( "yyyyMMdd'-'kkmmss", Calendar.getInstance() ) + ".mp4" ); 144 mMediaRecorder.setOutputFile( filePath.getPath()+ DateFormat.format( "yyyyMMdd'-'kkmmss", Calendar.getInstance() ) + ".mp4" ); 145 146 // 録画時間または録画ファイルサイズを制限する 147 mMediaRecorder.setOnInfoListener( this ); 148 mMediaRecorder.setMaxDuration( VIDEO_DURATION ); 149 mMediaRecorder.setMaxFileSize( VIDEO_FILESIZE ); 150 151 // プレビュー用のSurfaceを設定する 152 mMediaRecorder.setPreviewDisplay( mSurfaceHolder.getSurface() ); 153 154 Log.v("録画機能","8"); 155 156 // 録画を開始する 157 try { 158 159 Log.v("録画機能","9"); 160 mMediaRecorder.prepare(); 161 mMediaRecorder.start(); 162 } catch ( IOException ex ) { 163 ex.printStackTrace(); 164 165 166 // 録画に失敗した場合はクリーンアップする 167 168 // Serviceのフォアグラウンド化を解除する 169 stopForeground( true ); 170 171 // MediaRecorderとCameraを解放する 172 mMediaRecorder.release(); 173 mCamera.lock(); 174 mCamera.release(); 175 176 isRecording = false; 177 178 // バイブレーションで通知する 179 ( (Vibrator)getSystemService( VIBRATOR_SERVICE ) ).vibrate( 3000 ); 180 } 181 } 182 183 /** 184 * 録画を停止する 185 */ 186 public void stopRecording() { 187 188 // 録画中でなければ何もしない 189 if ( !isRecording ) 190 return; 191 192 stopForeground( true ); 193 194 mMediaRecorder.stop(); 195 mMediaRecorder.release(); 196 197 mCamera.lock(); 198 mCamera.release(); 199 200 isRecording = false; 201 } 202 203 /** 204 * 録画を再開する 205 */ 206 public void restartRecording() { 207 208 // 録画中でなければ何もしない 209 if ( !isRecording ) 210 return; 211 212 // 録画を停止する 213 mMediaRecorder.stop(); 214 mMediaRecorder.reset(); 215 mCamera.lock(); 216 mCamera.release(); 217 218 // Cameraを再設定する 219 mCamera = Camera.open(); 220 Camera.Parameters cameraParameters = mCamera.getParameters(); 221 cameraParameters.setFocusMode( Camera.Parameters.FOCUS_MODE_INFINITY ); 222 mCamera.setParameters( cameraParameters ); 223 mCamera.unlock(); 224 225 // MediaRecorderを再設定する 226 mMediaRecorder.setCamera( mCamera ); 227 mMediaRecorder.setAudioSource( MediaRecorder.AudioSource.VOICE_RECOGNITION ); 228 mMediaRecorder.setVideoSource( MediaRecorder.VideoSource.CAMERA ); 229 mMediaRecorder.setProfile( CamcorderProfile.get( CamcorderProfile.QUALITY_HIGH ) ); 230 mMediaRecorder.setOutputFile( Environment.getExternalStorageDirectory().getPath()+ DateFormat.format( "yyyyMMdd'-'kkmmss", Calendar.getInstance() ) + ".mp4" ); 231 // mMediaRecorder.setOnInfoListener( this ); 232 // mMediaRecorder.setMaxDuration( VIDEO_DURATION ); 233 // mMediaRecorder.setMaxFileSize( VIDEO_FILESIZE ); 234 mMediaRecorder.setPreviewDisplay( mSurfaceHolder.getSurface() ); 235 236 // 録画を開始する 237 try { 238 mMediaRecorder.prepare(); 239 mMediaRecorder.start(); 240 } catch ( IOException ex ) { 241 ex.printStackTrace(); 242 243 stopForeground( true ); 244 245 mMediaRecorder.release(); 246 247 mCamera.lock(); 248 mCamera.release(); 249 250 isRecording = false; 251 252 ( (Vibrator)getSystemService( VIBRATOR_SERVICE ) ).vibrate( 3000 ); 253 } 254 } 255 256 public void onInfo( MediaRecorder mr, int what, int extra ) { 257 // 録画時間または録画ファイルサイズが制限に達した場合、SurfaceViewを再表示し録画を再開する 258 if ( what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED || what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED ) { 259 mSurfaceView.setVisibility( View.VISIBLE ); 260 } 261 } 262} 263

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/08/02 23:38

作成者、または出所に聞いてください。
giant

2017/08/03 01:20

CameraApiを使ったものということがわかりました。
guest

回答1

0

自己解決

CameraApiを使ったものということがわかりました。

投稿2017/08/03 01:20

giant

総合スコア132

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

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

nyang

2017/08/03 03:59 編集

連続して自己解決していますが調べれば答えでるのでは?
giant

2017/08/03 04:00

はい
giant

2017/08/03 04:01 編集

すみませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問