반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- remote config
- autolayout
- LazyHStack
- NavigationLink
- UIScrollView
- Swift
- Realtime Database
- ios
- swipe
- subscript
- 다크모드
- Apple
- RxSwift
- Firebase
- string
- gcd
- Android
- Alamofire
- 웹뷰
- 문자열
- Observable
- github
- Java
- UIButton
- 라이트모드
- SwiftLint
- WebView
- SwiftUI
- dictionary
- UITabBarController
Archives
- Today
- Total
점진적 과부하 개발 블로그
Android RxJava 본문
반응형
RxDialog
xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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/btnDialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="자료조회"
android:onClick="onClick"/>
</LinearLayout>
main
package com.induk;
import androidx.appcompat.app.AppCompatActivity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.core.Scheduler;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.functions.Consumer;
import io.reactivex.rxjava3.schedulers.Schedulers;
public class MainActivity extends AppCompatActivity {
Disposable backgroundTask;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClick(View view) {
runRx();
}
private void runRx() {
ProgressDialog asynDialog = new ProgressDialog(this);
asynDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
asynDialog.setMessage("자료를 조회하는 중입니다.");
asynDialog.show();
Observable obs = Observable.fromCallable(
() -> {
try {
for(int i=0; i < 6; i++) {
asynDialog.setProgress(i * 20);
Thread.sleep(3 * 1000);
Log.d("fromCallable", "_______________" + (i * 20));
}
} catch (Exception ex) {
}
return "ok";
}
);
backgroundTask = obs.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(
new Consumer<String>() {
@Override
public void accept(String msg) throws Throwable {
Log.d("Accept", "___________________________" + msg);
asynDialog.dismiss();
backgroundTask.dispose();
}
}
);
}
}
Notification
xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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/btnNotification"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="알림생성"
android:onClick="onClick"/>
</LinearLayout>
main
package com.induk;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.core.Scheduler;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.functions.Consumer;
import io.reactivex.rxjava3.schedulers.Schedulers;
public class MainActivity extends AppCompatActivity {
String NOTIFICATION_CHANNEL_ID = "my_channel_id_01";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
private void createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = new NotificationChannel(
NOTIFICATION_CHANNEL_ID, "My Channel", NotificationManager.IMPORTANCE_DEFAULT);
notificationChannel.setDescription("My Notifications");
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.createNotificationChannel(notificationChannel);
}
}
public void onClick(View view) {
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com/"));
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
notificationBuilder.setSmallIcon(R.drawable.ic_alarm) // drawble에 Notification imageAsset 추가
.setContentTitle("메일알림")
.setContentText("알림이 도착하였습니다.")
.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(1, notificationBuilder.build()); // 실제 Notification의 인스턴스
}
}
Time Picker
xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="예약을 원하는 시간을 선택하시오."
android:textAppearance="?android:attr/textAppearanceMedium" />
<TimePicker
android:id="@+id/timePicker1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp" />
<Button
android:id="@+id/set_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:onClick="displayTime"
android:text="선택"/>
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="선택된 시간"
android:layout_marginTop="20sp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_gravity="center"/>
</LinearLayout>
main
package com.induk;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.TimePicker;
import java.util.Calendar;
import java.util.Locale;
import java.util.TimeZone;
public class MainActivity extends AppCompatActivity {
private TimePicker timePicker1;
private TextView time;
private Calendar calendar;
private String format = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
timePicker1 = (TimePicker) findViewById(R.id.timePicker1);
time = (TextView) findViewById(R.id.textView3);
calendar = Calendar.getInstance(TimeZone.getTimeZone("Asia/Seoul"), Locale.KOREA);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int min = calendar.get(Calendar.MINUTE);
timePicker1.setHour(hour);
timePicker1.setMinute(min);
showTime(hour, min);
}
public void displayTime(View view) {
int hour = timePicker1.getHour();
int min = timePicker1.getMinute();
showTime(hour, min);
}
public void showTime(int hour, int min) {
if (hour == 0) {
hour += 12;
format = "AM";
} else if (hour == 12) {
format = "PM";
} else if (hour > 12) {
hour -= 12;
format = "PM";
} else {
format = "AM";
}
time.setText(new StringBuilder().append(hour).append(" : ").append(min)
.append(" ").append(format));
}
}
반응형
'Android' 카테고리의 다른 글
Android 14주차 (0) | 2022.06.13 |
---|---|
Android 테이블 레이아웃/ 상대적 레이아웃 (0) | 2022.04.18 |
Android 가중치(weight) (0) | 2022.04.17 |
Android에서 이미지뷰 사용 (0) | 2022.04.16 |
Android 사용자 인터페이스 기초 (0) | 2022.04.15 |