안드로이드 48

[Android] Android local html 불러오기 (web으로 callback) (4/4)

목적: 안드로이드 웹뷰에서 안드로이드 브릿지를 이용해서 @JavascriptInterface의 메서드를 웹에서 호출할 수 있다. 호출에서 그치지 않고, 다시 웹으로 콜백(callback) 받는 방법을 구현해 본다. 방법: MyHome.html Android(aos) 호출 관련 (bridge는 aos) MyAndroidBridge.java package com.example.mywebview; import android.os.Handler; import android.util.Log; import android.webkit.JavascriptInterface; import android.webkit.WebView; public class MyAndroidBridge { private Handler mHan..

안드로이드 2021.09.30

[Android] Anroid local html 불러오기 (android bridge 구현) (3/4)

목적: 웹(javascript)에서 네이티브를 호출하기 위해서는, 안드로이드에서 @JavascriptInterface 에 해당하는 안드로이드 브릿지(bridge)를 연결 해줘야 한다. 구현방법: MyAndroidBridge.java package com.example.mywebview; import android.util.Log; import android.webkit.JavascriptInterface; public class MyAndroidBridge { @JavascriptInterface public void call_log(String msg){ Log.i(getClass().getName(),"call_log() msg:"+ msg); } } MainActivity.java this.mWeb..

안드로이드 2021.09.29

[Android] Anroid local html 불러오기 (assets/www/MyHome.html 호출) (2/3)

목적: 안드로이드 로컬에서 Html의 javascript를 호출 하는 코드 구현. 방법: 1) 메니페스트에서는 추가 필요 2) WebView에서는 mWebView.getSettings().setJavaScriptEnabled(true); // 자바스크립트 사용 허용!! 3) assets 폴더 추가. 4)html 코드 assets/www/MyHome.html 복사. (html 내용은 이전(1/3) 참고. 3) #특이사항 alert는 아래 상속 코드 구현 필요. this.mWebView.setWebChromeClient(new WebChromeClient(){ @Override //구현 하지 않으면 alert 반응 안함!! consol.log 생활화!! ^_^ public boolean onJsAlert(W..

안드로이드 2021.09.29

[Android] Anroid local html 불러오기 (javaScript onclick 구현) (1/3)

업무의 배경: 안드로이드 로컬에서 javascript function()을 호출하거나, 안드로이드의 @javascritInterface를 호출할 필요가 있다. 그중에서 테스트에 필요한 javascript html을 아래와 같이 구현한다. 구현 방법: Android(aos) 호출 관련 (bridge는 aos) 참고자료: [1] html javascript 구현, https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=tkddlf4209&logNo=220512073357 [2]안드로이드 로컬(assets) html 불러오기, https://dev.eyegood.co.kr/entry/Android-Local-Html-%EC%82%AC%EC%9A..

안드로이드 2021.09.29

[Android] Webview에서 URI_INTENT_SCHEME 오류

