2026/02/12
오늘의 이야기
#스치니1000프로젝트 #재미 #행운기원 #Compose #Firebase
🎯 야 너 토요일마다 로또 확인하냐?
나도 맨날 "혹시나~" 하면서 봤거든 ㅋㅋ
근데 이제는 그냥 안 해
AI한테 맡겼어 🤖✨
그것도 구글 Gemini로다가!
그래서 앱 하나 만들었지
👉 "로또 예상번호 by Gemini" 🎱
AI가 분석해서 번호 딱! 뽑아줌
그냥 보고 참고만 하면 됨
재미로 해도 좋고…
혹시 모르는 거잖아? 😏
https://play.google.com/store/apps/details?id=com.billcorea.gptlotto1127
오늘의 이야기
온라인으로 동시에 여러사람이 사용할 앱을 만들고 싶다. 그런데 동시에 데이터를 볼 수 있어야 한다면
내가 운영할 서버를 만들어야 한다.
방법으로는 호스팅 서비스를 이용해서 업무를 주고 받을 서버를 구축하고 사용하거나,
내가 관리할 수 있는 위치에 서버을 구성하는 방법이 있을 것 같다.
그러나, 이렇게 운영하기에는 해야할 일이 많고, 관리할 수 있는 여력이 안될 수 도 있다.
그떄 나오는 것이 Firebase 가 아닐까 싶은데...
이번에 Firebase 을 이용한 앱을 만들면서 사용했던 부분에 대한 정리를 해 둘까 ?
1. record 의 구성
Sqlite 을 사용할 때도 table 을 구성해야 하기 떄문에 반드시 데이터로 들어갈 항목에 대한 설계는 필요하다.
이와 마찬가지로 Firebase 을 사용하고자 할 떄도 항목은 정해야 한다. 예을 들면 아래 처럼
public class UserBean {
String userEmail ;
String userPassword ;
String userName ;
String userDept ;
String userDept1 ;
String deptCode ;
String deptCode1 ;
String masterTy ;
String useYn ;
public void Userbean() {
}
public void setUserEmail(String userEmail) {
this.userEmail = userEmail;
}
public String getUserEmail() {
return userEmail;
}
public void setUserPassword(String userPassword) {
// 패스워드는 암호화해서 기록하기
this.userPassword = StringUtil.makeSHA256(userPassword);
}
public String getUserPassword() {
return userPassword;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserName() {
return userName;
}
public void setUserDept(String userDept) {
this.userDept = userDept;
}
public String getUserDept() {
return userDept;
}
public void setDeptCode(String deptCode) {
this.deptCode = deptCode;
}
public String getDeptCode() {
return deptCode;
}
public void setUserDept1(String userDept1) {
this.userDept1 = userDept1;
}
public String getUserDept1() {
return userDept1;
}
public void setDeptCode1(String deptCode1) {
this.deptCode1 = deptCode1;
}
public String getDeptCode1() {
return deptCode1;
}
public void setMasterTy(String masterTy) {
this.masterTy = masterTy;
}
public String getMasterTy() {
return masterTy;
}
public void setUseYn(String useYn) {
this.useYn = useYn;
}
public String getUseYn() {
return useYn;
}
}
2 이제 데이터를 조회해 볼까 하는 데
Sqlite 라고 하다면...
public Cursor selectUserInfo() {
StringBuffer sb = new StringBuffer() ;
sb.append(" select userEmail, userPassword, userName, userDept, userDept1, deptCode, deptCode1, masterTy, useYn ");
sb.append(" from userInfo ");
sb.append(" order by userEmail ") ;
Cursor cursor = db.rawQuery(sb.toString(), null) ;
return cursor ;
}이렇게 구현을 해서 MainActivity 안에서 Cursor 을 활용해서 데이터를 조회한다고 할 수 있다.
그럼 Firebase 의 ReailTime Database 는 어떻게 ?
DatabaseReference mDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
mDatabase = FirebaseDatabase.getInstance().getReference("users");
...
}
public void getDisplayData() {
mDatabase.orderByChild("userEmail").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
userBeanListArray.clear();
for(DataSnapshot dataSnapshot : snapshot.getChildren()) {
userBeanListArray.add(dataSnapshot.getValue(UserBean.class));
Log.i(TAG, dataSnapshot.getValue(UserBean.class).getUserEmail());
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
}) ;
}이런 모양으로 구성이 될 수 있다.
여기서 한가지 알고 가야할 것은
addListenerForSingleValueEvent() 와 addValueEventListener() 의 차이가 아닐까 하는 생각이 든다.
어떤게 더 유리하게 동작을 할 지는 알 수 없지만.
addValueEventListener() 을 이용하는 경우는 항목이 변화되는 경우(추가/삭제/수정) 실시간으로 데이터가 반영되는 역활을 하고 있고, addListenerForSingleValueEvent() 을 이용하게 되면, 조회를 시도하는 경우에만 새로운 데이터를 가지고 온다는 것이다.
addValueEventListener()는 이벤트가 생길떄 마다 다시 데이터를 갱신하기 때문에 데이터 조회하는 양이 많아지게 되는 단점이 있기는 하지만, 장점은 실시간으로 변하는 데이터를 화면에 보여주는 등의 기능을 구현할 수 있기 때문에 여려사용자가 동시에 같은 내용을 보고 있다면 도움이 될 수 있을 것으로 보인다.
addListenerForSingleValueEvent() 는 실시간 갱신이 되지 않고 조회시마다만 갱신을 하기 때문에 데이터 조회하는 양은 조절이 될 수 있다, 단점으로는 사용자가 데이터 갱신여부를 계속해서 확인을 해야 한다는 것이다.
두 가지 차이점에 대해서는 적용하기에 따라 달라 질 수 있으니 개발시에 주의가 되어야 할 것 같다.
오늘의 이야기
자료출처 : dev.re.kr/2
[Tip] 항상 흐르는 텍스트 뷰 만들기 (무한 marquee)
안드로이드에서 흐르는 텍스트를 만드는 방법은 무척 간단하다. Layout 리소스 XML 의 TextView (또는 TextView 가 들어간 위젯) 속성에 다음과 같이 세 줄만 추가해 주면 된다. android:ellipsize="marquee" a..
dev.re.kr
앱을 만들다 보니... 화면의 크기는 한계가 있고 나타날 글짜는 많고...
그래서 또 구글링~~~ 그러다가 찾은 것이 위에 있는 링크에서 도움을 받았다.
저 링크에 있는 소스 예제는 android 빌드 버전에 예전꺼 일 때 만든 것 같고...
build 버전 28.0.0 이후 부터는 androidx 로 이전을 해야 하는데, 조금의 설정 수정이 필요해서 수정했다.
androidx.appcompat.widget.AppCompatTextView만 수정한 것 같은 생각이... ㅋㅋㅋ
import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
public class MarqueeTextView extends androidx.appcompat.widget.AppCompatTextView {
String TAG = "MarqueeTextView" ;
public MarqueeTextView(Context context) {
super(context);
}
public MarqueeTextView(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
}
@Override
protected void onFocusChanged(boolean focused, int direction, Rect
previouslyFocusedRect) {
//Log.d(TAG, "getMarqueeRepeatLimit onFocusChanged(" + this.getMarqueeRepeatLimit() + ")") ;
if(focused)
super.onFocusChanged(focused, direction, previouslyFocusedRect);
}
@Override
public void onWindowFocusChanged(boolean focused) {
//Log.d(TAG, "getMarqueeRepeatLimit onWindowFocusChanged (" + this.getMarqueeRepeatLimit() + ")") ;
if(focused)
super.onWindowFocusChanged(focused);
}
@Override
public boolean isFocused() {
return true;
}
}
위와 같이 수정하고 나서, layout 에서는
<MarqueeTextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:ellipsize="marquee"
android:fontFamily="@font/noto_sans_bold"
android:gravity="center_horizontal|center_vertical"
android:includeFontPadding="false"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:textSize="12sp" />와 같이 TextView 을 추가하고 그 안에 값을 넣어주면 흐르는 글씨를 만들 수 있다.
기본 제공되는 TextView 에서도
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
위 2개 항목을 넣어주면 같은 처리가 되기는 하지만, 해당 TextView 에 포커스가 가 있는 경우만 글자가 흐르기 때문에
위에서 보여준 것 처럼 나만의 TextView 로 수정을 해서 사용하게 되면 항상 흐르는 글짜를 볼 수 있다.
다만, ListView 에 넣어 사용하게 되는 경우는 좀 헛짓를 하는 경우가 있기는 했다.
오늘의 이야기
#스하리1000명프로젝트
스치니들!
내가 만든 이 앱은, 내 폰에 오는 알림 중에서 중요한 키워드가 있는 경우
등록해둔 친구에게 자동으로 전달해주는 앱이야 📲
예를 들어, 카드 결제 알림을 와이프나 자녀에게 보내주거나
이번 달 지출을 달력처럼 확인할 수도 있어!
앱을 함께 쓰려면 친구도 설치 & 로그인해줘야 해.
그래야 친구 목록에서 서로 선택할 수 있으니까~
서로 써보고 불편한 점 있으면 알려줘 🙏
👉 https://play.google.com/store/apps/details?id=com.nari.notify2kakao
오늘의 이야기
자료출처 : stackoverflow.com/questions/26533347/format-currency-string-using-edittext-in-android
Format currency string using EditText in Android
I'm trying to format the input value of an EditText in Android, I want to format the input in currency value, I' ve tried the following: EditText minimo = (EditText) view.findViewById(R.id.
stackoverflow.com
어느 분의 요청으로 앱에 숫자 입력을 마치 계산기 처럼 숫자를 입력하면 3자리 마다 콤마가 나오게 하는 방법을 찾아 보다가 위의 링크를 보게 되었다.
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import java.text.DecimalFormat;
import java.text.ParseException;
public class NumberTextWatcher implements TextWatcher {
private DecimalFormat df;
private DecimalFormat dfnd;
private boolean hasFractionalPart;
private EditText et;
public NumberTextWatcher(EditText et)
{
df = new DecimalFormat("#,###.##");
df.setDecimalSeparatorAlwaysShown(true); // 소숫점 이하를 표시할 까 ?
dfnd = new DecimalFormat("#,###");
this.et = et;
hasFractionalPart = false; // 분수여부 ?
}
@SuppressWarnings("unused")
private static final String TAG = "NumberTextWatcher";
public void afterTextChanged(Editable s)
{
et.removeTextChangedListener(this);
try {
int inilen, endlen;
inilen = et.getText().length();
// 입력된 값에서 숫자만 추출
String v = s.toString().replace(String.valueOf(df.getDecimalFormatSymbols().getGroupingSeparator()), "");
Number n = df.parse(v);
int cp = et.getSelectionStart();
// 소숫점 입력 여부에 따라서
if (hasFractionalPart) {
et.setText(df.format(n));
} else {
et.setText(dfnd.format(n));
}
// 전체 입력된 길이를 기준으로 해서
endlen = et.getText().length();
int sel = (cp + (endlen - inilen));
// 한글짜씩 추가 하는 형식으로 처리
if (sel > 0 && sel <= et.getText().length()) {
et.setSelection(sel);
} else {
// place cursor at the end?
et.setSelection(et.getText().length() - 1);
}
} catch (NumberFormatException nfe) {
// do nothing?
} catch (ParseException e) {
// do nothing?
}
et.addTextChangedListener(this);
}
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
}
public void onTextChanged(CharSequence s, int start, int before, int count)
{
// 소숫점이 입력 되는 지를 체크
if (s.toString().contains(String.valueOf(df.getDecimalFormatSymbols().getDecimalSeparator())))
{
hasFractionalPart = true;
} else {
hasFractionalPart = false;
}
}
}
대강 필요한 부분의 기능을 살펴 보면 위에 소스에 달아 놓은 코멘트와 같지 않을 까 싶다.
그리고 layout 에서 주의할 것은 EditText 의 gravity 을 end 로 설정해서 입력하는 숫자가 오른쪽 끝에서 입력이 되도록 설정을 해야 내가 만든 앱에서 입력이 계산기 처럼 숫자가 입력될 때 표시가 되는 효과를 느낄 수 있다.
오늘의 이야기
developer.android.com/topic/libraries/view-binding?hl=ko
뷰 결합 | Android 개발자 | Android Developers
뷰 결합 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있습니다. 모듈에서 사용 설정된 뷰 결합은 모듈에 있는 각 XML 레이아웃 파일의 결합 클래스를 생성합니다. 바인딩 클래스의
developer.android.com
이건 뭔가 하는 생각이 들때 한번 해보면 편하게 적용할 수 있다는 것을 알게 된다.
예전 처음 안드로이드를 배울때 부터... 여태것 layout 에 버튼을 하나 달면 꼭 activity 내에서 다시 선언을 하고 나서야
그 버튼을 활용할 수 있었다.
Android Studio 3.6 Canary 11 이상에서만 적용이 된다고 나와 있기는 하지만, 그 이후에서 부터는 저기 기술된 것처럼
view binding 을 이용해 한줄 이라도 덜 코딩하는 마법(?)이 생겨난다.
이걸 구현 하기 위해서는 build.gradle 에 아래 예시 처럼 선언이 필요하다.
android {
...
viewBinding {
enabled = true
}
}
activity 소스 내에서는 layout 파일이름으로 바인딩을 먼저 선언하고
실제 사용에는 아래 예시와 같이 작성한 후 해당 layout 안에 있는 것들을 사용하면 된다.
ActivityMainBinding binding ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
View view = binding.getRoot() ;
setContentView(view);
setSupportActionBar(binding.toolbar);
binding.fabMenuSetting.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "Mesg", Toast.LENGTH_LONG).show();
}
});
}
이렇게 코딩을 함으로 해서 조금은 편하게 코딩을 할 수 있게 되는 것이다.
이보다 더 낮은 방법이 있을 수 도 있는데, 아직은 여기 까지...
오늘의 이야기
#스하리1000명프로젝트,
Soms is het moeilijk om met buitenlandse werknemers te praten, toch?
Ik heb een eenvoudige app gemaakt die helpt! Jij schrijft in jouw taal, en anderen zien het in hun taal.
Het vertaalt automatisch op basis van instellingen.
Superhandig voor makkelijke chats. Neem eens een kijkje als je de kans krijgt!
https://play.google.com/store/apps/details?id=com.billcoreatech.multichat416
오늘의 이야기
이번에 새로운 앱을 만들면서 적용해 보았던... Fab 에 대한 이해를 위해서
이걸 적용하게된 이유는 액션바를 제거해 달라는 요구가 있었기 때문에 액션바 때문에 화면의 일부를 사용할 수 없다는 게 불편하기도 하고 해서 다른 방법으로 메뉴를 구성해 보아야 했는데, google에 제공하는 Fab 보다는 쉽게 구현이 가능한 방법을 찾아보다가 아래 링크를 찾았다.
nambicompany.github.io/expandable-fab/
ExpandableFab
A highly customizable Android widget that displays the available actions of a UI via an expandable set of floating action buttons - with optional labels and fluid animations.
nambicompany.github.io
이걸 적용하기 위한 간단한 설명을 해 두고자 한다. 물론 위 링크를 따라다녀 보면 알 수 있는 내용이기는 하겠지만,
한번 찾았던 것을 다시 찾는 것도 힘든 일이기도 하고... 물론 그 사이에 추가 개선된 내용이 있어도 모르고 지나가는 불운(?)이 있을 지 모르지만...
일단 적용을 위해서는 build.gradle에 아래 한줄을 추가했다.
dependencies {
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.navigation:navigation-fragment:2.3.3'
implementation 'androidx.navigation:navigation-ui:2.3.3'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
implementation 'com.nambimobile.widgets:expandable-fab:1.0.2'
}
다른 것들은 기본적으로 생성되는 gradle 내용이고 빨간색 한줄만 추가해 주면 된다. 그리고 나서 gradle sync 실행으로 준비는 끝이다. (2021.2.16현재까지 제공된 버전은 1.0.2 인데.. 나중에는 업데이트가 될까 ?)
layout.xml 에 추가하는 내용은 아래와 같다...
구조는 ExpandableFabLayout 안에
Overlay : 화면 overlay을 위해서 필요하고 아래 예시 처럼 overlay_alpha 의 값을 지정하면
Fab 가 동작하는 동안 아래 화면을 흐리게 만들어 준다. 그런게 필요 없다면 없어도 무방~
ExpandableFab : 기본표시 되어야 하는 것
efab_iconAnimationRotationDeg 값을 조정하면 메뉴가 움직일떄 표시되는 + 기호의
움직임이 달라짐
FabOption : 이것은 메뉴로 나타나는 버튼을 추가할 수 있다. 몇개를 넣어도 되므로 화면에 나오는
구조에 따라서 여러개를 사용할 수 있다.
<com.nambimobile.widgets.efab.ExpandableFabLayout
android:id="@+id/expandable_fab_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.nambimobile.widgets.efab.Overlay
android:layout_width="match_parent"
android:layout_height="match_parent"
app:overlay_alpha="0.75"
app:overlay_color="#000000"
app:overlay_openingAnimationDurationMs="1000" />
<com.nambimobile.widgets.efab.ExpandableFab
android:id="@+id/expandable_fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_marginBottom="@dimen/ui_margin_medium"
android:layout_marginEnd="@dimen/ui_margin_medium"
app:efab_color="#9374DE"
app:efab_iconAnimationRotationDeg="-225"
app:efab_closingAnticipateTension="0"
app:label_text="@string/app_name"/>
<com.nambimobile.widgets.efab.FabOption
android:id="@+id/fab_menu_setting"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:fab_color="#FF8800"
app:fab_icon="@drawable/ic_launcher_foreground"
app:label_backgroundColor="#808080"
app:label_text="@string/action_settings"
app:label_textColor="#FFC0CB" />
</com.nambimobile.widgets.efab.ExpandableFabLayout
activity 내에서 사용은 아래 예시와 같이 간단하게 구현할 수 있다.
ActivityMainBinding binding ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
View view = binding.getRoot() ;
setContentView(view);
setSupportActionBar(binding.toolbar);
binding.fabMenuSetting.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "Mesg", Toast.LENGTH_LONG).show();
}
});
}
view binding 에 대해서는 나중에 또...
그럼~
오늘의 이야기
코딩알바를 하다 얻은 아이템을 모아 모아 모아서... 새로운 앱을 하나 만들었다... 마치 가계부 같은 기능을 구현 하기 위해서.
play.google.com/store/apps/details?id=com.billcoreatech.monthlyreceiver
알림다이어리 - Google Play 앱
1. 내폰안의 앱들의 알림을 이용 합니다. 2. 알림 수신 권한 부여가 필요합니다. 3. 알림을 이용하여 수입/지출 항목을 관리할 수 있습니다. 4. 기타 사항은 사용설명을 참조하세요. ---- 개발자 연
play.google.com
또한 이 앱에서 사용하는 아이콘은 Android Studio 4.1.2(2021.02.01 현재) 에서 제공하는 아이콘등을 참조했음을 밝혀 둔다. 그리고 이 앱의 기본화면등은 알바를 했던 앱을 참고해서 만들었다.

