SuldenLion's Versatile App 2주차 개발 로그
추가 사항)
- 지문 인식 기능
- QR 코드 스캔 기능
- 음악 플레이
- 파파고 API를 이용한 번역기 프로그램
- 애드몹 광고 삽입
- 플레이 스토어 출시 시도

이번주는 다양한 시도를 해본 주차이다.
[지문 인식 기능]

BiometricPrompt라는 클래스를 이용

내용은 지문 기능 사용을 위한 정형화된 코드를 가져다 사용.
매니페스트 파일에는 uses-permission 코드를 추가.

실행화면은 에뮬레이터 상 확인할 방법은 없고, apk 파일 만들어 직접 폰에서 구동시켜 본 결과 정상 작동함.
[QR Code]
다음으로 QR 코드 기능
만들면서 재밌는 요소가 많았음.

해당 QR 코드는 SuldenLion 블로그로 넘어올 수 있는 QR 코드.
QR 바코드 제작방법은 아주 간단하며 이미지 넣는 등의 커스터마이징 가능.
네이버에서 QR 코드 만들기 (https://qr.naver.com/)를 통해 무료로 간단하게 제작 가능.
하단 QR Camera on 버튼은 QR 카메라 켜는 버튼.

IntentIntegrator 사용이 핵심.

QR 결과값에 대한 Intent.
[Music player]
다음은 음악 플레이어 기능.
package suldenlion.tistory.com;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.util.Log;
public class MusicService extends Service {
private MediaPlayer player;
public MusicService() {
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate()
{
Log.e("음악 재생 서비스", "onCreate() 호출");
super.onCreate();
}
//
@Override
public void onDestroy()
{
Log.e("음악 재생 서비스", "onDestroy() 호출");
player.stop();
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
Log.e("서비스 테스트", "onStartCommand() 호출");
player = MediaPlayer.create(this, R.raw.free);
player.setLooping(true);
player.start();
return super.onStartCommand(intent, flags, startId);
}
}
MusicService 클래스를 만들어 재생 서비스의 역할을 하게 함.
MediaPlayer 객체 사용.

단순 재생과 정지 기능만 구현.
버튼 클릭 이벤트로는 재생 이미지/일시정지 이미지 변경과 음악 재생 혹은 정지되었다는 토스트 메시지 표시.
차후에 그럴싸하게 음악 진행바나 다음곡 넘어가기 등의 기능을 추가할 예정.
음악도 현재는 패키지에 심어서 플레이하지만 휴대폰에 존재하는 음악을 가져다가 플레이하는 기능도 있는 듯 하여 구현해볼 생각.
[번역기]
Papago API를 사용한 번역기 프로그램

Papago API 사용을 위해서는 먼저 Naver Developers에서 애플리케이션을 등록 후 Client ID와 Client Secret 받아온다.
package suldenlion.tistory.com;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
public class Papago {
public String getTranslation(String word, String source, String target) {
String clientId = "여기에 고유 ID 입력 ...";
String clientSecret = "Secret 코드 입력 ...";
try {
String wordSource, wordTarget;
String text = URLEncoder.encode(word, "UTF-8"); //word
wordSource = URLEncoder.encode(source, "UTF-8");
wordTarget = URLEncoder.encode(target, "UTF-8");
String apiURL = "https://openapi.naver.com/v1/papago/n2mt";
URL url = new URL(apiURL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("X-Naver-Client-Id", clientId);
con.setRequestProperty("X-Naver-Client-Secret", clientSecret);
// post request
String postParams = "source="+wordSource+"&target="+wordTarget+"&text=" + text;
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(postParams);
wr.flush();
wr.close();
int responseCode = con.getResponseCode();
BufferedReader br;
if (responseCode == 200) { // 정상 호출
br = new BufferedReader(new InputStreamReader(con.getInputStream()));
} else { // 에러 발생
br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
}
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = br.readLine()) != null) {
response.append(inputLine);
}
br.close();
//System.out.println(response.toString());
String s = response.toString();
s = s.split("\"")[27];
return s;
} catch (Exception e) {
e.printStackTrace();
}
return "0";
}
}
TranslatorActivity에서는 EditText에 addTextChangedListener를 해주어 번역된 문장이 바로 적용될 수 있도록 한다.

상단의 언어 스위치 버튼을 통해 language 설정 바뀌는 것도 설정.

폰트는 BC 카드의 paybooc 체를 사용해 보았으며 상업용 무료 폰트이다.
[애드몹 광고 삽입]
이전에 앱만들때 해본적 있던 작업이라 다시 해보니 기억이 되새겨짐.
다만 애드몹 계정을 6개월이상 사용하지 않았어서 비활됨. 활성화하는데 하루 기다림.
사용을 위해선 manifest에 appId에 해당하는 태그와 고유 광고 계정값을 추가.
또한 gradle에 plugin과 dependencies를 추가(Project, Module 둘다).
위의 세팅이 끝나면 광고를 삽입하고자 하는 화면에 아래의 컴포넌트 배치.

광고 종류 중 배너 형태로 넣었으며, Activity 쪽에서도 작업을 해줘야함.

[스토어 출시]
앱 튕김 현상에 의한 출시 거부 2회
Memo 사용시 오류 생기는 듯함.
aab 번들파일로 추출하여 스토어에 올림. (apk 파일 아닌 이유는 용량 때문인듯함)
검토 및 등록완료까지 시간이 최소 1주일 소요되므로 기달.
등록시마다 gradle의 버전값들을 매번 올려 주어야함.
앱 추출시 광고 계정값 전환 체크 (테스터계정 x)
출시 검토시 게시 개요에서 변경사항 검토요청 클릭까지 확인하기.
'App 소개' 카테고리의 다른 글
3D Paint App (0) | 2024.06.23 |
---|---|
심심해서 만들어보는 앱 "SuldenLion's Versatile App" 개발로그_3 (0) | 2024.01.14 |
심심해서 만들어보는 앱 "SuldenLion's Versatile App" 개발로그_1 (0) | 2023.12.31 |
SuldenLion Chatting (0) | 2022.05.16 |
Legend Control (0) | 2022.05.16 |
댓글