你不知道一些神奇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
Ìù¸ö²»¶¨ÆÚ¸üÐµĹ«Öںţ¬»¶Ó½»Á÷£º