이앱의 이름은 알림다이어리 라는 제목으로 만들었다.
기능은 단순 무식 하다... 내 폰에 설치된 앱에서 알려 주는 모든 알림을 참조하여 내가 기록하고 싶은 앱에서 알려주는 문구들만 모아 기록을 한다.
그렇게 하다 보면 그날 그날 발생 되는 돈 나가는 일들,
수입이 생기는 일들이 자연스럽게 하나 하나 기록으로 남는다.
불필요한 알림 기록을 방지 하기 위해서 내폰에 있는 앱들에서 선택 하도록 하였습니다.
현재는 앱별로 수입/지출 한가지만 선택할 수 있지만,
아마 그거도 수정을 해야 할 것 같다.
선택적으로 관리할 수 있도록 ...

메뉴가 선택된 상태를 보여준다.
메뉴에는
설정 : 백업/ 복원 / 데이터 초기화 / CSV 파일 생성 기능이 있고
통계 : 앱별 수입/지출 통계를 볼 수 있고
검색 : 등록된 내용에서 특정 단어가 있는 경우를 찾아 볼 수 있으며
노트 : 일반적인 노트를 기록하고자 할 때 등록하고, (검색에서 조회 가능)
구분 : 내폰의 앱 목록에서 알림을 캐치할 대상을 조회 / 등록 할 수 있으며
도움말 : 이 페이지로 넘어 오는 링크가 동작함.
*** 인용알림
github.com/nambicompany/expandable-fab
이 앱에서 사용하는 fab 메뉴 기능은 위 링크에서 퍼온 것임을 알림.
nambicompany/expandable-fab
A highly customizable 'speed dial' FloatingActionButton implementation. - nambicompany/expandable-fab
github.com

