为什么液晶电视不清楚为什么有声音屏幕看不清楚,像是亮度全关了一样,请问这是为

IOS 应用 分享 扩展
iOS平台上想要实现不同App之间的内容分享一般有几种常用方式:
第一种是通过AirDrop实现不同设备的App之间文档和数据的分享;
第二种是给每个App定义一个URL Scheme,通过访问指定了URL Scheme的一个URL,实现直接访问一个APP;
第三种是通过UIDocumentInteractionController或者是UIActivityViewController这俩个iOS SDK中封装好的类在App之间发送数据、分享数据和操作数据;
第四种是通过App Extension,在iOS 8的SDK中提供的扩展新特性实现跨App的数据操作和分享;
还有一种集成第三方SDK实现的有限个App的数据分享,比如社交平台(QQ,微信,新浪微博等)给我们提供的官方SDK,或者是集成了多个社交平台的ShareSDK和友盟分享组件等。
关于集成第三方SDK的使用,各大平台官网上都有详细的文档说明,同时推荐俩篇苹果开发者中心的文档:Inter-App Communication和Document Interaction Programming Topics for iOS。其中之前有写关于 如何通过UTI让我们的App支持分享。
我在& UTI(统一类型标识符) 根据文件后缀打开APP&这篇文章中,详细地讲解了一下UTI(Uniform Type Identifier),一套苹果给我们提供用来在基于Cocoa和Cocoa Touch应用程序中识别实体内容类型的规范,而关于实现内容关联的技术也正是基于这套规范。在iOS和Mac OS开发中,苹果给我们提供了注册文档类型的接口,而这种注册的文档类型是全局的,中所有的应用程序和服务都可以侦测到。因此我们通过这个底层侦测,可以使用其他可选的第三方App来预览我们的App中不支持的文档,而且我们还可以通过这个接口在我们的App中打开并处理第三方App的文档。
如果我们的App可以处理某些类型的实体内容,那么我们就可以在我们项目中的Info.plist文件中进行注册。关于使用哪种类型和UTI,就要参考我在&详解苹果提供的UTI(统一类型标识符)&这篇文章中的讲解。当一个第三方App通过苹果的底层侦测技术检查有哪些App可以处理它所指定的内容类型时,如果我们的App已经注册了这种类型,那么我们的App图标就会显示在其中,并且作为我们自己的App的一个入口。
主要应用到这种底层侦测的技术有iOS SDK中给我们提供的UIDocumentInteractionController、UIActivityViewController 和Quick Look 框架。此外,在iOS 8中,苹果又给开发者提供了App Extension,一种更高大上的方式在App之间的实现分享内容。关于UIDocumentInteractionController、UIActivityViewController、Quick Look 框架以及App Extension的细节,我计划在后面的文章中详细讲解。这篇文章,我们主要是来谈谈如何注册我们App可用的文档类型以及简单使用我们的App来处理第三方App分享的内容。
注册可用类型
我们需要在info.plist文件中,添加一个新的属性CFBundleDocumentTypes(实际上输入的是&Document types&),这是一个数组类型的属性,意思就是我们可以同时注册多个类型。而针对数组中的每一个元素,都有许多属性可以指定,详细的属性列表我们可以从官方文档上找到: Core Foundation Keys &- CFBundleDocumentTypes。这里列举我们在做iOS开发时常用的属性:
CFBundleTypeName(&Icon File Name&)
字符串类型,指定某种类型的别名,也就是用来指代我们规定的类型的别称,一般为了保持唯一性,我们使用UTI来标识。
CFBundleTypeIconFiles
数组类型,包含指定的png图标的文件名,指定代表某种类型的图标,而图标有具体的尺寸标识:
Device Sizes
iPad 64 x 64 pixels, 320 x 320 pixels
iPhone and iPod touch 22 x 29 pixels, 44 x 58 pixels (high resolution)
LSItemContentTypes(&Document Content Type UTIs&)
数组类型,包含UTI字符串,指定我们的应用程序所有可以识别的类型集合
LSHandlerRank(&Handler rank&)
字符串类型,包含Owner,Default,Alternate,None四个可选值,指定对于某种类型的优先权级别,而Launcher Service会根据这个优先级别来排列显示的App的顺序。优先级别从高到低依次是Owner,Alternate,Default。None表示不接受这种类型。
了解了这些基本属性,我们就需要在注册App可用类型时,指定这些属性,根据每个项目的需求不同,属性值也不同。下图示例作为一个参照:
在info中添加Document types
而当我们添加完所有属性后,开始运行我们的程序,然后再回到我们的Info界面,就会看到Document types这个列表已经发生了变化,这就证明我们成功的注册好了App可用的类型。
注册成功,运行程序显示的结果
打开第三方应用
我们在上面的步骤中注册好了我们的App可以识别的类型,现在我们可以打开一个使用UIDocumentInteractionController或者是Quick Look框架来展示内容的第三方App,这里以iPhone 上的QQ程序为例。
我们在上面的注册步骤中,注册的LSItemContentTypes仅包含了public.image这个UTI。所以我们先从QQ应用程序的我的文件中,打开不同类型的文件进行对比,大家可以看下图我的文件列表中包含俩种类型的文件,一种是.jpg扩展名的图片文件,一种是.pdf扩展名的文档文件。
我的文件列表
当我打开一个图片文件进行预览时,点击其他应用打开,就可以在App列表中看到我们的App图标。简单介绍一下这个页面,第一行是苹果在iOS 7之后给我们提供的使用AirDrZ喎"/kf/ware/vc/" target="_blank" class="keylink">vcNTaaVBob25loaJpUGFku/JpUG9kIFRvdWNoyeixuNauvOTNqLn9aUNsb3VkubLP7cTayN21xNK71ta3vcq9oaO12rb+0NDKx82ouf3OxLW1wODQzbnYwaq8vMr1yrax8LXEQXBwtcTB0LHtoaO12sj90NDKx82ouf3OxLW1udjBqry8yvXKtrHwtcRBY3Rpb261xMHQse2jrEFjdGlvbrHtyr621M7EtbW/yb340NC1xLLZ1/ejrMjnuLTWxqOstPLTobXIoaM8L3A+DQo8cD48aW1nIGFsdD0="这里写图片描述" src="/uploadfile/Collfiles/83.png" title="\" />
打开图片,显示ZSUTITestDemo App图标
而如果我打开PDF文件的话,就看不到我们的App图标。
打开PDF文件,看不到ZSUTITestDemo App图标
当我们通过上面步骤,成功地显示了ZSUTITestDemo 的图标之后,点击图标,我们就可以跳转到ZSUTITestDemo应用中,而苹果在iOS SDK中给我们提供的接收回调的方法在iOS 9之后做出了改变,因此我们需要针对不同的设备版本做出改变:
#if __IPHONE_OS_VERSION_MAX_ALLOWED & __IPHONE_9_0
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation
UINavigationController *navigation = (UINavigationController *)application.keyWindow.rootViewC ViewController *displayController = (ViewController *)navigation.topViewC
[displayController.imageView setImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:url]]]; [displayController.label setText:sourceApplication];
return YES;
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(nonnull NSDictionary *)options
UINavigationController *navigation = (UINavigationController *)application.keyWindow.rootViewC ViewController *displayController = (ViewController *)navigation.topViewC
[displayController.imageView setImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:url]]]; [displayController.label setText:[options objectForKey:UIApplicationOpenURLOptionsSourceApplicationKey]];
return YES;}
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'ios和os x如何共享文件
  --准备工作
  首先,你的设备需要运行iOS 7(或以上)和OS X
