読者です 読者をやめる 読者になる 読者になる

【Android】Service(サービス)を使用してバッググラウンドでアプリ実行

 

音楽などアプリで実行中に、

別のアプリを起動したら、音楽が止まってしまうと困りますよね。

 

そんなときにはService(サービス)を使用します。

Serviceは、バッググラウンドで実行が可能です。

 

-------------------------------------------------------------------------------------------------

AndroidManifest.xml

<application
  android:icon="@drawable/icon"
  android:label="@string/app_name">
  <service android:name=".MainService"/>
</application>

 

-------------------------------------------------------------------------------------------------

MainService.java

public class MainService extends Service {

    MediaPlayer mp;
    @Override
    public void onCreate() {
        super.onCreate();
    }
   @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        mp = MediaPlayer.create(this, R.raw.idontwanttobe);
        mp.start(); //res/raw/idontwanttobe.m4p ※音楽ファイル

        Intent activityIntent = new Intent(this, MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, activityIntent, 0);
        Notification notification = new Notification.Builder(this)
             .setContentIntent(pendingIntent)
             .build();
        startForeground(startId, notification);
        return START_STICKY;
    }
    @Override
    public void onDestroy() {
        mp.stop(); //中止
        super.onDestroy();
    }
    @Override
    public IBinder onBind(Intent intent) {
        return null;//bindService()で呼び出した場合
    }
}

 

-------------------------------------------------------------------------------------------------

MainActivity.java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

       Intent intent = new Intent(this, MainService.class);

       startService(intent); ※Serviceクラスの呼び出し
    }

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(this, MainService.class);
        stopService(intent);     ※ServiceのonDestroy()を呼ぶ
    }

}