你不知道一些神奇Android Api

ÎÄ£¯wutongke£¨¼òÊé×÷Õߣ©

Ô­ÎÄÁ´½Ó£ºhttp://www.jianshu.com/p/4d21341f94ee 

Õ⽫ÊÇÒ»¸ö¹ØÓÚAndroid ApiµÄϵÁÐÎÄÕ£¬AntSoftµÄAndroid ÍŶÓÒ»Ö±½ôËæ¼¼ÊõÇ°ÑØ£¬ÔÚ_Budapest University of Technology and Economics_ÅàѵAndroid¼¼ÊõÒѾ­ÓÐ8Äê¶àµÄʱ¼ä¡£¹«Ë¾ÀïÓиö´«Í³¾ÍÊÇÿÖܽøÐм¼Êõ·ÖÏí£¬ÕâÀォ½éÉÜһЩAndroidƽ̨ÉÏÓÐÒâ˼µÄAPI¡£

µ±Ç°AndroidÒѾ­ÓÐÁ˷dz£¶à¿ÉÓõÄÒÀÀµ¿â£¨Library£©£¬µ«ÆäʵAndroid platformµÄһЩAPIÓÐЩÏÊΪÈËÖª£¬µ«·Ç³£ÓÐÓõķ½·¨ºÍÀ࣬ȥÑо¿Ò»ÏÂÕâЩAPIÊǷdz£ÓÐÒâ˼µÄ¡£

ÎÒÃÇÖªµÀAndroid APIÒÀÀµµÄJava SE APIÒ²·Ç³£ÅӴ󣬸ù¾Ýͳ¼Æ£¬Java SE 8ÓÐ217¸öpackage£¬4240¸ö·½·¨£¬¶øjava SE 7ÓÐ209¸öpackage£¬4024¸ö·½·¨¡£

source: Java 8 Pocket Guide book by Robert Liguori, Patricia Liguor

ÔÚÕâ¸öϵÁÐÎÄÕÂÖУ¬ÎÒÃǽ«´Ó²»Í¬½Ç¶ÈչʾһЩÏÊΪÈËÖªµÄAndroid API£¬²¢Ê¹ÓÃÕâЩAPIдÁËdemo£¬¿ªÔ´µØÖ·£ºhttps://github.com/peekler/GDG

demo AppÖиø³öµÄÿ¸öAPIµÄʹÓö¼ÊÇÔÚ²»Í¬µÄActivityÖУ¬´ÓAppÊ×Ò³¿ÉÒÔ½øÈëµ½²»Í¬µÄAPI demoActivity¡£

ƴд¼ì²é

Android´Ólevel 14¿ªÊ¼ÓÐÒ»¸ö¼ì²éƴдµÄAPI£¬¿ÉÒÔͨ¹ý TextServicesManagerʹÓ㬴Ólevel16¿ªÊ¼ÒѾ­¿ÉÒÔÉõÖÁ¿ÉÒÔ¼ì²éÒ»¸öÍêÕûµÄ¾ä×ÓÁË¡£

ʹÓ÷½·¨·Ç³£¼òµ¥£¬Í¨¹ý TextServicesManager¿ÉÒÔ´´½¨SpellCheckerSession£º

TextServicesManager tsm = (TextServicesManager) getSystemService(Context.TEXT_SERVICES_MANAGER_SERVICE);  
SpellCheckerSession spellCheckerSession = tsm.newSpellCheckerSession(null, null, this, true

¿ÉÒÔͨ¹ýʵÏÖSpellCheckerSessionListener½Ó¿ÚµÃµ½¼ì²é½á¹û£º

onGetSuggestions(SentenceSuggestionsInfo\[\] sentenceSuggestionsInfos)
onGetSentenceSuggestions(SentenceSuggestionsInfo\[\] sentenceSuggestionsInfos));

SentenceSuggestionsInfoÊý¾ÝÖб£´æÁËÕýÈ·µÄÎÄ×Ö¡¢Æ«ÒÆÁ¿ÒÔ¼°ËùÓÐÏà¹ØµÄÐÅÏ¢¡£

demoµØÖ·SpellCheckerActivity

ÎÄ×Öʶ±ð

ÕâÊÇ_Google Play Services Vision API_ÖÐÌṩµÄ¹¦ÄÜ£¬¿ÉÒÔͨ¹ýgradle dependency·Ç³£¼òµ¥µÄÒýÈëµ½projectÖУ¬ÐèҪעÒâµÄÊDz»ÒªÒýÈëÕû¸ö_Play Services_£¬ÒòΪ_Play Services_·Ç³£´ó£¬¶øÎÒÃÇÐèÒªµÄÖ»ÊÇÆäÖеÄһС²¿·Ö£¬https://developers.google.com/android/guides/setupÖпÉÒÔÕÒµ½Ïà¹ØµÄ°ïÖú¡£

Vision APIÖаüº¬µÄ·þÎñÓУº

  • ÈËÁ³Ê¶±ð

  • ÌõÐÎÂëɨÃè

  • ÎÄ×Öʶ±ð

ʹÓà Text Recognizer API·Ç³£¼òµ¥£º

Ê×ÏÈ£¬ÔÚbuild.gradleÖÐÒýÈëÒÀÀµ£º