Yosemite版本的系统才能实现跨平台文件传输。此外,用户传输的Mac还必须是2012年或之后的型号,iOS设备的型号则必须是iPhone5或之后,iPad
4或之后,iPad mini,或者是第五代iPod
touch。你可以点击Dock中的Finder图标,然后在菜单栏当中选择&进入&图标。如果没有看到AirDrop,那就证明你的Mac不支持该功能。
  苹果表示,进行传输的两台设备必须保持在9米的范围之内。如果你的Mac开启了防火墙,你需要进入菜单栏&系统偏好&一般&安全和隐私&防火墙&防火墙选项,确保&阻止所有连接&没有被勾选。
  虽然两台设备并不需要登录相同的iCloud账户,但这样做可以省略每一次传输时的允许步骤。此外,iOS和Mac设备在进行传输时必须处于开机且解锁状态。
  --步骤
  1.开启两台设备的Wi-Fi功能。iOS:设置&Wi-Fi,Mac:菜单栏&Wi-Fi&开启Wi-Fi。不过即便两台设备使用的是不同的Wi-Fi网络,AirDrop也能工作。
  2.开启两台设备的蓝牙功能。iOS设备:设置&蓝牙,Mac:菜单栏&系统偏好&蓝牙&开启蓝牙。
  3.开启AirDrop。iOS设备:屏幕底部向上滑动开启控制中心&AirDrop&选择&仅联系人&或&所有人&,Mac:Finder&菜单栏&进入&AirDrop&点击&允许被发现&&选择&仅联系人&或&所有人&。
  4.你现在应该就可以在Mac和iOS设备之间进行文件传输了。进入Finder的AirDrop菜单,你应该可以看见自己的iOS设备。如果将文件拖拽到显示的圆圈当中,你的iOS设备就将收到提示。
  你还可以使用内置分享功能的应用程序来进行文件分享。点击分享图标并选择AirDrop之后,你就会看到可进行文件接收的设备名单。
  5.从iOS设备向Mac进行文件传输可以在任何支持分享功能的应用当中进行。和Mac上的操作一样,分享菜单当中也会包含AirDrop的选择。举个例子,如果你想分享一张图片,可以在应用当中点击分享按钮,选择AirDrop,然后选定想要进行分享的Mac。随后,你的Mac应该就会显示出提示。
  --疑难解答
  自OS X