특정한 날자의 목록을 클릭하면 옆의 그림 처럼 날짜별 데이터를 볼 수 있거나 수정할 수 도 있다.
이 때 숫자입력시 사용하는 기능은 아래 링크를 참고했음을 밝혀 둔다.
*** 인용알림
안드로이드 EditText Number Format 숫자 3자리 마다 콤마 나타내기
안녕하세요. 개발자 드리머즈입니다. 이 포스트에서 안드로이드 EditText에 숫자를 입력하면 3자리마다 콤마가 자동으로 찍히게 하는 방법을 알아보겠습니다. 백문이 불여일견이라고 위의 gif를
dreamaz.tistory.com

설정 화면 에서는
백업 : 앱에 등록된 모든 정보를 백업해 둠
백업 경로는 /sdcard/Android/data/앱경로/files 아래에 날자별로 이름을 가진 sqlite 파일로 백업됨 (단, 앱을 삭제하면 같이 삭제되는 경로이기 떄문에 필요하다면 다른 곳으로 옮겨서 보관을 해야 함.)
복원은 앱에서 백업해 두었던 sqlite 파일을 기준으로 다시 복원 하고자 하는 경우에 사용, 다만, 복원시에는 이미 등록했던 데이터가 없어질 수 있으므로 주의가 필요함.
CSV만들기는 금액이 들어 있는 일부 데이터만 csv 파일 형식으로 저장을 하고 있음 (경로는 백업 경로와 동일)
데이터 초기화는 말 그대로 데이터을 초기화 하는 기능인데, 구분 메뉴에서 입력한 앱에 대한 정보는 초기화 되지 않음.