compile 'com.google.android.gms:play-services-vision:10.0.1'

È»ºó´´½¨TextRecognizer¶ÔÏó£º

TextRecognizer textRecognizer = new TextRecognizer.Builder(context).build();

Ö®ºóʵÏÖ Detector.Processor ½Ó¿Ú½Ó¿Ú¼àÌý½á¹û£¬µÃµ½µÄ½á¹ûÊÇTextBlock Êý×é¡£

public class OcrDetectorProcessor implements Detector.Processor<TextBlock> {
    @Override
    public void receiveDetections(Detector.Detections<TextBlock> detections) {
        ...
        SparseArray<TextBlock> items = detections.getDetectedItems();
        ...
    }
    @Override
    public void release() {
    }
}

ºÏÀíµØʹÓà TextRecognizer£¬Ò»°ãÒª×Ô¶¨Òå°üº¬SurfaceViewµÄViewÓÃÓÚÔÚÆÁÄ»ÏÔʾ½á¹û¡£demoµØÖ· OCRActivity £¬ ocr ÖÐÓÐһЩ°ïÖúÀà¡£

TimingLogger

TimingLogger¿ÉÒÔºÜÈÝÒ׵ؼÆËãÁ½¸ölogÐÅÏ¢Ö®¼äµÄʱ¼ä²î£¬ÈçÏÂËùʾ£º

D/TAG_MYJOB: MyJob: begin
D/TAG_MYJOB: MyJob:      2002 ms, Phase 1 ready
D/TAG_MYJOB: MyJob:      2002 ms, Phase 2 ready
D/TAG_MYJOB: MyJob:      2001 ms, Phase 3 ready
D/TAG_MYJOB: MyJob: end, 6005 ms

ʹÓÃTimingLogger£º

TimingLogger timings = new TimingLogger("TAG_MYJOB", "MyJob");

È»ºóͨ¹ý_addSplit(...)_ ·½·¨´´½¨Ò»¸ö log entry£º

timings.addSplit("Phase 1 ready");

µ±Ê¹ÓÃ_dumpToLog()_ºó£¬logÐÅÏ¢¾Í»á´òÓ¡³öÀ´£º

timings.dumpToLog();

×¢ÒâҪʹÓÃTimingLogger£¬ ÒªÉèÖÃadbÃüÁîÊÇTag¿ÉÓãº

setprop log.tag.TAG_MYJOB VERBOSE

demoµØÖ·£ºTimingLoggerActivity.

½ØÆÁ

ÔÚijЩÇé¿öÏ£¬½ØÆÁ·Ç³£ÓÐÓá£Ò²ÓÐһЩµÚÈý·½¿âÈç FalconʵÏÖÕâ¸ö¹¦ÄÜ£¬´Ólevel 21¿ªÊ¼ MediaProjection¿ÉÒÔʵʱ»ñÈ¡ÆÁÄ»ÄÚÈݺÍϵͳÉùÒôÐÅÏ¢Á÷¡£

qi£¬ÓÐʱʹÓñê×¼µÄAndroid APIͨ¹ýgetWindow()·Ç³£¼òµ¥µØ°ÑÆÁÄ»ÄÚÈݱ£´æΪBitmap:

View viewRoot = getWindow().getDecorView().getRootView();  
viewRoot.setDrawingCacheEnabled(true);  
Bitmap screenShotAsBitmap = Bitmap.createBitmap(viewRoot.getDrawingCache());  
viewRoot.setDrawingCacheEnabled(false);  
// use screenShotAsBitmap as you need

demoµØÖ·£ºScreenCaptureActivity.

PDF´´½¨

´Ólevel 19¿ªÊ¼AndroidÖ§³Ö±¾µØÄÚÈÝÉú³ÉPDFÎļþ¡£

Ê×ÏÈ´´½¨Ò»¸öPageInfonew PdfDocument.PageInfo.Builder(w,h,pageNum).create() ;,È»ºóʹÓÃPDFDocumentÖеÄstartPage([pageInfo])¾Í¿ÉÒÔ´´½¨Ò»¸öPDFÎļþÁË¡£

ÒÔϵĴúÂë´´½¨ÁËÒ»¸ödemo.pdfÎļþ£º

public void createPdfFromCurrentScreen() {  
    new Thread() {
        public void run() {
            // Get the directory for the app's private pictures directory.
            final File file = new File(
                    Environment.getExternalStorageDirectory(), "demo.pdf");
            if (file.exists ()) {
                file.delete ();
            }
            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);
                document.writeTo(out);
                document.close();
                out.flush();
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(PDFCreateActivity.this, "File created: "+file.getAbsolutePath(), Toast.LENGTH_LONG).show();
                    }
                });
            } catch (Exception e) {
                Log.d("TAG_PDF", "File was not created: "+e.getMessage());
            } finally {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }.start();
}

¸ÐлÔĶÁ¡£

´ËƪÊÇÒëÎÄ£¬Ô­ÎĵØÖ· Discovering the Android API - Part 1

Other

Ìù¸ö²»¶¨ÆÚ¸üÐµĹ«Öںţ¬»¶Ó­½»Á÷£º