안드로이드 48

[android] webview font assets load(assets에 있는 font 자원을 읽어서 웹서버에서 내려받는 자원 아끼는 방법)

서버에서 폰트를 내려 받으면 자원을 내려 받기 때문에 비용이 많이 발생할수 있다. 따라서 자원을 아끼기 위해서, 네이티브에 자원을 넣고 그 자원을 읽어 들여 자원을 아끼는 방법을 고려해 볼 필요가 있다. 아래의 방법을 통해서 안드로이드의 assets에 폰트 자원을 넣어 놓고 웹뷰에 로드하여 폰트를 읽을 수 있다. import android.content.Context; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class WebFontLoader { private String TAG ="WebFontLoader"; //"www/fonts/gamjatxt.txt" priv..

안드로이드 2023.08.30

[Android] MVVM architecture example

1. 안드로이드의 기초 1.1 안드로이드의 4대 컴포넌트[1] 컴포넌트란? 안드로이드 시스템이 생명 주기를 관리하는 프로그램 덩어리(Class). 컴포넌트의 물리적인 모습은 클래스이며, 안드로이드에서 클래스는 컴포넌트와 일반 클래스로 나뉜다. 이 둘의 차이는 생명주기를 누가 관리하는지에 있고 안드로이드의 컴포넌트는 안드로이드 시스템이 생명주기를 관리하며, 일반 클래스는 개발자가 관리한다는 차이가 있다. [1] l 안드로이드 컴포넌트는 4가지 종류가 있다. 액티비티(Activity): UI를 구성하기 위한 컴포넌트 서비스(Service): UI 없이 백그라운드에서 장시간 수행되는 컴포넌트 콘텐츠 프로바이더(ContentProvider): 애플리케이션 간 데이터를 공유하기 위한 컴포넌트 브로드캐스트 리시버(..

안드로이드 2023.07.13

[Android] 딥링크(deeplink)의 정의(URI Scheme, App Link, Deferred Deep Link)

딥링크는 특정 주소 혹은 값을 입력하면 앱이 실행되거나 앱 내 특정 화면으로 이동 시키는 기능을 수행 한다.[1] URI Scheme : 앱에 URI 스킴(Scheme) 값을 등록하여 딥링크에 사용한다. 앱이 없을 경우, 앱스토어로 이동하며 데이터는 유실 된다[1], 동일한 스킴값을 갖는 앱이 여러게 생길수 있으며 여러게 일 경우 선택창이 활성화 된다. 이는 URI Scheme의 단점에 속한다. App Link (AOS), Universal Link (IOS) :도메인 주소를 이용하여[1] URI Scheme의 단점을 보완한다. 따라서 복수개의 앱선택이 없이 하나의 도메인에 속하나는 하나의 앱만이 실행된다. 인텐트 필터의 host에 등록된 도메인 주소가 assetlinks.json 파일이 https://..

안드로이드 2023.02.07

[android]assets 자원접근를 통해서 웹에서 네이티브 자원 접근

웹 기반의 콘텐츠 자원을 인터넷을 통해 가져오는 대신 애플리케이션 자원(assets) 내에서 가져와야 하는 경우가 있다. 속도의 이점등을 위해서 필요한 경우 webViewAssetLoader을 이용하여 WebView에서 assets 및 ress의 자원에 접근할 수 있는 방법이 있다. build.gradle [2] dependencies { implementation "androidx.webkit:webkit:1.5.0" } java [1] private static class LocalContentWebViewClient extends WebViewClientCompat { private final WebViewAssetLoader mAssetLoader; LocalContentWebViewClient(..

안드로이드 2023.02.01

[Android] WebView 에서 bridge(@javascriptIngerface)를 구현

Bridge 란? 브릿지의 사전적 정의는 '다리'이다. 웹뷰 상에서 다리는 웹과 네이티브 간의 다리 역할을 하는 것을 의미 한다. 다시 말해 웹이 네이티브를 제어하기 위하여 웹뷰가 @javascriptInterface를 통해서 네이티브의 코드를 직접 제어 하는 interface를 말한다. 목적: WebView 환경에서 Web과 native간의 데이터를 주고 받기 위한 bridge(@javascriptInterface)를 구현한다. - 1. Web에서 native로 데이터를 전달해 보는 코드를 구현해 본다. (hello Android) - 2. native에서 web로 데이터를 전달해 보는 코드를 구현해 본다. (Hello JavaScript) - % web 자원은 assets에 적용하시오. note: a..

안드로이드 2023.01.05

[안드로이드] WebView uri scheme 마켓 이동

uri 스킴에서 마켓 이동 uri 스킴(Scheme)에서 앱이 없을때 마켓으로 앱을 이동 하는 방법 Intent intent = null; try { intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME); //IntentURI처리 Uri uri = Uri.parse(intent.getDataString()); context.startActivity(new Intent(Intent.ACTION_VIEW, uri)); //해당되는 Activity 실행 scheam = true; } catch (URISyntaxException ex) { L.e("URISyntaxException : " + ex.getMessage()); } catch (ActivityNotFo..

안드로이드 2022.12.06

[안드로이드] shortcut의 구현

목적: 안드로이드의 쑛컷을 구현한다. 앱을 롱클릭했을때 바로가기가 보인다. %shortcut.xml은 난독화에서 제외 시킬것. 구현방법: AndroidManifest.xml res/xml/shortcuts.xml //인자 전달 MainActivity.java Intent intent = getIntent(); String extra_key = intent.getStringExtra("extra_key"); MyLog.i(TAG,"extra_key: "+extra_key); 참고자료: [1] 바로가기 만들기, https://developer.android.com/guide/topics/ui/shortcuts/creating-shortcuts?hl=ko [2] 기능스미카, https://developer.a..

안드로이드 2022.08.31

[안드로이드] 앱 알림설정 on off 활성 비활성화 차단 방법

앱 알림 설정이 on/off 확인 코드 NotificationManagerCompat.from(context).areNotificationsEnabled(); 앱 알림 설정 bordcastReceiver class BlockStateChangedReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { val blockedState = intent.getBooleanExtra(NotificationManager.EXTRA_BLOCKED_STATE, false) when (intent.action) { NotificationManager.ACTION_APP_BLOCK_STATE_CHANGED -> { ..

안드로이드 2022.04.26

[안드로이드] 앱(패키지) 설치 유무 확인

배경: 다른 앱관에 상호작용을 할때 해당 앱이 설치되어 있는지 확인이 필요한 경우가 있다. 코드: public static boolean isAppInstalled(Activity activity, String strAppPackage) { // PackageManager pm = activity.getPackageManager(); // PackageInfo pi; // // Intent i = pm.getLaunchIntentForPackage(strAppPackage); // if(i==null){ // return false; // }else{ // return true; // } String mpackagename = strAppPackage; try { PackageManager pm = ac..

안드로이드 2022.04.15

[android] 위치 정보 서비스 GPS/Network LocationTracker (Kotlin)

위치 정보 서비스를 얻어 오도록 구현. 구현방법 - AndroidManifest.xml - LocationTracker.kt import android.Manifest import android.app.Activity import android.content.Context import android.content.pm.PackageManager import android.location.Location import android.location.LocationListener import android.location.LocationManager import android.os.Bundle import android.util.Log import androidx.appcompat.app.AppCompatAc..

안드로이드 2021.11.25

[Android] EdtitText 필터 적용, 이모지 및 특수문자 입력 차단

한글 영어 숫자 만 입력되게 EditText 필터 적용 ( 특수기호 및 이모지입력 차단) etInput.setFilters(arrayOf( InputFilter { src, start, end, dst, dstart, dend -> //val ps = Pattern.compile("^[a-zA-Z0-9ㄱ-ㅎ가-흐]+$") //영문 숫자 한글 //영문 숫자 한글 천지인 middle dot[ᆞ] val ps = Pattern.compile("^[a-zA-Z0-9ㄱ-ㅎ가-흐ㄱ-ㅣ가-힣ᆢᆞ\\u318d\\u119E\\u11A2\\u2022\\u2025a\\u00B7\\uFE55\\s?!]+$") if (!ps.matcher(src).matches()) { return@InputFilter "" } else{ r..

안드로이드 2021.11.23

[Android] data Binding + liveData 적용 주의 ui not updated

주의점: 라이프 사이클 소유자가 설정해야합니다 있습니다 binding로 binding.setLifecycleOwner(this). MainViewModel에 대해서도 설정해야 합니다 binding. 그렇지 않으면 UI가 제대로 작동하지 않습니다. 확실하지 않은 경우 항상 여기에서 공식 문서를 확인하십시오. public class MainFragment extends Fragment { private MainViewModel mainViewModel; private FragmentMainBinding binding; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup containe..

안드로이드 2021.11.11

[Android] startActivityForResult deprecated kotlin

1. 배경 startActivityForeResult가 deprecated 되었다. override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) 의 복잡도가 높아진다는 이유로.. 2. 해결방안. 활동에서 결과 가져오기[2] 제일 아래 하단을 보면, 쉽게 알수 있다. - 자바 ActivityResultLauncher mStartForResult = registerForActivityResult(new StartActivityForResult(), new ActivityResultCallback() { @Override public void onActivityResult(ActivityResult result) { if (re..

안드로이드 2021.11.10

[Android] DPI 별 기준 해상도.

0)기준 해상도 잡는 방법. 디자이너와 협업시엔 xxxhdpi(640dpi,4px,1440 x 2560) 으로 협업하여, 고해상도의 이미지를 사용한다. (안드로이드에서 자동으로 해상도 제일 높은 xxxhdpi를 참고하여 단말기에 맞게 스케일링되어 사용된다.) 1) 해상도별 기준 사이즈 - drawable-mhdpi (160dpi, 1px) - img_goog.png (이미지는 360 x 640 기준으로 제작된 이미지 이여야함) - drawable-hdpi (240dpi, 1.5px) - img_goog.png (이미지는 540 x 960 기준으로 제작된 이미지 이여야함) - drawable-xhdpi (320dpi, 2px) - img_goog.png (이미지는 720 x 1280 기준으로 제작된 이미지..

안드로이드 2021.10.18

[Android] 리싸이클러 뷰 구현하기.

프로젝트 코드 - 자바로 구현 - 코틀린 구현 참고자료: - RecyclerView java [1] RecyclerView로 동적 목록 만들기, https://developer.android.com/guide/topics/ui/layout/recyclerview?hl=ko#kotlin [2] [RecyclerView] 안드로이드 리사이클러뷰 기본 사용법, https://dev-imaec.tistory.com/27 [3] [RecyclerView] 안드로이드 리사이클러뷰 아이템 클릭, https://dev-imaec.tistory.com/28 - RecyclerView FlexBoxLayout 참고자료 [4] [Android] FlexBoxLayout, https://woovictory.github.io/..

안드로이드 2021.10.04