통계 메뉴에서는 한달간의 수입/지출을 집계해 볼 수 있도록 하고 있으며
주간 단위로 산출도 가능하도록 하고 있음
또는 앱별로 수입/지출을 구분해서 집계도 할 수 있으므로 참고가 될 수 있음. (예을 들면 특정앱을 사용하는 카드의 지출이 많으지도 파악 가능)

검색 메뉴에서는 입력된 모든 자료를 검색할 수 있으며 검색은 제목이나, 내용중에 검색할 단어가 들어 있다면 모두다 조회가 될 수 있도록 구성 되며,
검색된 리스트를 클릭하면 수정할 수 있도록 해당화면으로 이동도 지원됨

노트 메뉴에서는 간단한 제목 과 내용을 입력할 수 있으며, 화면내에서는 노트만을 대상으로한 검색도 지원된다.
화면에서 검색(돋보기)버튼 클릭시에는 노트 내용을 검색하며,
추가(+)버튼을 클릭 하면 그림과 같이 팝업화면에서 내용을 입력하고 저장할 수 있다.
리스트에서 클릭시에는 수정/삭제를 할 수 있는 팝업으로 이동한다.

구분메뉴에서는 내폰에 설치된 앱목록을 보여주고 해당 앱을 클릭했을 때, 수입/지출 구분 을 입력하면 사용여부가 체크 되는 방식으로 저장한다.
설정화면에서 데이터 초기화를 해도 이 내용은 초기화가 되지 않는다.
화면의 사용여부 를 클릭하면, 사용여부 선택된 리스트만 나오기도 하고
사용여부를 클릭하면 전체 앱 목록이 나오기도 한다.
사용여부오른쪽의 ... 클릭시에는 앱을 찾을 수 있는 검색 기능도 지원된다.
이상으로 간단하게 알림다이어리 앱의 사용설명을 정리한다. 2021.02.15 ~
더 궁금한 부분은 댓글을 달아 주시면 추가 설명을 하도록 할께요.... 읽어 주셔서 감사합니다.
오늘의 이야기
#billcorea #운동동아리관리앱
🏸 Schneedle, een onmisbare app voor badmintonclubs!
👉 Matchplay - Registreer scores en vind tegenstanders 🎉
Perfect voor overal, alleen, met vrienden of in een club! 🤝
Als je van badminton houdt, probeer het dan zeker
Ga naar appen 👉 https://play.google.com/store/apps/details?id=com.billcorea.matchplay
오늘의 이야기

