2020/12/14 - [안드로이드] - [안드로이드]ProgressBar(상태바) 반복 AsyncTask 만들어보기
이번 시간에는 일정 시간마다 사용자가 원하는 작업을 자동으로
돌아가게 하는 스케쥴작업을 만들어보겠습니다.
안드로이드에서는 JobSerivce를 지원하고 있습니다.
1. 권한구현(manifests -> AndroidManifest.xml)
application태그 위에 권한을 추가합니다.
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
2. 서비스구현(ExamJobService.java)
import android.app.job.JobParameters;
import android.app.job.JobService;
import android.util.Log;
public class ExamJobService extends JobService {
private static final String TAG = "ExamJobService";
private boolean jobCancelled = false;
//서비스 시작
@Override
public boolean onStartJob(JobParameters params) {
Log.d(TAG, "onStartJob");
doBackgroundWork(params);
return true;
}
//서비스 중지
@Override
public boolean onStopJob(JobParameters params) {
Log.d(TAG, "onStopJob");
jobCancelled = true;
return true;
}
private void doBackgroundWork(final JobParameters params){
new Thread(new Runnable() {
@Override
public void run() {
for(int i = 0; i < 10; i++){
Log.d(TAG, "run: " + i);
if(jobCancelled){
return;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Log.d(TAG, "Job finished");
jobFinished(params, false);
}
}).start();
}
}
3. 서비스 선언(manifests -> AndroidManifest.xml)
서비스를 사용하기 위해서는 AndroidManifest에 서비스를 선언해야 한다.
application태그 안에 선언합니다.
<service android:name=".ExamJobService"
android:permission="android.permission.BIND_JOB_SERVICE"/>
4. 메인 화면 구현(activity_main.xml)
간단하게 버튼 2개를 만듭니다. 하나는 스케줄 작업 시작, 하나는 스케쥴작업 취소
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/start_schedule"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/cancel_schedule"
android:layout_centerHorizontal="true"
android:text="Start Job" />
<Button
android:id="@+id/cancel_schedule"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_centerHorizontal="true"
android:text="Cancel Job" />
</RelativeLayout>
5. 메인 기능 구현(MainActivity.java)
import androidx.appcompat.app.AppCompatActivity;
import android.app.job.JobInfo;
import android.app.job.JobScheduler;
import android.content.ComponentName;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button startBtn = findViewById(R.id.start_schedule);
final Button cancelBtn = findViewById(R.id.cancel_schedule);
startBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
scheduleJob(v);
}
});
cancelBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cancelJob(v);
}
});
}
//스케쥴 시작
public void scheduleJob(View v){
ComponentName componentName = new ComponentName(this, ExamJobService.class);
//작업설정
JobInfo info = new JobInfo.Builder(123, componentName)
.setRequiresCharging(true) //충전중일 때
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)//네트워크 상태 설정
.setPersisted(true)
.setPeriodic(15 * 60 * 1000) //15분(주기적) 최소기준이 15분(1000 = 1초)
.build();
//setPeriodic 부팅 후 작업 실행여부설정 RECEIVE_BOOT_COMPLETED 권한설정해야함
//setMinimumLatency(TimeUnit.MINUTES.toMillis(1))1분 //얼마후에 실행되어야 하는지(한번만)
//NETWORK_TYPE_UNMETERED WIFI
//NETWORK_TYPE_CELLULAR 셀룰러
//NETWORK_TYPE_ANY 언제든
//NETWORK_TYPE_NONE 인터넷 연결 안되었을때
JobScheduler jobScheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);
//작업결과값
int resultCode = jobScheduler.schedule(info);
if(resultCode == jobScheduler.RESULT_SUCCESS){
Log.d(TAG, "작업 성공");
}else{
Log.d(TAG, "작업 실패");
}
}
//스케쥴 취소
public void cancelJob(View v){
JobScheduler scheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);
scheduler.cancel(123);
Log.d(TAG, "작업 취소");
}
}
6. 실행화면
[안드로이드]화면계속켜짐 상태로 만들어보기 FLAG_KEEP_SCREEN_ON (0) | 2020.12.17 |
---|---|
[안드로이드]SeekBar RGB 글씨 색상조절 만들어보기 (0) | 2020.12.16 |
[안드로이드]ProgressBar(상태바) 반복 AsyncTask 만들어보기 (0) | 2020.12.14 |
[안드로이드]스위치(Switch) On, Off 만들어 보기 (0) | 2020.12.12 |
[안드로이드]달력(CalendarView) 만들어보기 (0) | 2020.12.11 |
댓글 영역