배경: 안드로이드 앱에서 웹뷰구현시에 다른앱으로 호출해야 하는 경우가 있다. 문제점: 웹뷰내에서 WebViewClient()를 개발자으 수작업으로 구현하여 상속 받은 경우에는 shouldOverrideUrlLoading()에서 url을 먼저 수신에서 다른 처리를 해줘야 한다. 단 WebViewClient()를 상속 받지 않은경우 기본 브라우저가 동작하여 URI_INTENT_SCHEME 오류가 발생하지 않는다. 구현방법: webViewClient = object : WebViewClient() { override fun shouldOverrideUrlLoading( view: WebView?, request: WebResourceRequest? ): Boolean { // request!!.url.toSt..

안드로이드 2021.09.29

[Android] 웹뷰(webview) ShouldOverrideUrlLoading을 이용하여 응용 프로그램이 제어할 수 있는 기회를 처리 방법(url scheme)

업무의 배경: 웹뷰를 구현할때 단순히, WebView를 이용하여 웹화면을 호출하는 것이 아니라 특정 url를 받을 경우 호스트 응용 프로그램이 제어 할수 있는 기회를 받아야 한다. 업무의 내용: WebView에 URL이로드 되려고 할 때 호스트 응용 프로그램이 제어할 수 있는 기회를 제공한다. shouldOverrideUrlLoading 영역에서 내부적으로 url에 맞는 행동을(내부 화면 호출 후 종료) 하는 경우, 내부처리를 진행하고 true를 반환하여 URL 로드를 중단거나, false을 반환하여 WebView가 평소와 같이 URL로드를 진행하도록 처리한다.[3] ShouldOverrideUrlLoading 코드. @Override public boolean shouldOverrideUrlLoadin..

안드로이드 2021.09.29

[Android] 웹뷰 webview window.open 처리 (웹뷰 고급편)

업무의 배경: 하이브리드 앱 구현시에 휴대폰 인증, 우편번호 찾기 등에서 window.open을 처리할 필요가 있다. window.open 관련 새로운 웹뷰를 생성에 관련하여 추가적인 구현이 필요하다. 하이브리드 앱 구현시에 웹뷰를 모바일 크롬 버전과 동일하게 만들어 달라는 요청을 받으며 때론 압박을 받곤한다. 업무의 혼성을 방지하기 위에서 모바일의 크롬 브라우저와 동일하게 동작하는 웹뷰를 커스텀으로 만들어 줄 필요가 있다. 업무의 목적: * window.open을 처리해 준다. * 하이브리드 앱에서 웹뷰를 커스텀하게 구현하여, 모바일의 크롬 브라우저와 동일하게 동작하게 만든다. * 모바일의 크롬브라우저와 동일하게 웹뷰를 구현함으로써 업무의 혼선을 방지할 수 있다. 해결 방안: window.open 발생..

안드로이드 2021.09.29

[Android] 하이브리드 앱 만들기 (기본편)Hybrid webview default

앱에서 WebView를 이용하여 웹페이지를 보여주는 앱을 만들 필요가 있다. 기본 적으로 http://www.naver.com을 접속하는 샘플 앱을 만들어 본다. 구현 방법: 1. 신규 프로젝트 생성. 2. UI를 이용하여 WebView UI 생성 AndroidManifest.xml 코드 구현 private String TAG = "MainActivity"; private WebView mWebView = null; //웹뷰 private EditText mEtxtUrlAddress = null; //웹뷰 Url private Button mBtnUrlGo= null; //url 이동 @Override protected void onCreate(Bundle savedInstanceState) { MyLo..

안드로이드 2021.09.29

[Android] 웹뷰(webview) 디버깅(debugging) 방법.

업무의 배경: 기존의 네이티브로 개발 하던 앱을 웹앱 및 하이브리드 앱의 형태로 앱을 개발하기 시작했다. 웹앱 및 하이브리드 앱은 안드로이드의 웹뷰를 기반으로 웹페이지를 호출하여 개발 하게 된다. 따라서, 안드로이드의 웹뷰 환경에서 디버깅을 할 필요가 있다. 업무의 목적: 안드로이드 네이티브로 제공하는 웹뷰(WebView)를 PC의 크롬에서 디버깅 하는 방법[1]. 웹뷰 디버깅 방법: 안드로이드 소스코드 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { WebView.setWebContentsDebuggingEnabled(true); // 웹뷰의 디버깅 모드 활성화 } PC의 크롬 접근 방법 chrome://inspect#devices -> 크롬에서..

안드로이드 2021.09.29

Android 설치된 앱(패키지) 등록된 permission 확인

설치된 앱의 퍼미션이 정상적으로 권한을 받았는지 확인이 필요하다. $ adb shell dumpsys package [package name] 아래와 같이 결과 나오고, Install permission: 항목해서 해당 퍼미션의 grant:true를 통해서 할당된 퍼미션을 확인 한다. ...... Packages: Package [com.samsung.knox.example.gettingstarted] (4d9d885): userId=10247 pkg=Package{c97e6da com.samsung.knox.example.gettingstarted} codePath=/data/app/com.samsung.knox.example.gettingstarted-pt0GAF9z5qJHAmYZIgP9GA== re..

안드로이드 2021.09.29

[안드로이드] APP 간의 통신, 다른 앱의 하위 액티비티 실행

* 안드로이드 다른 앱의 특정 Activity 실행 방법. 다른 앱의 특정 화면을 호출해서 정보를 전달하고, 그 결과를 다시 수신 받아야 하는 상황이 필요하다. * 호출 부 구현. var compName : ComponentName = //ComponentName([패키지명],[액티비티 패키지명]) ComponentName("com.jky.sig.mysigrecevactivity","com.jky.sig.mysigrecevactivity.RecevSecondActivity") var intent : Intent = Intent(Intent.ACTION_MAIN) intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) //intent.setFlags(Intent.FLAG_ACT..

안드로이드 2021.09.29

[안드로이드] 다른 앱으로 브로드캐스트 리시버 명시적 호출 및 정지 된앱 깨우기

* 브로드 캐스트 명시적 호출 및 정지된 앱 깨우기 앱간 통신의 하나의 방법으로 broadcast를 이용하여 앱간의 정보를 주고 받을수 있다. 브로트 캐스트를 이용한 앱간 호출은 developer.android.com을 통해서 확인 해 볼수 있다. 수신 측에서 리시버를 메니페스트에 등록하고, 사용자의 액션명을 등록하고, android:exported="true" 을 이용하여 외부의 앱에서 호출 할수 있도록 등록하면 된다. 한가지 문제점은, 호출 부에서 명시적으로 호출 했음에도 앱이 처음 설치되거나, 죽어 있으면 브로드캐스트를 받을수 없는 현상이 있다. 이럴땐. 송신 부에서 intent.addFlags(FLAG_INCLUDE_STOPPED_PACKAGES); 의 옵션을 추가하여 종료된 앱을 깨울수 있다. ..

안드로이드 2021.09.29

[안드로이드] ADB를 제어하여, pc에서 안드로이드 단말기로 앱을 배포 제어하기.

* ADB를 이용하여 안드로이드 단말기로 앱을 배포하여 출하하는 솔루션. 안드로이드 단말기를 이용하여 각 회사의 솔루션을 제공할때, 단말기를 함께 판매 하는 경우, 각 회사의 솔루션에 해당하는 앱을 단말기에 설치하고 솔루션에 해당하는 앱들이 정상적으로 설치되었는지 확인하는 솔루션이 필요하다. 솔루션을 재공하는 단말기의 출하관리를 위한 솔루션. 아래와 같이 데모 프로젝트를 진행해 보았다. * 링크: gitlab.com/sunny.ji/adbmanagergui AdbManagerGUI 안드로이드 디바이스에 앱을 설치해 주는 어플리케이션 구현. 프로젝트의 목적: 안드로이드 디바이스를 제어하는 도구를 GUI로 구현 윈도우 향 프로그램을 개발하며, C# 및 Java의 언어를 이용하여 구현한다. 프로젝트의 범위: ..

안드로이드 2021.09.29

[Android] Android 10.0 Q 에서 시리얼넘버(Serialnumber)대체 키 SSAID(Settings.Secure.ANDROID_ID) 확인.

문제의 배경: 안드로이드를 식별하기 위한 단말기 식별번호로 사용하던, SerialNumber를 Android OS 10.0부터 사용 할수 없게 되었다. 관련내용: 고유 식별자의 분류는 아래와 같다.(참고자료) 세션 전용: 사용자가 앱을 종료 후 다시 시작 하면, 식별자가 달라진다. 앱 설치 재설정: 앱을 삭제 하거나, 앱 데이터를 삭제하는 경우 식별자가 달라진다. 디바이스 재설정(Device Factory Reset): 디바이스를 초기화하는 경우 식별자가 달라진다. 디바이스 재설정 이후에도 동일: 식별자가 항상 동일 재설정할 수 없는(Non-resettable) 식별자 이다. 기존에 단말기 고유 식별자로 사용하던 고유 식별자는 아래와 같았으나 Android 10.0이후 사용불가. TelephonyMana..

안드로이드 2021.09.29

[Android] 화면 캡처 방지

업무의 배경: - 화면 캡처를 방지할 필요가 있다. 핵심 코드 //Activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);// 캡처 방지 설정 //Activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); // 캡처 방지 해제 getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);// 캡처 방지 설정 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); // 캡처 방지 해제 구현방법: activity_main.xml MainActivity.java p..

안드로이드 2021.09.29