지원하는 기능은 앱에서 나오는 알림(notify) 을 수신하기
등록한 문구(단어)가 들어 있는 알림(notify) 문자(SMS) 수신시 기록하기
등록한 전화번호에서 오는 SMS 수신시 기록하기
등록한 전화번호에서 들어오는 전화수신시 팝업창 안내 및 메모등록 하기 (음성메모지원)




날짜별로 전화수신된 내역을 볼 수 있습니다
메모가 등록된 경우는 상세 조회도 가능 합니다
설정메뉴 화면인데요
앱설정은 폰에 설치된 앱 목록에서 알림을 저장할 앱을 선택할 수 있습니다.
알림문자는 수신된 문장에서 추출할 문자(단어)을 기록 / 선택 할 수 있습니다.
알림전화번호는 수신된 전화번호에서 오는 문장만 기록으로 남기도록 할 수 있습니다.
거래처전화번호는 전화가 걸려오면 등록된 번호가 있을 때 메모할 수 있는 창을 실행할 수 있도록 구현 됩니다.
내폰에 설치된 앱 목록에서 알림을 캐치할 앱을 선택 합니다.
알림 문장에서 캐치할 문자(단어)를 추가하고 사용여부를 선택할 수 있습니다.

문자를 수신할 전화번호를 추가할 수 있습니다.

전화수신할 떄 메모를 기록할 창을 나오게할 전화번호 와 상대방 이름을 기록해 둡니다.

전화가 수신 되면 등록했던 번호인지 확인하고
팝업을 클릭하거나,
통화를 하고 끊는 시점에 메모을 기록할 팝업창을 실행 합니다.

수신전화번호와 통화를 하고 끊었을 때 등록할 기록을 보여 줍니다.

알림전화번호에서 온 문자를 보여주는 화면 입니다.

알림문자 에서 수신된 문장 목록을 보여 줍니다.
오늘의 이야기
반응형 android studio 을 이용해서 개발을 하다 보면 간혹 만나는 오류들이 여러가지가 있다면 그중에 황당한 경우라면 아마도 RuntimeException 으로 오류가 나는 경우일 것 같다. 1. 구글링을 해보자... 안드로이드를 책으로 배우...