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

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

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

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

Android

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

Android Studio

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

Q&A

解決済

1回答

560閲覧

Serviceが呼び出せません。どうすればいいのでしょうか?

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 08:25

このようなServiceのコードを書いたのですが、なぜか、Serviceが起動しません。
どうすればいいのでしょうか?

java

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

呼び出し元で書いたログは出力されています。

java

1buttonStart.setOnClickListener(new View.OnClickListener() { 2 @Override 3 public void onClick(View v) { 4 5 Toast.makeText(GpsGetActivity.this, "Pushed StartButton", 6 Toast.LENGTH_SHORT).show(); 7 8// Intent intent = new Intent(getApplication(), GpsService.class); 9// intent.putExtra("start/stop", "start"); 10// startService(intent); 11 12 Intent intent = new Intent(getApplication(), RecorderService.class); 13 startService(intent); 14 15 Log.v("Service:onCreate()","いいいいいあああああああああああああああ"); 16 17 18 findViewById(R.id.button_movie_start).setVisibility(View.VISIBLE); 19 20 } 21 });

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

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

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

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

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

guest

回答1

0

自己解決

Manifest.xmlにService名を追加して解決しました。

投稿2017/08/02 08:58

giant

総合スコア132

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問