Yosemite上线之后,部分用户在跨越iOS设备和Mac进行文件分享时遇到了问题。根据苹果官方支持论坛上的用户反馈,重启两台设备可以解决这个问题。如果设备不能彼此识别,请确保AirDrop被设置到了&所有人&,而不是&仅联系人&。
与本文的相关文章推荐
如何提升电脑运行速度(简单快捷处理经验谈)
教你如何从视频中提取音频的两种图文方法
一个文件夹下面最多可以放多少文件(ntfs格式略过)
如何提升电脑运行速度(简单快捷处理经验谈)
教你如何从视频中提取音频的两种图文方法
一个文件夹下面最多可以放多少文件(ntfs格式略过)如何为iOS app添加AirDrop文件分享功能
AirDrop是iOS 7引入的一个非常酷的功能,它为iOS设备间数据分享提供了一个很好的方法。首先,内置的UIActivityViewController类使得开发者在应用中实现该功能变得非常简单。正如你所看到的demo app,
AirDrop概览
AirDrop是iOS 7引入的一项新功能,iCloud同步功能允许在用户的两台iOS设备之间分享照片和文档,而AirDrop可以在不同用户的iOS设备之间进行照片和文档的分享。
在iOS 7之前,iOS用户主要依靠第三方app实现iOS设备间的文件和数据分享,在iOS 7中,该项新功能适用于所有iPhone 5、iPad 4、iPad mini以及第五代iPod touch设备。通过AirDrop,你可以与附近其他iOS app分享照片、视频、通讯录、URL、Passbook passes、App Store上的app列表、iTunes Store中的媒体列表以及地图中的位置信息等等。
苹果在iOS 7 SDK中集成了,可以让你很简单地就能把AirDrop功能整合进app中。UIActivityViewController类封装了文件分享功能的细节。你所需要的就是告知这个类你希望分享的内容,以及处理的结果。在这个教程中,我们将会演示UIActivityViewController的使用方法,以及你该如何使用AirDrop来分享图片/文档。
AirDrop使用蓝牙来扫描周围的设备,当两台设备通过蓝牙建立起了连接,考虑到更快速的数据传输,它就会创建点对点的Wi-Fi网络来连接两部iOS 设备。但并不意味着为了使用AirDrop而需要把设备连接至Wi-Fi网络。
比如你想在iPhone拍照类app中将照片分享给另一位iPhone设备,假如你在两台设备间启动了AirDrop,点击屏幕左下角的分享按钮就能实现不同用户iOS 设备间的文件分享。当屏幕处于关闭状态时,AirDrop为不可用,所以要确保文件接收方的设备处于打开状态,然后选择设备进行分享。在另一台设备上,你会看到照片预览和确认要求。接收者可以接受或者拒绝接收文件。如果你选择了接收,照片会被传输至你的iOS设备,并保存至相册。
AirDrop并不仅仅适用于拍照类app,你也可以在大部分内置的应用中看到它,比如Contacts, iTunes, App Store, Safari以及其他应用程序中。
下面我们来看看如何把AirDrop整合进你的app。
UIActivityViewController简介快览
可能有开发者会觉得在应用中整合AirDrop比较麻烦,其实只需要数行代码就能实现,UIActivityViewController让这个过程变得非常简单,因为AirDrop是该类固定的一部分。
UIActivityViewController类是一个标准的view controller,提供了几项标准的服务,比如复制项目至剪贴板,把内容分享至社交网站,以及通过Messages发送数据等等。在iOS 7 SDK中,UIActivityViewController类提供了内置的AirDrop功能。
如果你有一些数据一批对象需要通过AirDrop进行分享,你所需要的是通过对象数组初始化UIActivityViewController,并展示在屏幕上:
UIActivityViewController&*controller&=&[[UIActivityViewController&alloc]&initWithActivityItems:objectsToShare&applicationActivities:nil];&[self&presentViewController:controller&animated:YES&completion:nil];&
如上代码所示,只需要两行代码,你就能通过AirDrop选项启用activity view。当检测到周围的设备时,activity controller会自动展示在设备上,并处理数据转换(如果你选择了该项)。
根据需要,你可以拒绝特定的分享类型,也就是说,你可以通过排除所有的活动仅展示通过AirDrop进行分享。如下代码所示:
UIActivityViewController&*controller&=&[[UIActivityViewController&alloc]&initWithActivityItems:objectsToShare&applicationActivities:nil];&&NSArray&*excludedActivities&=&@[UIActivityTypePostToTwitter,&UIActivityTypePostToFacebook,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&UIActivityTypePostToWeibo,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&UIActivityTypeMessage,&UIActivityTypeMail,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&UIActivityTypePrint,&UIActivityTypeCopyToPasteboard,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&UIActivityTypeAssignToContact,&UIActivityTypeSaveToCameraRoll,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&UIActivityTypeAddToReadingList,&UIActivityTypePostToFlickr,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&UIActivityTypePostToVimeo,&UIActivityTypePostToTencentWeibo];&controller.excludedActivityTypes&=&excludedA&&[self&presentViewController:controller&animated:YES&completion:nil];&
现在activity view controller仅展示AirDrop选项:
你可以通过UIActivityViewController来分享不同的数据类型,包括NSString, UIImage以及NSURL。你不仅可以使用NSURL分享链接,也可以通过URL传递任何类型的文件。
在接收端,当其他设备接收数据时,它会基于数据类型自动打来app。也就是说,如果传送的是UIImage时,被接收的图片会展示在拍照类app中。当传递的是PDF文件时,其他设备会在Safari中打开它。如果你仅仅分享NSString object,数据将会被展示在Notes app中。
AirDrop Demo App介绍
现在我们创建一个AirDrop demo app来帮你更好地理解UIActivityViewController和AirDrop。这个示例app非常简单,当首次启动,你会看到罗列了几个文件的表格视图,包括图片文件、PDF文件以及文本文件,你可以点击文件并查看内容。在content view中,会看到一个屏幕右上角有一个操作按钮。点击按钮将启用AirDrop选项,并且你可以与周围设备分享图片或者文档。
你可以从头开始做这个app,但是为了节省时间,你可以下载这个项目模板来试验。打开Xcode project,你会发现下边这个Storyboard:
这个示例app已经执行了ListTableViewController和DocumentViewController。如果编译并运行这个app,你会发现一个文件列表。点击任何一个文件,图片或者文档内容将会展示出来。但是分享按钮并没有被执行,这也是我们将要讨论的一点。
添加AirDrop功能
在工程模板中,ListTableViewController被用来在表格视图中展示文件列表,而DocumentViewController则通过web view来展示文档内容。document view中的操作按钮和DocumentViewController的share: method有关。该方法的实现如下所示:
-&(IBAction)share:(id)sender&{&&&&&NSURL&*url&=&[self&fileToURL:self.documentName];&&&&&NSArray&*objectsToShare&=&@[url];&&&&&&UIActivityViewController&*controller&=&[[UIActivityViewController&alloc]&initWithActivityItems:objectsToShare&applicationActivities:nil];&&&&&&&&&&&&&&&NSArray&*excludedActivities&=&@[UIActivityTypePostToTwitter,&UIActivityTypePostToFacebook,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&UIActivityTypePostToWeibo,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&UIActivityTypeMessage,&UIActivityTypeMail,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&UIActivityTypePrint,&UIActivityTypeCopyToPasteboard,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&UIActivityTypeAssignToContact,&UIActivityTypeSaveToCameraRoll,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&UIActivityTypeAddToReadingList,&UIActivityTypePostToFlickr,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&UIActivityTypePostToVimeo,&UIActivityTypePostToTencentWeibo];&&&&&controller.excludedActivityTypes&=&excludedA&&&&&&&&&&&&&&&[self&presentViewController:controller&animated:YES&completion:nil];&&}&
这个代码非常熟悉,我们在最开始的时候已经讨论过了,它可以用来简单地创建UIActivityViewController,排除所有分享功能(AirDrop除外),并作为模态视图展示出控制器。棘手的部分是如何定义分享的对象。下边我们将会把分享文件转换成NSURL object,并把文件URL作为数组传递给AirDrop。
头两行代码是关于file URL转换的。documentName属性存储了当前文件(比如ios-game-kit-sample.pdf),展示在document view中。我们通过文档名称和它返回的相应的file URL,来简单地调用fileToURL: method。fileToURL: method已经在工程模板中,代码如下:
-&(NSURL&*)&fileToURL:(NSString*)filename&{&&&&&NSArray&*fileComponents&=&[filename&componentsSeparatedByString:@&.&];&&&&&NSString&*filePath&=&[[NSBundle&mainBundle]&pathForResource:[fileComponents&objectAtIndex:0]&ofType:[fileComponents&objectAtIndex:1]];&&&&&&return&[NSURL&fileURLWithPath:filePath];&}&
这些代码非常简洁明了,比如ios-game-kit-sample.pdf将会被转换为file:///Users/simon/Library/Application
%20Support/iPhone%20Simulator/7.0.3/Applications/AA-4A3B-8B37-E56B8B4405FC/AirDropDemo.app/ios-
game-kit-sample.pdf.
file URL依据你运行的设备而变化,但是URL应该以&file://&协议开头。通过file URL object,我们创建了相应的数组,并把它传递给UIActivityViewController以用来进行AirDrop分享。
编译并运行AirDrop demo
做完这些后,编译并在iPhone上运行这个app。
注意:你需要一个真实的设备来测试AirDrop分享。不能在模拟器上进行分享。
Uniform Type Identifiers (UTIs)统一标示符(UTIs)
当你把图片分享之其他iOS设备,接收方会自动打开拍照类app并加载图片。如果你传递的是PDF文件,接收方设备可能会提示你选择一个app来打开文件,或者直接在iBooks中打开。iOS是如何知道哪个app适合什么样的数据类型呢?
在系统中,苹果用UTIs来处理数据类型的标示。简单的说,一个uti是用来标示特定类型的数据或文件。例如,com.adobe.pdf标示一个pdf文件,而public.png代表一个PNG图片。可以查看已经在系统中注册了的完整的UTIs清单。(love cc cat)应用程序可以打开在iOS系统中已经注册了的UTI。因此无论文件是否被打开,iOS都会用特定的程序打开这个文件。
系统允许多个程序注册相同的UTI。在这个教程中,iOS将通过app列表打开文件。比如,当你分享PDF文档时,你可以在接收端设备上看到如下屏幕:
AirDrop是iOS 7引入的一个非常酷的功能,它为iOS设备间数据分享提供了一个很好的方法。首先,内置的UIActivityViewController类使得开发者在应用中实现该功能变得非常简单。正如你所看到的demo app,它仅仅需要几行代码就能实现。所以推荐开发者在应用中实现该功能。
你可以在此,以完整参考这个实现过程。
CocoaChina是全球最大的苹果开发中文社区,官方微信每日定时推送各种精彩的研发教程资源和工具,介绍app推广营销经验,最新企业招聘和外包信息,以及Cocos2d引擎、Cocos Studio开发工具包的最新动态及培训信息。关注微信可以第一时间了解最新产品和服务动态,微信在手,天下我有!
请搜索微信号“CocoaChina”关注我们!
关注微信 每日推荐
扫一扫 浏览移动版}

我要回帖

更多关于 液晶电视亮度多少流明 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信