仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1407|回复: 10
打印 上一主题 下一主题

[学习教程] IOS制作之Android KitKat Print框架仓酷云

[复制链接]
因胸联盟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:29:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
由于封闭文档写的相当好在遇到新框架的时候弄明白框架的功能去文档里搜搜框架的ProgrammingGuide很有用要弄明白框架类的继承结构写iOS的程序不一定都是用OBJC你有无想过给你的Android使用增加打印的功效?

在Android4.4之前,Android上没有专门为打印供应的API,假如要完成打印的话,只能依附第三方的办理计划,大概本人完成SMB/CIFS如许的协定,用WIFI、蓝牙大概USB间接和打印机通讯。而我们尽年夜多半人也不会想往间接和打印机通讯,一样平常都是依托已存在的计划,这也是最好的选择了。实在,这就是Android新增的功效,可让打印功效加倍复杂和牢靠。
云打印手艺

GoogleCloudPrintService开始是在2010年4月对外公布的,GCP是一个基于web的打印机,也是一个能够供应打印功效的办理体系,它能让任何联网设备都可使用GCP服务来链接任何一台打印机。用户能够为GCP服务增加任何一台打印机,设置是很老式打印机、非云端毗连的打印机也是能够的,只必要包管打印机与毗连的电脑在web上是共享的,而且装有Google的Chrome。据作者所说,利用GCP是让Android4.4以下的体系撑持打印功效的最复杂体例。GCP也是我们最但愿在Android4.4以上设备上见到的新功效,以是能够入手下手进修了。点击这里检察材料。
KitKat之前的打印手艺

Google云打印手艺给开辟者供应了一系列API,只需开辟者具有Google认证账号就能够提交打印义务和吸收打印义务了。能够从这里下载Google云打印相干的开辟材料https://developers.google.com/cloud-print/。本文不会触及任何完成的细节,由于它有点长,并且匡助不年夜。另有一点是,用户必需准确设置GCP账号,并和打印机绑定,上面将要先容两种完成办法。
Google云打印APP

PauloFernandes是第一个在APP中利用云打印服务的人,它的CloudPrint使用是第一款利用GCPAPI来为Android设备供应打印服务的APP。两年后,也就是2013年六月的时分,Google加入了它本人的版本,叫做GoogleCloudPrint。我会用GoogleCloudPrint作为例子举行解说,由于它更盛行一些,不外我本人也以为年夜多半云打印类APP都差未几。起首,我们必要利用PackageManager这个类来包管Android设备上已运转了GoogleCloudPrint服务,可使用这个函数:
1
2
3
4
5
6
7
8
9
privatebooleanhasGoogleCloudPrint(){
PackageManagerpm=getPackageManager();
try{
pm.getPackageInfo(“com.google.Android.apps.cloudprint”,0);
returntrue;
}catch(PackageManager.NameNotFoundExceptione){
returnfalse;
}
}

