質問編集履歴

6

余計な文字を消した

2017/08/02 11:08

投稿

giant
giant

スコア132

test CHANGED
File without changes
test CHANGED
@@ -16,13 +16,13 @@
16
16
 
17
17
  ```
18
18
 
19
- 08-02 19:59:05.947 28714-28982/com.google.android.exoplayer2.demo I/VideoCapabilities: Unsupported profile 4 for video/mp4v-es
19
+ I/VideoCapabilities: Unsupported profile 4 for video/mp4v-es
20
-
20
+
21
- 08-02 19:59:05.965 28714-28993/com.google.android.exoplayer2.demo I/OMXClient: Using client-side OMX mux.
21
+ I/OMXClient: Using client-side OMX mux.
22
-
22
+
23
- 08-02 19:59:25.556 28714-28720/com.google.android.exoplayer2.demo I/art: Thread[3,tid=28720,WaitingInMainSignalCatcherLoop,Thread*=0xeabdb900,peer=0x130070a0,"Signal Catcher"]: reacting to signal 3
23
+ I/art:Thread[3,tid=28720,WaitingInMainSignalCatcherLoop,Thread*=0xeabdb900,peer=0x130070a0,"Signal Catcher"]: reacting to signal 3
24
-
24
+
25
- 08-02 19:59:25.609 28714-28720/com.google.android.exoplayer2.demo I/art: Wrote stack traces to '/data/anr/traces.txt'
25
+ I/art: Wrote stack traces to '/data/anr/traces.txt'
26
26
 
27
27
 
28
28
 

5

エラーコードの追加

2017/08/02 11:07

投稿

giant
giant

スコア132

test CHANGED
File without changes
test CHANGED
@@ -14,6 +14,22 @@
14
14
 
15
15
  targetSdkVersion 23 です。
16
16
 
17
+ ```
18
+
19
+ 08-02 19:59:05.947 28714-28982/com.google.android.exoplayer2.demo I/VideoCapabilities: Unsupported profile 4 for video/mp4v-es
20
+
21
+ 08-02 19:59:05.965 28714-28993/com.google.android.exoplayer2.demo I/OMXClient: Using client-side OMX mux.
22
+
23
+ 08-02 19:59:25.556 28714-28720/com.google.android.exoplayer2.demo I/art: Thread[3,tid=28720,WaitingInMainSignalCatcherLoop,Thread*=0xeabdb900,peer=0x130070a0,"Signal Catcher"]: reacting to signal 3
24
+
25
+ 08-02 19:59:25.609 28714-28720/com.google.android.exoplayer2.demo I/art: Wrote stack traces to '/data/anr/traces.txt'
26
+
27
+
28
+
29
+ ```
30
+
31
+ 「応答していません。このアプリを終了しますか?」とでます。
32
+
17
33
 
18
34
 
19
35
  [このような記事を見つけたのですが、私のコードにはエラーは出ていません。](http://d.hatena.ne.jp/seika_m/20150903)

4

URLの追加

2017/08/02 11:00

投稿

giant
giant

スコア132

test CHANGED
File without changes
test CHANGED
@@ -16,6 +16,8 @@
16
16
 
17
17
 
18
18
 
19
+ [このような記事を見つけたのですが、私のコードにはエラーは出ていません。](http://d.hatena.ne.jp/seika_m/20150903)
20
+
19
21
  ```java
20
22
 
