[android] 잘 쓰지 않지만 유용한 android library 들 ( Spell Checker,Text Recognizer, TimeLogger, MediaProjection, PDF Creation )
https://blog.autsoft.hu/discovering-the-android-api-part-1/
Spell Checker
-
TextServicesManager 를 통해 접근 가능하며, API Level 14 부터 사용 가능하며, API Level 16 부터는 문장에 대해서도 check 가능하다.
-
TextServicesManager.newSpellCheckerSession
사용법은 아래와 같이 심플하다.
TextServicesManager tsm = (TextServicesManager) getSystemService(Context.TEXT_SERVICES_MANAGER_SERVICE);
SpellCheckerSession spellCheckerSession = tsm.newSpellCheckerSession(/*Bundle*/ null, /*Locale*/ null, /*SpellCheckerSessionListener*/ this, /*referToSpellCheckerLanguageSettings*/ true);
-
SpellCheckerSessionListener
SentenceSuggestionsInfo
https://developer.android.com/reference/android/view/textservice/SentenceSuggestionsInfo.html
SpellCheckerSessionListener 는 아래의 Callback 들을 갖는다.
onGetSuggestions(SentenceSuggestionsInfo[] sentenceSuggestionsInfos)
onGetSentenceSuggestions(SentenceSuggestionsInfo[] sentenceSuggestionsInfos)
Text Recognizer
-
Vision Library Intro Page
https://developers.google.com/vision/
Google Play Service API 의 Vision API 를 통해서 아래의 Recognition 들이 가능하다.
1. Face recognition
2. Barcode scanning
3. Text recognition
-
먼저 gradle 에 compile 을 통해 import 시켜야 한다.
compile 'com.google.android.gms:play-services-vision:10.0.1’ // version 은 알아서..
-
Detector
https://developers.google.com/android/reference/com/google/android/gms/vision/Detector
Detector.Processor
https://developers.google.com/android/reference/com/google/android/gms/vision/Detector.Processor
TextRecognizer
https://developers.google.com/android/reference/com/google/android/gms/vision/text/TextRecognizer
다음은 Recognizer 를 생성하고, Detector.Processor 를 구현한 Processor 를 설정해준다.
TextRecognizer textRecognizer = new TextRecognizer.Builder(context).build();
MyOcrDetectorProcessor ocrDetectorProcessor = new MyOcrDetectorProcessor();
textRecognizer.setProcessor(ocrDetectorProcessor);
Detector.Processor 는 아래 함수를 구현해준다.
public abstract void receiveDetections (Detections<T> detections)
Recognizer 는 Camera 와 함께 연동된다.
자세한 것은 아래 source code 참조
TimeLogger
-
TimingLogger
https://developer.android.com/reference/android/util/TimingLogger.html
TimingLogger 를 사용하기 위해서는 adb shell 을 통해서 enable 되어야 한다.
setprop log.tag.MY_TAG VERBOSE // verbose 에 대해서 enable 되어야만 한다.
혹은 TimingLogger 를 extends 해서 reset 의 disable 관련된 항목을 false 로 바꿔주어도 된다.
-
TimingLogger timings = new TimingLogger(“MY_TAG”, “JobName”);
// do phase1 work
timings.addSplit(“Phase1 ready”);
// do phase2 work
timings.addSplit(“Phase2 ready”);
timings.dumpToLog();
ScreenShot 찍기
-
MediaProjection
https://developer.android.com/reference/android/media/projection/MediaProjection.html
Falcon
https://github.com/jraska/Falcon
Falcon 이라는 3rd-party lib 혹은 API 21 부터는 MediaProjection 을 사용해서 스샷을 찍을 수 있다.
혹은 아래의 코드로 간단히 찍을 수도 있다.
View viewRoot = getWindow().getDecorView().getRootView();
viewRoot.setDrawingCacheEnabled(true);
Bitmap screenShotAsBitmap = Bitmap.createBitmap(viewRoot.getDrawingCache());
viewRoot.setDrawingCacheEnabled(false);
-
MediaProjection 에 대한 Example 은 아래 링크에서 찾을 수 있다.
http://thdev.tech/androiddev/2016/04/09/Android-MediaProjection-Exmple.html
아래는 MediaRecorder 를 이용해 녹화로 기능을 확장한 예제이다.
http://www.truiton.com/2015/05/capture-record-android-screen-using-mediaprojection-apis/
PDF Creation API
-
PdfDocument
https://developer.android.com/reference/android/graphics/pdf/PdfDocument.html
API 19 부터 API 를 통해 Native contents 를 PDF 로 생성 가능하다.
FileOutputStream out = null;
try {
out = new FileOutputStream(file);
PdfDocument document = new PdfDocument();
Point windowSize = new Point();
getWindowManager().getDefaultDisplay().getSize(windowSize);
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(windowSize.x, windowSize.y, 1).create();
PdfDocument.Page page = document.startPage(pageInfo);
View content = getWindow().getDecorView();
content.draw(page.getCanvas());
document.finishPage(page);
// do insert page more..
document.writeTo(out);
document.close();
out.flush();
} catch(Exception e){
// exception handling.
}
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] PDF file 읽는 방법 (0) | 2018.03.16 |
---|---|
[android] Dependency conflict 해결하기 (0) | 2018.03.15 |
[java] enum 의 serialize 에 대한 이야기 (0) | 2018.03.13 |
[android] png 기반 GIF 를 바탕으로 VectorDrawable 로 치환해 animation 만들기 (0) | 2018.03.12 |
[android] library 를 dependency 에 명시할 수 있게 배포하기 (0) | 2018.03.11 |
댓글