假如设备上装了GoogleCloudPrint服务的话,我们就能够利用一个Intent来入手下手打印了:
1
2
3
4
5
6
7
8
9
privatevoidprintViaGoogleCloudPrintApp(Uricontent){
IntentprintIntent=newIntent(Intent.ACTION_SEND);
printIntent.setPackage(“com.google.Android.apps.cloudprint”);
printIntent.setType(“image/*”);
printIntent.putExtra(Intent.EXTRA_TITLE,“PrintTestTitle”);
printIntent.putExtra(Intent.EXTRA_STREAM,uri);
startActivity(printIntent);
}

大概,还可使用webview挪用GoogleCloudPrint的web接口,这里省略了这部分,这里有一个例子,感乐趣的能够看看完全示例.
在KitKat体系中举行打印

有了这个打印的API,Android上打印就变得更复杂、更牢靠了。这是它的API的更新列表,以包的情势构造:
Android.support.v4.print


  • PrintHelper–bitmap打印行列工具类。
Android.print


  • PrintDocumentAdapter–供应自界说打印文档的基本类。
  • PrintManager–会见打印行列,并供应PrintDocumentAdapter类撑持。
Android.print.pdf


  • PrintedPdfDocument–基于特定PrintAttributeshelper创立PDF。
Android.webkit


  • WebView.createPrintDocumentAdapter–为WebView打印内容创立PrintDocumentAdapter。
Android.printservice


  • 完成自界说PrintService的容器类。
我们先来看看Android.printservice,这个包内里有与完成本人的打印服务相干的类,PrintService笼统出了与实在打印机(大概别的两头部件如GCP)之间的通讯,GoogleCloudPrintAPP就在KitKat上完成了这个服务,以是就能够在GCP上创立打印义务了。关于PrintService的详细完成超越了本文的局限,不外能够存眷一下PrintService,它仍是挺有用的,它是完成打印所必需的一个类,另有别的必要的相干类稍后就先容。(必要注重的是:年夜多半KitKat设备中预装了GoogleCloudPrint,Chrome,Drive,Gallery另有Quickoffice的,城市供应打印的服务)
接上去要说的是PrintHelper,它也在Android.support.v4.print包下,你大概会想,既然这个类放在Android的兼容包里,那末就能够在老版本的Android上利用打印的功效了。可是很不幸的是,现实不是如许的,PrintHelper这个类有一个静态办法systemSupportsPrint(),从自己举行的测试来看,这个办法只要在KitKat设备中才会前往true。假如在systemSupportPrint()这个办法前往false的设备上挪用printBitmap()办法的话,会间接被疏忽,不会产生任何事务。如今我们只必要懂得为何PrintHelper这个类会包括在Android的兼容包内里,仿佛也没有甚么用,最少今朝还没有甚么用途。
不论怎样,PrintHelper这个类在KitKat中举行打印操纵仍是很有用的,它供应了复杂,间接的体例来打印图片。


  • 能够指定图片的缩放形式,FILT大概FIT形式,FILT形式会用给出的图片添补全部地区,并坚持全体比例稳定,大概会有裁剪。FIT形式会程度添补大概垂直添补,这取决于文档大概图片的尺寸,它也会坚持全体的比例,可是不会裁剪,以是大概会呈现空缺地区,除非图片的比例和要打印的文档的比例恰好符合。
  • 能够指定色彩形式,COLOR大概MONOCHROME。
另有一个很有用的新增办法叫createPrintDocumentAdapter(),为webview筹办的。这个办法会和PrintManager一同利用,让打印webview的内容加倍复杂。
1
2
3
PrintDocumentAdapterprintDocumentAdapter=mWebView.createPrintDocumentAdapter();
PrintManagerprintManger=(PrintManager)getSystemService(Context.PRINT_SERVICE);
printManager.print(“TestPrintJob”,printDocumentAdapter,null);

在打印webview的内容时,还必要注重的是:


  • 利用者不克不及指定打印的页面局限,以是只能打印全部文档。
  • PrintDocumentAdapter在被Webview创立的时分,只能供应以后载进的内容,假如文档没加载终了,大概半途又加载了其余文档,那末大概会招致不成意料的了局,大概PrintDocumentAdapter会加载失利。
  • 一个webview实例一次只能处置一个打印义务。
PrintManager这个类只要两个公然的办法:getPrintJobs()和print()办法。getPrintJobs()办法会前往一个PrintJob范例的列表,这些PrintJob对象由使用挪用。PrintJob对象在检测形态大概在作废大概重启打印义务的时分很有效。在打印的时分会创立一个PrintJob对象(带有题目,PrintDocumentAdapter和PrintAttributes),个中PrintAttributes可让你指定一种色彩形式,媒体尺寸,边距另有分辩率,另有要出格注重这些属性的操纵都是由PrintService操纵的,用户只是把义务提交罢了。并且很有大概良多属性与对应的服务是没有干系的,大概是会被间接疏忽失落的。一个复杂的例子就是在选择“saveasPDF”的时分,就会疏忽失落色彩形式这个属性。
最初要看的这个类叫PrintDocumentAdapter。这个类是一个基本类,承继它能够创立自界说的结构和内容。只管是能够用PrintHelper和Bitmap类来轻松对绘制的内容举行打印,可是PrintDocumentAdapter在结构和属性上加倍天真,在完成PrintDocumentAdapter的时分,有两个可选的办法和两个必需的办法,可选的办法是onStart()onFinish(),在分派和开释资本的时分会必要这两个办法。起首要看的一个必需的办法叫onLayout(),在PrintAttribute改动的时分就会挪用这个办法,这个办法的次要目标就是为了创立PrintDocumentInfo对象,用于形貌所打印的内容,和挪用LayoutResultCallback对象里的一个办法(有三个办法)。这也是创立PrintedPdfDocument对象最好的中央,以是就能够往内里传送响应的打印属性。
<p>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
@Override
publicvoidonLayout(PrintAttributesoldAttributes,PrintAttributesnewAttributes,
CancellationSignalcancellationSignal,LayoutResultCallbackcallback,Bundleextras){
//IftheCancellationSignalindicatestheprintjobhasbeencancelledthencall
//onLayoutCancelledandreturnasthereisnothingelsetodo
if(cancellationSignal.isCanceled()){
callback.onLayoutCanceled();
return;
}
//IfyouareusingPrintedPdfDocumenthelperclassthisisagoodplacetoinstantiateit
mPdfDocument=newPrintedPdfDocument(getContext(),newAttributes);
//Nextyouwillwanttodeterminethenumberofpagesyourdocumentwillrequirebased
//onthespecifiedattributesandyourcontent,whateverthatmaybe
intpageCount=determinePageCount(newAttributes);
//FinallyyouwillneedtocreateaPrintDocumentInfoobjectwhichspecifiesthecontent
//typeandpagecount.ThecontenttypevaluecaneitherbyDOCUMENTorPHOTO
//andwillpotentiallybeusedbytheprintservicebutcouldalsobeignoreddependingon
//whatprintserviceisbeingused.TheAndroiddeveloperdocsmentionthattheprint
//servicemayusethedocumenttypetodeterminethepaperqualityand/orotherquality
//settingsthoughagain,itisentirelyuptotheprintservicehowthisvalueisused.
<p>
谁可相欹 该用户已被删除
沙发
发表于 2015-1-20 08:07:00 | 只看该作者
看《iPhone 4与iPad开发基础教程》,跟着一步步来
活着的死人 该用户已被删除
板凳
发表于 2015-1-20 17:43:47 | 只看该作者
近期由于IOS7的发布,所以应用的适配潮可谓是都搞的锣鼓喧天,甚是热闹,因此呢,因适配IOS7而产生的问题也是铺天盖地的卷来,
愤怒的大鸟 该用户已被删除
地板
发表于 2015-1-29 13:40:09 | 只看该作者
要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。
5#
发表于 2015-2-6 01:33:10 | 只看该作者
同很多iOS开发者一样,我也是通过培训进入到iOS开发这个行业,开始没有打算培训,只准备自己学习一些计算机编程相关的知识,毕业时找一份编程相关工作(本人是信息与计算科学这个专业,是数学系)。
飘飘悠悠 该用户已被删除
6#
发表于 2015-2-14 20:15:53 | 只看该作者
因为我们老师也是自学的,给我们讲课说的最多的就是百度,谷歌,查文档。
山那边是海 该用户已被删除
7#
发表于 2015-3-4 10:16:32 | 只看该作者
边吃零食边看Stanford的视频教程
蒙在股里 该用户已被删除
8#
发表于 2015-3-9 14:57:04 | 只看该作者
开始的时候甚至想放弃,不过想想自己的未来,只能咬牙坚持,课下就不停的缠着老师。放学就补基础,这些基础的东西没有速成的,只有刻苦努力。我是后来发现的,转变自己的心态,不要读书看资料当成一种痛苦
不帅 该用户已被删除
9#
发表于 2015-3-12 11:46:42 | 只看该作者
看完这个你就可以有多种选择来踏入做应用的阶段
海妖 该用户已被删除
10#
发表于 2015-3-19 21:31:25 | 只看该作者
从C语言入门,因为IOS开发用的是OC语言,是在C基础上的,不过也跟C不是很搭界,你可以直接学习OC语言也可以,
简单生活 该用户已被删除
11#
发表于 2015-4-1 19:39:35 | 只看该作者
还有开发工具是用Xcode,是在Mac系统的,你多摸索一下就可以开发简单的应用了,建议你买一本iphone开发秘籍第二版看看,希望可以帮到你,谢谢。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 05:23

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表