본문 바로가기
Android

Android 101

by HaningYa 2020. 3. 27.
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

댓글