분류 전체보기
-
맥 런치패드 아이콘 제거2021.03.07
-
[Android] EditText 천단위 콤마(,)설정하기2021.01.03
-
Blynk를 이용한 IoT스위치2020.12.07
-
[Android] 안드로이드 액티비티 세로고정2020.11.21
-
[Android] Keystore 보안2020.11.17
-
[Android] 퍼미션 권한체크(테드퍼미션)2020.11.11
맥 런치패드 아이콘 제거
런치패드에서 꾹 눌러도 제거 되지 않는 아이콘이 있습니다. 😳
이럴 경우에는
1. Finder를 열어서
2. Home -> 응용프로그램(Applications)를 들어가시면
삭제되지 않던 파일들이 있습니다.
해당 파일들을 제거해주시면 런치패드가 깔끔해집니다😊
제거 방법을 자꾸 까먹어서 기록도 할겸 올립니다.
[Android] EditText 천단위 콤마(,)설정하기
EditText 천단위 콤마(,)설정하기
EditText를 작성할 때, TextWatcher를 이용해 천단위마다 콤마(,)를 찍을 수 있습니다.
여러 개의 EditText에 콤마(,) 설정을 하기위해서는 콤마설정을 하는 커스텀을 만들어주면 됩니다.
CustomTextWathcer 클래스
public class CustomTextWatcher implements TextWatcher {
private EditText editText;
String strAmount = "";
CustomTextWatcher(EditText et) {
editText = et;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(!TextUtils.isEmpty(s.toString()) && !s.toString().equals(strAmount)) {
strAmount = makeStringComma(s.toString().replace(",", ""));
editText.setText(strAmount);
Editable editable = editText.getText();
Selection.setSelection(editable, strAmount.length());
}
}
@Override
public void afterTextChanged(Editable s) {
}
protected String makeStringComma(String str) { // 천단위 콤마설정.
if (str.length() == 0) {
return "";
}
long value = Long.parseLong(str);
DecimalFormat format = new DecimalFormat("###,###");
return format.format(value);
}
}
makeStringComma는 천단위마다 콤마설정을 합니다.
그리고 onTextChanged에서 EditText에 값이 입력될 때마다 천단위에 콤마를 찍어줍니다.
edittext.addTextChangedListener(new CustomTextWathcher(edittext));
addTextChangedListener로 커스텀(CustomTextWatcher)을 사용하면 됩니다.
'안드로이드 > Android' 카테고리의 다른 글
[Android] Handler로 딜레이 주기 (0) | 2021.03.17 |
---|---|
[Android] getId() 문자 가져오기 (0) | 2021.03.17 |
[Android] 앱 내에서 구글플레이로 이동방법 (1) | 2020.11.22 |
[Android] 안드로이드 액티비티 세로고정 (0) | 2020.11.21 |
[Android] Keystore 보안 (0) | 2020.11.17 |
Blynk를 이용한 IoT스위치
Blynk를 이용한 IoT스위치
준비물 : Wemos D1 mini, 서보모터
ESP8266 중 하나인 Wemos D1 mini를 이용해서 IoT스위치를 제작해보겠습니다.
시중에서 판매중인 스위치봇처럼 외부에서 스위치를 작동시킬 수 있습니다.
Blynk 앱으로 ON/OFF 및 타이머 설정 등이 가능합니다.
보일러에 있는 기본 예약기능은 0~12시간 중 원하는 예약시간을 설정하면 30분간 난방한 후 정지되고
다시 난방을 반복하는 방식입니다.
지식인에 "보일러 시간"이라고만 검색해도 많은 사람들이 보일러의 예약기능에 대해서 어려워합니다.
보일러를 사용하는 사람들이라면 저처렴 원하는 시간에 켜고, 원하는 시간에 끌 수 있게 하고 싶을겁니다.
그래서 IoT스위치를 만들어서 보일러 제어 해보겠습니다.
서보모터의 갈색(GND), 빨간색(VCC), 주황색(데이터) 입니다.
5V - 빨간색
G - 갈색
D4 - 주황색
에 연결하면 하드웨어적인 부분은 끝.
#define BLYNK_PRINT Serial #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #include <Servo.h> char auth[] = "인증키"; // blynk auth 코드 입력하기 char ssid[] = "wifi이름"; // wifi 이름 입력하기 char pass[] = "WiFi비밀번호"; // wifi 비밀번호 입력하기 Servo myservo; BLYNK_WRITE(V1){ myservo.write(param.asInt()); } void setup() { Serial.begin(115200); Blynk.begin(auth,ssid,pass); myservo.attach(D4); } void loop() { Blynk.run(); }
Wemos D1을 연결해서 아두이노 스케치로 업로드시켜줍니다.
인증키는 Blynk앱에서 받은 인증키를 입력하시면 됩니다.
Wifi이름 및 비밀번호는 사용하고 계시는 Wifi의 정보를 입력해주시면 됩니다.
(※올레공유기는 시도해봤으나 연결이 잘 안돼서 iptime으로 연결했습니다)
Blynk앱을 다운받습니다.
(※위 사진에 보드 모양에 빨간 표시가 뜨면 기기랑 연결이 안되서 뜨는 표시입니다)
여기까지하시면 작동되는걸 확인할 수 있습니다. ✌️
설치하기
대략적인 설치위치를 잡고
케이스를 제작하여 설치했습니다.
기본 스크류의 길이가 짧아 연장시켰습니다.
정상작동되는걸 확인하실 수 있습니다 :D
+ 추가
스크류가 마음에 들지 않아 레진으로
적당한 길이의 스크류를 제작했습니다.
끝.
'하드웨어 제작' 카테고리의 다른 글
푸시락스위치로 LG정수기냉장고 물 연속으로 받기 (2) | 2020.12.06 |
---|
푸시락스위치로 LG정수기냉장고 물 연속으로 받기
푸시락스위치로 LG정수기냉장고 물 연속으로 받기
준비물 : 푸시락스위치, 악어클립 2개, UTP 케이블 (또는 기타 케이블)
왼쪽이 집에서 구입한 냉장고 유형이고, 오른쪽이 제가 원했던 유형입니다.
왼쪽은 많은 양의 물을 담을 경우 계속 누르고 있어야 하지만,
오른쪽은 120ml, 500m, 1L, 연속과 같이 해당 용량을 터치 한번으로 받을 수 있는 기능이 기본 탑재 돼 있었습니다.
이 글은 계속 누르고 있어야 하는 불편함으로부터 시작했습니다......
어떤 방식으로 해야할지 고민을 하다가 아두이노에 서보모터를 연결해서 버튼을 누르면 눌러지게끔 만들어봤습니다.
하지만 이 방식은 선도 지저분해지고 서보모터가 정수기버튼 옆에 튀어나와있어 불편함이 많았습니다.
그래서 생각하다가 누르는 버튼 밑에 틈을 확인해봤습니다. 🧐
정수기 버튼을 누르면 연결된 리미트스위치를 누르게 되어
파란색 커버가 씌워진 전선 두개의 접점이 서로 연결되어 물이 나오는 원리인 것을 확인했습니다.
복잡하게 아두이노를 쓸 필요없이 두 선에 전선을 연결시켜 구매한 스위치에 연결만 시켜주면 눌렀을 때 물이 나오게 됩니다.
누르는 버튼을 분리할 수가 없어서 좁은 틈을 후레시로 비추고 스마트폰 카메라로 확인해가며 작업했습니다.
좁은 틈으로 작업해야해서 납땜 등을 할 수 없어 악어클립을 연결해 핀셋으로 집었습니다.
집느라 고생 좀 했습니다.
( 주의! 혹여나 다른 곳을 잘못 건드리면 감전의 위험이 있을 수 있습니다.)
고무커버 위쪽에 드러난 부분이 있는데 이 부분에 악어클립으로 집었습니다.
악어클립에 UTP케이블을 연결하여 밖으로 빼냈습니다.
이제 빼낸 선을 푸시락스위치에 연결하고 고정시켜주면 끝입니다. (스위치, UTP, 악어클립은 미리 연결했습니다)
구석에 글루건으로 고정!
완성!
실제 동작영상입니다.
푸시락스위치를 누르면 스위치를 다시 눌러 끄기 전까지 계속해서 나오게 됩니다.
많은 양의 물을 받을 때 유용하게 사용하고 있습니다. 👍👍👍👍👍
'하드웨어 제작' 카테고리의 다른 글
Blynk를 이용한 IoT스위치 (0) | 2020.12.07 |
---|
[Android] 앱 내에서 구글플레이로 이동방법
앱 내에서 구글플레이로 이동방법
안드로이드 앱 내부에서 현재 앱이나 기타 앱의 구글플레이 정보로 이동하게 되는 경우가 있습니다.
주로 앱 설정창에서 앱에 대한 평가를 하기 위해 이동처리를 해줍니다.
앱 내에서 연결할 때는
market://details?id=<패키지명>
을 사용하시면 됩니다.
패키지명은 일일이 입력하실 필요없이 getPackageName()을 이용하시면 해당 프로젝트의 패키지를 가져오게 됩니다.
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=" + getPackageName()));
startActivity(intent);
uri = Uri.parse("market://details?id=" + getPackageName());
startActivity(new Intent(Intent.ACTION_VIEW, uri));
둘 중에 편하신거 사용하시면 됩니다.
+ 구글플레이 해당 앱으로 이동하는 링크입니다.
http://play.google.com/store/apps/details?id=<패키지명>
'안드로이드 > Android' 카테고리의 다른 글
[Android] getId() 문자 가져오기 (0) | 2021.03.17 |
---|---|
[Android] EditText 천단위 콤마(,)설정하기 (0) | 2021.01.03 |
[Android] 안드로이드 액티비티 세로고정 (0) | 2020.11.21 |
[Android] Keystore 보안 (0) | 2020.11.17 |
[Android] 앱 번들(Android App Bundle) 만들기 (2) | 2020.11.17 |
[Android] 안드로이드 액티비티 세로고정
안드로이드 액티비티 세로고정
androidmanifest.xml에서 고정하고자하는 activity를 찾아서 태그 안에
android:screenOrientation="portrait"
을 추가해주시면 됩니다. (가로모드: landscape)
java 코드에서 적용을 하시려면
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
를 사용하시면 됩니다. setRequestedOrientation은 setContentView가 호출되기 이전에 작성을 해주셔야 합니다.
+ 기타 방향 설정
원하시는 설정을 적용하시면 됩니다. 아래값들은 안드로이드 가이드(바로가기) android:screenOrientation에서 확인하실 수 있습니다.
"unspecified" | 기본값입니다. 시스템이 방향을 선택합니다. 시스템이 사용하는 정책과 특정 컨텍스트에서 이루어지는 선택은 기기마다 다를 수 있습니다. |
"behind" | 액티비티 스택에서 바로 아래에 있는 액티비티와 동일한 방향입니다. |
"landscape" | 가로 방향입니다(디스플레이의 높이보다 너비가 더 긺). |
"portrait" | 세로 방향입니다(디스플레이의 너비보다 높이가 더 긺). |
"reverseLandscape" | 정상적인 가로 방향에서 반대 방향인 가로 방향입니다. API 레벨 9에서 추가되었습니다. |
"reversePortrait" | 정상적인 세로 방향에서 반대 방향인 세로 방향입니다. API 레벨 9에서 추가되었습니다. |
"sensorLandscape" | 기기 센서에 따라 정상적인 가로 방향 또는 반전된 가로 방향이 될 수 있습니다. 사용자가 센서 기반 회전을 잠갔더라도 센서가 사용됩니다. API 레벨 9에서 추가되었습니다. |
"sensorPortrait" | 기기 센서에 따라 정상적인 세로 방향 또는 반전된 세로 방향이 될 수 있습니다. 사용자가 센서 기반 회전을 잠갔더라도 센서가 사용됩니다. API 레벨 9에서 추가되었습니다. |
"userLandscape" | 기기 센서 및 사용자의 기본 설정에 따라 정상적인 가로 방향 또는 반전된 가로 방향이 될 수 있습니다. API 레벨 18에서 추가되었습니다. |
"userPortrait" | 기기 센서 및 사용자의 기본 설정에 따라 정상적인 세로 방향 또는 반전된 세로 방향이 될 수 있습니다. API 레벨 18에서 추가되었습니다. |
"sensor" | 기기 방향 센서가 방향을 결정합니다. 디스플레이 방향은 사용자가 기기를 잡고 있는 방법에 따라 다르며 사용자가 기기를 회전할 때 변경됩니다. 그러나 일부 기기는 기본적으로 4개의 모든 방향으로 회전하지 않습니다. 4개의 모든 방향을 허용하려면 "fullSensor"를 사용합니다. 사용자가 센서 기반 회전을 잠근 상태라도 센서가 사용됩니다. |
"fullSensor" | 기기 방향 센서가 4개의 방향을 결정합니다. 이는 4개의 화면 방향을 허용한다는 것을 제외하면 기기가 정상적으로 수행하는 것과 상관없이 "sensor"와 유사합니다. (예를 들어, 일부 기기는 세로 반전 또는 가로 반전을 정상적으로 사용하지 않지만 이 특성은 정상적으로 사용합니다.) API 레벨 9에서 추가되었습니다. |
"nosensor" | 물리적 방향 센서를 참조하지 않고 방향을 결정합니다. 센서가 무시되므로 사용자가 기기를 이동하는 방법에 따라 디스플레이가 회전하지 않습니다. |
"user" | 사용자의 현재 기본 설정 방향입니다. |
"fullUser" | 사용자가 센서 기반 회전을 잠금 설정한 경우 user와 동일하게 작동하고, 잠금 설정을 하지 않은 경우 fullSensor와 동일하게 작동하며 4개의 화면 방향을 허용합니다. API 레벨 18에서 추가되었습니다. |
"locked" | 현재 회전 방향을 잠금 설정합니다. API 레벨 18에서 추가되었습니다. |
'안드로이드 > Android' 카테고리의 다른 글
[Android] EditText 천단위 콤마(,)설정하기 (0) | 2021.01.03 |
---|---|
[Android] 앱 내에서 구글플레이로 이동방법 (1) | 2020.11.22 |
[Android] Keystore 보안 (0) | 2020.11.17 |
[Android] 앱 번들(Android App Bundle) 만들기 (2) | 2020.11.17 |
[Android] 퍼미션 권한체크(테드퍼미션) (0) | 2020.11.11 |
[Android] Keystore 보안
Keystore 보안
앱을 배포하기 위해 apk 또는 aab에 앱서명을 하게되면 build.gradle에
Keystore의 Alias, password, File경로가 나타나게 됩니다.
signingConfigs {
release {
storeFile file('keystore 경로')
storePassword '비밀번호'
keyAlias 'key()'
keyPassword '비밀번호'
}
}
이와 같이 keystore의 정보가 노출된 상태로 Github나 기타 사이트에 업로드되면 악용될 수 있습니다.
그러므로 별도의 keystore file을 만들어 보안을 강화하는 것을 권장합니다.
- 프로젝트 탭을 선택하신 후 루트디렉토리에다가 keystore.properties파일을 만들어줍니다.
- keystore.properties 작성
파일 내부에 keystore 값들을 작성해줍니다.
storeFile = 경로
storePassword = 비밀번호
keyAlias = 별칭
keyPassword = 비밀번호
- build.gradle 작성
상단에 apply와 android 사이에 keystore.properties의 값들을 불러오는 작업을 해줍니다.
// Keystore Security
def keystorePropertiesFile = rootProject.file("keystore.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
- signingConfigs 내부 수정
기존의 값들을 keystoreProperties['keyPassword']와 같이 바꿔주시면 됩니다.
signingConfigs {
debug {
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
}
}
이제 깃허브나 기타 사이트에 업로드하실 때 keystore.properties파일을 제외하고 업로드하시면 됩니다 :)
'안드로이드 > Android' 카테고리의 다른 글
[Android] 앱 내에서 구글플레이로 이동방법 (1) | 2020.11.22 |
---|---|
[Android] 안드로이드 액티비티 세로고정 (0) | 2020.11.21 |
[Android] 앱 번들(Android App Bundle) 만들기 (2) | 2020.11.17 |
[Android] 퍼미션 권한체크(테드퍼미션) (0) | 2020.11.11 |
[Android] 다른 액티비티에 접근하기 (0) | 2020.11.01 |
[Android] 앱 번들(Android App Bundle) 만들기
Android App Bundle 만들기
앱 제작을 완료한 후 apk파일이나 aab (Android App Bundle) 파일을 만드는 방법입니다.
- Build에서 Generate Signed Bundle / APK 클릭.
- 만들고자하는 확장자명 선택하시고 Next (aab 또는 apk 선택)
aab는 apk보다 경량화된 앱을 제공합니다.
- 처음 만드시는 분은 "Create new..."를 눌러줍니다.
- 빈칸을 입력해주시면 됩니다. OK & Next
( ※ 주의: 키파일이랑 비밀번호를 분실하시면 추후에 앱 업데이트가 불가능합니다.)
- Finish를 눌러주시면 aab파일이 생성됩니다.
apk파일도 같은 방법으로 생성하실 수 있습니다.
'안드로이드 > Android' 카테고리의 다른 글
[Android] 안드로이드 액티비티 세로고정 (0) | 2020.11.21 |
---|---|
[Android] Keystore 보안 (0) | 2020.11.17 |
[Android] 퍼미션 권한체크(테드퍼미션) (0) | 2020.11.11 |
[Android] 다른 액티비티에 접근하기 (0) | 2020.11.01 |
[Android] 다른 액티비티에서 환경설정(Preference) 사용하기 (0) | 2020.10.30 |
[Android] 퍼미션 권한체크(테드퍼미션)
퍼미션 권한체크
테드퍼미션 https://github.com/ParkSangGwon/TedPermission
박상권님 블로그 주소 : gun0912.tistory.com/
박상권이라는 분이 직접 만드신 라이브러리입니다. 권한체크방식을 라이브러리를 통해서 간단하게 줄일 수 있게 해주셨습니다.
감사합니다 (큰절)
사용방법을 알아보겠습니다.
우선 사용하기 위해서 gradle을 추가해줍니다.
implementation 'gun0912.ted:tedpermission:2.2.3'
PermissionListener로 접근 허용/거부 시 실행할 코드 작성가능하고,
TedPermission클래스를 이용해서 권한체크에 필요한 설정을 하실 수 있습니다.
PermissionListener permissionListener = new PermissionListener() {
@Override
public void onPermissionGranted() {
// 접근허용 시 실행할 코드
}
@Override
public void onPermissionDenied(List<String> deniedPermissions) {
// 접근거부 시 실행할 코드
}
};
TedPermission.with(this)
.setPermissionListener(permissionListener)
.setDeniedMessage("접근 거부하셨습니다.\n[설정] - [권한]에서 권한을 허용해주세요.")
.setPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE)
.check();
- setRationalMessage() : 권한체크 하기전 Dialog 메시지 설정
- setDeniedMessage() : 권한 거부했을 때 띄울 Dialog 메시지 설정
- setDeniedCloseButtonText() : 권한 거부 시 뜨는 Dialog의 [닫기]버튼 텍스트 설정
- setGotoSettingButtonText() : 권한 거부 시 [설정]버튼 텍스트 설정
- setGotoSettiongButton() : 권한 거부 시 [설정]버튼을 보여줄지 설정 (true / false)
※주의
TedPermission 클래스에서 setPermissions를 여러개 추가하시면 안됩니다.
저장공간에 대한 permission의 경우 .
setPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE)
와 같이 적어주셔야 됩니다.
저처럼 setPermissions 두번 작성했다가 못찾으면 고통받습니다.
.setPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.setPermissions(Manifest.permission.READ_EXTERNAL_STORAGE)
'안드로이드 > Android' 카테고리의 다른 글
[Android] Keystore 보안 (0) | 2020.11.17 |
---|---|
[Android] 앱 번들(Android App Bundle) 만들기 (2) | 2020.11.17 |
[Android] 다른 액티비티에 접근하기 (0) | 2020.11.01 |
[Android] 다른 액티비티에서 환경설정(Preference) 사용하기 (0) | 2020.10.30 |
[Android] 지문인식 구현하기 (0) | 2020.10.30 |
저작권 무료 사이트 목록
저작권 무료 사이트 목록
1. 픽사베이 / https://pixabay.com
2. 언스플래시 / https://unsplash.com
3. 프리픽 / https://freepik.com
4. 플리커 https://flickr.com
'Others' 카테고리의 다른 글
안드로이드 앱 개인정보 취급방침 (0) | 2020.04.16 |
---|