반응형

분류 전체보기 71

[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

[디자인패턴] 옵저버(Observer) 패턴

옵저버 패턴의 정의 - 객체의 상태변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다. 발행/구독 모델로 알려져 있기도 하다.[1] - 다시, 유튜브의 구독 알람을 예시로 옵저버 패턴을 이해 볼수 있다.[2] 옵저버 패턴의 구조 옵저버 패턴의 구현 Type A * Subject 행위자 public interface Subject { public void registerObserver(Observer observer); public void unregisterObserver(Observer observer); public void..

개발방법론 2022.11.21

[디자인패턴] 싱글톤(Singleton) 패턴

싱글톤 패턴 이란? - 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최조의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱클톤 패턴 이라고 한다.[1] 싱글톤 패턴의 클래스 다이어그램 싱글톤 패턴의 구현(JAVA) public class Singleton { private static final Singleton INSTANCE = new Singleton(); private Singleton() {} //생성자 사용이 불가능하도록 한다.!! public static Singleton getInstance() { return INSTANCE; } } 참고자료: [1] 위키피디아 싱글톤 패턴, https://ko.wikipedia.org/..

개발방법론 2022.11.17

[IT용어]네이티브앱 vs 크로스 플랫폼 앱

네이티브 앱 네이티브 앱이란 안드로이드(Android), 삼성 갤럭시와 애플 아이폰과 같이 스마트폰 운영체제(OS)에 맞는 프로그래밍 언어를 사용하여 개발하는 앱입니다. [1] 크로스 플랫폼 앱 크로스 플랫폼 앱은 네이티브 앱이 OS 간 호환이 불가능하다는 한계점을 개선하고자 등장하였습니다. 이름에서 유추할 수 있듯이, 크로스 플랫폼 앱은 하나의 개발 언어로 안드로이드와 iOS에서 사용할 수 있는 앱을 만들 수 있습니다. 대표적인 개발 도구는 크게 3가지입니다: 1) 구글에서 개발한 플러터(Flutter), 2) 페이스북이 개발한 리액트 네이티브(React Native), 3) 마이크로소프트에서 개발한 자마린(Xamarin). 크로스 플랫폼 앱은 이러한 개발도구 중 하나를 활용하여 코드를 작성하면 각 O..

IT 2022.11.07

[IT용어]네이티브 앱, 모바일 웹, 웹앱, 하이브리드(hybrid) 앱

* 네이티브 앱: 네이티브 앱은 모바일 플랫폼에서 제공되는 개발언어로 작성된 앱으로서, 하드웨어 자원을 이용하기에 편리하지만 스마트 폰 플랫폼에 종속적이다. 따라서 하나의 앱을 개발할 때, 서로 다른 플랫폼에서비스하기 위해서, 각각 다른 언어로 개발해야 하고, 그 만큼 비용이 늘어나는 단점이 있다.[1] * 모바일 웹: 모바일에 최적화된 웹사이트[2]로 스마트폰의 하드웨어 자원을 사용할수 없다[2] * 모바일 웹앱(웹 앱): 웹 앱은 브라우저상에서 작동하는 HTML, Javascript, CSS를 이용해 작성된 앱으로서, 스마트폰에서 지원하는 브라우저에서 사용할 수 있기 때문에, 플랫폼별로 개발을 할 필요가 없다. 그러나 스마트 폰의 하드웨어 자원을 사용할 수 없는 단점이 있다.[1] 최근에는 HTML5..

IT 2022.11.01

[토이 프로젝트] ADB, APK 앱배포 프로그램

AdbManagerGUI 안드로이드 디바이스에 앱을 설치해 주는 어플리케이션 구현. 프로젝트의 목적: 안드로이드 디바이스를 제어하는 도구를 GUI로 구현 윈도우 향 프로그램을 개발하며, C# 및 Java의 언어를 이용하여 구현한다. 프로젝트의 범위: android tools에서 필요한 adb, aapt의 기능을 이용하여 윈도우 화면으로 확인한다. 진행 단계: 개발 환경 구축. (완료) C#, Java, Android 프로젝트 디렉토리 생성. (완료) C#을 이용한 adb 설치, command code 전송 Gui 데모 (완료) Java Gui를 이용한 adb 제어 기능 데모 (준비) android tools의 aapt 제어 기능 데모 (준비) 결과물 C#을 이용한 단말기 제어 shell 접근 제어 기능(..

[안드로이드] 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
반응형