728x90
Intent filter
- Call 버튼을 누르면 자신의 학번을 dialog에 전달하는 기능을 구현
1. 소스코드) 각 과제 구현에 대한 소스 코드
private void createDialog(){
//기본 AlertDialog instance 를 생성한다.
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//제목과 내용에 학번과 이름을 작성한다.
builder.setTitle("201724447").setMessage("김태형");
final AlertDialog alertDialog = builder.create();
//화면상에 띄운다.
alertDialog.show();
}
- Web버튼을 누르면 학과 홈페이지로 이동하는 예제 구현
1. 소스코드) 각 과제 구현에 대한 소스 코드
private void gotoWeb(){
//ACTION_VIEW 라는 암시적 호출을 통해 학과 링크랑 전달하여 웹뷰를 연다.
startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("http://cse.pusan.ac.kr/cse/index.do")));
}
Notification
- 버튼을 누르면 자신의 학번, 이름이 나오는 Notification 생성
1. 소스코드) 각 과제 구현에 대한 소스 코드
private void makeNotification(){
//Notification 인스턴스를 만들고 builder를 통해 세부 내용을 설정한다.
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "default");
//빌더를 통해 아이콘, 타이틀, 내용을 설정한다.
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setContentTitle("201724447");
builder.setContentText("김태형");
//컬러를 설정한다.
builder.setColor(Color.RED);
// 사용자가 탭을 클릭하면 자동 제거
builder.setAutoCancel(true);
// 알림 표시
NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
notificationManager.createNotificationChannel(new NotificationChannel("default", "기본 채널",
NotificationManager.IMPORTANCE_DEFAULT));
}
// id값은
// 정의해야하는 각 알림의 고유한 int값
notificationManager.notify(1, builder.build());
}
Service
- 버튼을 누르면 자신의 학번과 이름이 출력되도록 하는 서비스 구현
- 이름의 출력은 일정 주기로 Toast 또는 Notification을 출력
- 어플리케이션 내에서 주기적으로 돌아가고 있음을 확인 할 수 있도록 할 것
1. 소스코드) 각 과제 구현에 대한 소스 코드
-MainActivity에서 MyService.class 에 명시된 서비스를 실행한다.
private void startService() {
// 서비스 시작하기
Intent intent1 = new Intent(
getApplicationContext(),//현재제어권자
MyService.class); // 이동할 컴포넌트
startService(intent1); // 서비스 시작
}
-MyService.class
public class MyService extends Service {
private int count = 0;
private Timer T = new Timer();
private Handler mHandler;
//Service 에서 직접 UI 단을 업데이트 할 수 없기 때문에 핸들러를 사용하여 Toast를 작성한다.
private class ToastRunnable implements Runnable {
String mText;
public ToastRunnable(String text) {
mText = text;
}
@Override
public void run() {
Toast.makeText(getApplicationContext(), mText, Toast.LENGTH_SHORT).show();
}
}
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
// Service 객체와 (화면단 Activity 사이에서)
// 통신(데이터를 주고받을) 때 사용하는 메서드
// 데이터를 전달할 필요가 없으면 return null;
return null;
}
@Override
public void onCreate() {
super.onCreate();
// 서비스에서 가장 먼저 호출됨(최초에 한번만)
Toast.makeText(this,"서비스시작",Toast.LENGTH_SHORT).show();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// 서비스가 호출될 때마다 실행
mHandler = new Handler();
//1초당 한회씩 Toast를 띄운다.
T.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
Log.e("service counter start: ", String.valueOf(count));
count++;
mHandler.post(new ToastRunnable(count + "초 : 201724447 김태형"));
}
}, 1000, 1000);
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
// 서비스가 종료될 때 실행
T.cancel();
}
}
Alarm ( AlarmManager)
- 버튼을 누르면 일정시간 간격 마다 자신의 학번 및 이름을 출력하도록 하는 알람 구현
- Toast 또는 Notification과 같이 어플리케이션 내부에서 출력할 수 있는 장치로 학번 및 이름을 출력할 것
1. 소스코드) 각 과제 구현에 대한 소스 코드
-MainActivity
private void createAlarm(){
//브로드캐스트 리시버 클래스를 명시해준다.
Intent intent = new Intent(MainActivity.this, Alarm_Reciver.class);
PendingIntent sender = PendingIntent.getBroadcast(MainActivity.this,30,intent,0);
//알람 매니저 인스턴스를 초기화 한다.
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
//반복알람을 설정해준다
//알람의 설정 가능한 최소단위는 1분이다.
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000*6,sender); // Millisec * Second * Minute
}
-Alarm_Reciver.class
public class Alarm_Reciver extends BroadcastReceiver {
Context context;
@Override
public void onReceive(Context context, Intent intent) {
this.context = context;
//알람이벤트를 리시브 하면 토스트를 띄워준다.
Toast.makeText(context,"60초마다 : 201724447 김태형", Toast.LENGTH_SHORT).show();
Log.e("Broadcast Receiver" ,"called");
}
}
전체코드
MainActivity.java
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn1, btn2, btn3, btn4, btn5;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = findViewById(R.id.btn1);
btn2 = findViewById(R.id.btn2);
btn3 = findViewById(R.id.btn3);
btn4 = findViewById(R.id.btn4);
btn5 = findViewById(R.id.btn5);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
btn3.setOnClickListener(this);
btn4.setOnClickListener(this);
btn5.setOnClickListener(this);
}
private void createDialog(){
//기본 AlertDialog instance 를 생성한다.
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//제목과 내용에 학번과 이름을 작성한다.
builder.setTitle("201724447").setMessage("김태형");
final AlertDialog alertDialog = builder.create();
//화면상에 띄운다.
alertDialog.show();
}
private void gotoWeb(){
//ACTION_VIEW 라는 암시적 호출을 통해 학과 링크랑 전달하여 웹뷰를 연다.
startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("http://cse.pusan.ac.kr/cse/index.do")));
}
private void makeNotification(){
//Notification 인스턴스를 만들고 builder를 통해 세부 내용을 설정한다.
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "default");
//빌더를 통해 아이콘, 타이틀, 내용을 설정한다.
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setContentTitle("201724447");
builder.setContentText("김태형");
//컬러를 설정한다.
builder.setColor(Color.RED);
// 사용자가 탭을 클릭하면 자동 제거
builder.setAutoCancel(true);
// 알림 표시
NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
notificationManager.createNotificationChannel(new NotificationChannel("default", "기본 채널",
NotificationManager.IMPORTANCE_DEFAULT));
}
// id값은
// 정의해야하는 각 알림의 고유한 int값
notificationManager.notify(1, builder.build());
}
private void startService() {
// 서비스 시작하기
Intent intent1 = new Intent(
getApplicationContext(),//현재제어권자
MyService.class); // 이동할 컴포넌트
startService(intent1); // 서비스 시작
}
private void createAlarm(){
//브로드캐스트 리시버 클래스를 명시해준다.
Intent intent = new Intent(MainActivity.this, Alarm_Reciver.class);
PendingIntent sender = PendingIntent.getBroadcast(MainActivity.this,30,intent,0);
//알람 매니저 인스턴스를 초기화 한다.
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
//반복알람을 설정해준다
//알람의 설정 가능한 최소단위는 1분이다.
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000*6,sender); // Millisec * Second * Minute
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1:
//Dialog
createDialog();
break;
case R.id.btn2:
//Web
gotoWeb();
break;
case R.id.btn3:
//Notification
makeNotification();
break;
case R.id.btn4:
//Service
startService();
break;
case R.id.btn5:
//Alarm
createAlarm();
break;
}
}
}
MyService.java
public class MyService extends Service {
private int count = 0;
private Timer T = new Timer();
private Handler mHandler;
//Service 에서 직접 UI 단을 업데이트 할 수 없기 때문에 핸들러를 사용하여 Toast를 작성한다.
private class ToastRunnable implements Runnable {
String mText;
public ToastRunnable(String text) {
mText = text;
}
@Override
public void run() {
Toast.makeText(getApplicationContext(), mText, Toast.LENGTH_SHORT).show();
}
}
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
// Service 객체와 (화면단 Activity 사이에서)
// 통신(데이터를 주고받을) 때 사용하는 메서드
// 데이터를 전달할 필요가 없으면 return null;
return null;
}
@Override
public void onCreate() {
super.onCreate();
// 서비스에서 가장 먼저 호출됨(최초에 한번만)
Toast.makeText(this,"서비스시작",Toast.LENGTH_SHORT).show();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// 서비스가 호출될 때마다 실행
mHandler = new Handler();
//1초당 한회씩 Toast를 띄운다.
T.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
Log.e("service counter start: ", String.valueOf(count));
count++;
mHandler.post(new ToastRunnable(count + "초 : 201724447 김태형"));
}
}, 1000, 1000);
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
// 서비스가 종료될 때 실행
T.cancel();
}
}
Alarm_Reciver.java
public class Alarm_Reciver extends BroadcastReceiver {
Context context;
@Override
public void onReceive(Context context, Intent intent) {
this.context = context;
Toast.makeText(context,"60초마다 : 201724447 김태형", Toast.LENGTH_SHORT).show();
Log.e("Broadcast Receiver" ,"called");
}
}
728x90
댓글