21
23
  public void startRecording() {

3

ごじ

2017/08/02 10:55

投稿

giant
giant

スコア132

test CHANGED
File without changes
test CHANGED
@@ -12,6 +12,8 @@
12
12
 
13
13
  ASUSのタブレットを使ってます。
14
14
 
15
+ targetSdkVersion 23 です。
16
+
15
17
 
16
18
 
17
19
  ```java

2

ASUSのタブレットを使ってます。

2017/08/02 10:47

投稿

giant
giant

スコア132

test CHANGED
File without changes
test CHANGED
@@ -10,6 +10,10 @@
10
10
 
11
11
 
12
12
 
13
+ ASUSのタブレットを使ってます。
14
+
15
+
16
+
13
17
  ```java
14
18
 
15
19
  public void startRecording() {

1

コードの変更

2017/08/02 10:34

投稿

giant
giant

スコア132

test CHANGED
File without changes
test CHANGED
@@ -1,61 +1,245 @@
1
- java.lang.RuntimeException: Fail to connect to camera service
2
-
3
- エラーが出ます。
4
-
5
- mCamera = Camera.open(); の行にエラー
1
+ mCamera = Camera.open();から下の行が、実行されせん
6
-
2
+
3
+
4
+
7
- Camera.open() が使えないというとでしょうか?
5
+ Logで、どこまで動ているのか確かめたところ、
6
+
8
-
7
+ 録画機能 3 までしか表示されません。
8
+
9
-
9
+ 何が原因なのでしょうか?
10
-
11
-
12
10
 
13
11
 
14
12
 
15
13
  ```java
16
14
 
17
- E/UncaughtException: java.lang.RuntimeException: Fail to connect to camera service
18
-
19
- at android.hardware.Camera.<init>(Camera.java:540)
20
-
21
- at android.hardware.Camera.open(Camera.java:396)
22
-
23
- at com.google.android.exoplayer2.demo.RecorderService.startRecording(RecorderService.java:148)
24
-
25
- at com.google.android.exoplayer2.demo.RecorderService.surfaceCreated(RecorderService.java:101)
26
-
27
- at android.view.SurfaceView.updateWindow(SurfaceView.java:583)
28
-
29
- at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:177)
30
-
31
- at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944)
32
-
33
- at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2070)
34
-
35
- at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1128)
36
-
37
- at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6104)
38
-
39
- at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
40
-
41
- at android.view.Choreographer.doCallbacks(Choreographer.java:670)
42
-
43
- at android.view.Choreographer.doFrame(Choreographer.java:606)
44
-
45
- at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
46
-
47
- at android.os.Handler.handleCallback(Handler.java:739)
48
-
49
- at android.os.Handler.dispatchMessage(Handler.java:95)
50
-
51
- at android.os.Looper.loop(Looper.java:148)
52
-
53
- at android.app.ActivityThread.main(ActivityThread.java:5480)
54
-
55
- at java.lang.reflect.Method.invoke(Native Method)
56
-
57
- at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
58
-
59
- at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
15
+ public void startRecording() {
16
+
17
+ // 録画中であれば何もしない
18
+
19
+ if ( isRecording )
20
+
21
+ return;
22
+
23
+
24
+
25
+ Log.v("録画機能","1");
26
+
27
+
28
+
29
+ isRecording = true;
30
+
31
+
32
+
33
+ // 通知をタッチした際にGpsGetActivityを起動するためのIntentを作成する
34
+
35
+ Intent intent = new Intent( this, GpsGetActivity.class ).addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );
36
+
37
+ PendingIntent pendingIntent = PendingIntent.getActivity( this, 0, intent, 0 );
38
+
39
+
40
+
41
+ Log.v("録画機能","2");
42
+
43
+
44
+
45
+ // 通知を作成する
46
+
47
+ Notification notification = new NotificationCompat.Builder( getApplicationContext() )
48
+
49
+ .setContentIntent( pendingIntent )
50
+
51
+ .setContentTitle("recording")
52
+
53
+ .setContentText("recording now")
54
+
55
+ .setTicker("start recording" )
56
+
57
+ .setSmallIcon( R.mipmap.ic_launcher )
58
+
59
+ .setOngoing( true )
60
+
61
+ .build();
62
+
63
+
64
+
65
+ // Serviceをフォアグラウンド化して常時録画を維持する
66
+
67
+ startForeground( 1, notification );
68
+
69
+
70
+
71
+ Log.v("録画機能","3");
72
+
73
+
74
+
75
+ // Cameraのフォーカスモードを無限遠に設定する
76
+
77
+ mCamera = Camera.open();
78
+
79
+ Camera.Parameters cameraParameters = mCamera.getParameters();
80
+
81
+ cameraParameters.setFocusMode( Camera.Parameters.FOCUS_MODE_INFINITY );
82
+
83
+ mCamera.setParameters( cameraParameters );
84
+
85
+ mCamera.unlock();
86
+
87
+
88
+
89
+ Log.v("録画機能","4");
90
+
91
+
92
+
93
+ // MediaRecorderを設定する
94
+
95
+ mMediaRecorder = new MediaRecorder();
96
+
97
+ mMediaRecorder.setCamera( mCamera );
98
+
99
+
100
+
101
+ Log.v("録画機能","5");
102
+
103
+
104
+
105
+ // オーディオのノイズを抑制するため音声認識用のオーディオソースを使用する
106
+
107
+ mMediaRecorder.setAudioSource( MediaRecorder.AudioSource.VOICE_RECOGNITION );
108
+
109
+ mMediaRecorder.setVideoSource( MediaRecorder.VideoSource.CAMERA );
110
+
111
+
112
+
113
+ Log.v("録画機能","6");
114
+
115
+
116
+
117
+ // 高品質プロファイルを設定する
118
+
119
+ mMediaRecorder.setProfile( CamcorderProfile.get( CamcorderProfile.QUALITY_HIGH ) );
120
+
121
+
122
+
123
+ File filePath = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "movie");
124
+
125
+ // 録画ファイルのパスを設定する(TODO: 外部ストレージのルートパスは端末ごとに修正する)
126
+
127
+ //mMediaRecorder.setOutputFile( Environment.getExternalStorageDirectory().getPath()+ DateFormat.format( "yyyyMMdd'-'kkmmss", Calendar.getInstance() ) + ".mp4" );
128
+
129
+ mMediaRecorder.setOutputFile( filePath.getPath()+ DateFormat.format( "yyyyMMdd'-'kkmmss", Calendar.getInstance() ) + ".mp4" );
130
+
131
+
132
+
133
+ Log.v("録画機能","7");
134
+
135
+
136
+
137
+ // 録画時間または録画ファイルサイズを制限する
138
+
139
+ mMediaRecorder.setOnInfoListener( this );
140
+
141
+ mMediaRecorder.setMaxDuration( VIDEO_DURATION );
142
+
143
+ mMediaRecorder.setMaxFileSize( VIDEO_FILESIZE );
144
+
145
+
146
+
147
+ // プレビュー用のSurfaceを設定する
148
+
149
+ mMediaRecorder.setPreviewDisplay( mSurfaceHolder.getSurface() );
150
+
151
+
152
+
153
+ Log.v("録画機能","8");
154
+
155
+
156
+
157
+ // 録画を開始する
158
+
159
+ try {
160
+
161
+
162
+
163
+ Log.v("録画機能","9");
164
+
165
+ mMediaRecorder.prepare();
166
+
167
+ mMediaRecorder.start();
168
+
169
+ } catch ( IOException ex ) {
170
+
171
+ ex.printStackTrace();
172
+
173
+
174
+
175
+
176
+
177
+ // 録画に失敗した場合はクリーンアップする
178
+
179
+
180
+
181
+ // Serviceのフォアグラウンド化を解除する
182
+
183
+ stopForeground( true );
184
+
185
+
186
+
187
+ // MediaRecorderとCameraを解放する
188
+
189
+ mMediaRecorder.release();
190
+
191
+ mCamera.lock();
192
+
193
+ mCamera.release();
194
+
195
+
196
+
197
+ isRecording = false;
198
+
199
+
200
+
201
+ // バイブレーションで通知する
202
+
203
+ ( (Vibrator)getSystemService( VIBRATOR_SERVICE ) ).vibrate( 3000 );
204
+
205
+ }
206
+
207
+ }
60
208
 
61
209
  ```
210
+
211
+ ```java
212
+
213
+ <uses-permission android:name="android.permission.CAMERA" />
214
+
215
+ <uses-permission android:name="android.permission.RECORD_AUDIO" />
216
+
217
+
218
+
219
+ <uses-feature
220
+
221
+ android:name="android.hardware.camera"
222
+
223
+ android:required="false" />
224
+
225
+ <uses-feature
226
+
227
+ android:name="android.hardware.camera.autofocus"
228
+
229
+ android:required="false" />
230
+
231
+ <uses-feature
232
+
233
+ android:name="android.software.leanback"
234
+
235
+ android:required="false" />
236
+
237
+ <uses-feature
238
+
239
+ android:name="android.hardware.touchscreen"
240
+
241
+ android:required="false" />
242
+
243
+
244
+
245
+ ```