ptpy 0.2.0包可以用于pc控制android手机机和pc的互连吗

图片传输协议的 缩写,全称为:picture transfer protocol;
PTP是最早由柯达与微软协商制定的一种标准,符合这种标准的图像设备在接入Windows XP系统之后可以更好地被系统和应用程序所共享,尤其在网络传输方面,系统可以直接访问这些设备用于建立网络相册时图片的上传、网上聊天时图片的传送等。
媒体传输协议,是基于PTP(Picture Transfer Protocol)协议的扩展,主要用于传输媒体文件,其中有价值的应用就是同步DRM文件的license。目前支持MTP协议的只有 WMP10(Windows Media Player 10)和WMP11(Windows Media Player 11)两个版本,WMP11加入了对Playlist和Album art的支持,在获取媒体文件信息的时候GetObjectPropList代替了WMP10的GetObjectInfo命令。
  MTP支持对数字音频播放器的音乐文件和移动媒体播放器上的电影文件的传输,它是 Windows Media框架的一部分,因此与Windows Media Player紧密相关。Windows Vista内建了对MTP的支持,在Windows XP中支持MTP需要安装Window Media Player 10或以上的版本。Mac和Linux有支持MTP的软件包。
  MTP的应用分两种角色,一个是作为Initiator,另一个作为Responder。例如:WMP(Windows Media Player)就是Initiator,而portable media player设备就是作为Responder。Responder都是被动的回复Initiator的命令,不会主动发命令。主要的用途是传输媒体文件(Media File),并从(向)设备关联元数据,对设备的远程控制有可选的额外支持,读取和设置设备参数,如特别的DRM相关的受限内容设备参数。设备也可向主机发送事件(event)。
  MTP既可以实现在USB协议上,也可以实现在TCP/IP协议上,它属于上层的应用协议,而不关心底层传输协议。目前大部分设备的应用都是基于USB协议。市场上支持MTP的设备有Motorola的Z6, U9, E8等,还有索尼NWZ-A81X系列。总之有越来越多的设备开始支持MTP。微软官方有一个 PlaysForSure的认证,如果你的设备通过了微软的这个测试,就会授权给你一个PlaysForSure的标志。
MTP in Android
的全称是(媒体传输协议),它是微软公司提出的一套媒体文件传输协议。从开始支持。不过,在今天的智能手机领域内,和微软是一对冤家,为什么中会使用呢?请看下文。
一背景知识介绍
笔者相信《程序员》杂志的绝大多数读者或多或少都使用过。因为早在智能手机普及前,数码相机和播放器等都使用了的前身()进行媒体文件传输。那时,只要通过数据线把它们连接上操作系统,就能在“我的电脑“中见到这些设备了。此后,用户可以把它们当做盘一样使用,例如对其进行目录、文件的浏览和拷贝等操作。
既然可以通过把智能设备当作盘使用,那么它和我们常用的大容量存储(,简称)有何不同呢?
模式下,操作存储设备的粒度是设备块(),而非文件系统。什么意思?此处举一个简单例子。当手机通过将挂载到后,就拥有对的绝对控制权。这样,手机就无法同时访问了。这种做法带来的后果就是或程序将因没有外部存储空间而提示无法进行操作(注意,有些厂商的手机对此进行过修改,使得能短时间录制一部分视频到内部存储空间)。这也是早期版本中一个很明显的特点。另外,由于在操作时可能弄坏其文件系统,这将导致重新挂载到手机后不能被识别。如果手机的以模式挂载到机上,的控制权其实还是属于手机。只不过智能手机通过协议向机构建了一个虚拟文件系统。机操作其中的文件时,都会通过标准协议向智能手机发起请求。另外,把功能集成在中,其好处是机操作(例如拷贝或删除等)媒体文件时,媒体数据都会及时更新到媒体数据库中。而模式下,当挂载回手机后,还得花较长时间重新扫描媒体文件以更新媒体数据库。
的好处还有很多,例如它可判断机拷贝的媒体文件是否受目标手机支持,甚至可以触发对应的转码程序将其转换成手机支持的格式。不过和相比,也有不足之处:
传输大文件的速度较慢。不能直接修改文件本身。只能先拷贝到本地修改,完毕后再拷贝回去。除了外,和对支持还不是很完善。
下面我们将介绍协议。
根据协议,的使用者包括两个部分,分别是和。如图所示:
由图可知:
:主要是指,例如机,笔记本等。协议规定所有操作只能由发起。:一般是诸如数码相机、智能手机等存储媒体文件的设备。在中的作用就是处理发起的请求。同时,它还会根据自身状态的变化发送以通知。
注意:后文我们将统一以代表,手机代表。
与很多协议一样,也有自己的协议栈,如图所示:
由图可知,协议栈由下到上分别是:
(物理层):物理层在协议中用来传输数据。目前有三种物理层可供使用。它们分别是:其主要特点是传输文件,同步媒体文件时速度快,而且可以边工作边充电,这是目前用的最多的一种方式;:基于的(简称)将通过来匹配和发现设备。它是家庭网络中是最理想的传输方式;:是最省电,同时也是速度最慢的一种传输方式,用处较少。传输层:中,数据传输格式遵循协议命令层:实现了协议中的各种命令。
如上文所述,采用命令应答方式来工作(发送命令给处理,反馈处理结果),这种方式的主要特点有:
所有命令均以(数据包)的方式在设备两端进行传递。必须接收到前一条消息的处理结果(不论是成功还是超时)后,才能发送下一条消息。
下面我们将以通过打开一个文件为例,按顺序介绍其中涉及到几个主要命令:
当设备第一次连接上后,(即)首先会发送一个名为的请求以获取设备的信息,这些信息包括设备所支持版本的程度,以百分号表示(默认是)、所支持的命令()、所支持的类型等。接着端会发送命令以创建一个会话,该会话一直保持到设备从上断开为止。此后所有命令(除命令外)必须在此会话存活期间才能发送。会话在协议中由来标识,它是一个位的无符号整型,由选择并传给手机。端如果要进行文件操作的话,必须从根目录开始定位目标文件。由于的特殊性,手机内部存储卡在系统中显示为盘符。注意,如果手机内部有两块存储卡的话(如内部存储卡和外部卡),中会显示为两个盘符。端需要通过命令返回某个盘符对应的。在中,是一个位无符号整型,每一个代表了一个逻辑盘符。端可以根据上一步的号,利用操作去获取存储设备的信息,例如剩余存储空间、文件系统类型、访问权限等。接着,就会通过命令来获取此盘符下的文件和子目录的(一个代表一个文件或目录。该值由生成并保证唯一性)。有了,就可以操作这些文件或目录了,例如继续通过获取某个目录中子文件和子目录的信息。假设现在需拷贝一个文件到手机上,那么会通过命令将文件信息(如文件名、文件大小)等传递给手机。而手机需要检查目标目录是否有足够的空间和对应权限。如果一切正常,将通过把数据传递给手机。真正写文件到设备存储空间的则是手机中的。实现的还会在媒体文件传输完毕后,将信息更新到媒体数据库中。除此之外,还可利用命令来设置文件的各种属性值,如(比特率),(采样率),(声道)等。
以上为读者描述了使用的一个简单案例。至于其中的各种命令,读者不妨阅读参考文献,即《》。协议对各种命令都有非常精确的描述,例如表,表所示为命令,返回值定义。其参数类型,传递方向都有详细解释(不得不说,和比起来,微软的开发技术文档做得相当到位)。
表命令定义
对应命令的数字编号是
手机端返回的设备信息数据集
数据传输方向是手机到
手机给的返回值
表所示为的返回数据集的定义。
表返回数据集的定义
手机对协议的支持程度,以表示,默认是
手机对厂商扩展协议的支持,默认是
手机支持的标准的版本,以表示
手机支持的扩展集
手机允许的模式
在当前功能模式下,手机支持的所有操作
在当前功能模式下,手机能产生的所有事件
在当前功能模式下,手机支持的所有设备属性
手机可以自己生成的文件格式,不包括拷贝到手机上文件格式
手机可以解析和理解的所有格式类型
人可读的手机制造商的标识
人可读的手机型号
手机的软件或固件版本
能标明手机功能的唯一序列号
对的支持及认证
协议既然由微软提出,理所当然,对其支持自然是不遗余力。目前操作系统中,和多媒体框架紧密结合,并且已经成为中的重要一部分。如和均内置对功能,其中还新增对和的支持。
微软除了提出协议并在操作系统中提供大力支持外,它对使用协议的设备也有所管理。所有标称支持协议的设备,必须通过微软的测试()。测试通过的设备可以获得一个徽标。关于测试的详细信息,请读者参考。从以上链接中也能下载到wpdmon,它是开发中最常用的测试工具,可显示出所有与手机进行操作时发送的命令、数据及返回值。图为笔者测试某台手机的功能时用截获的信息示意图:
图工具使用示意图
下面我们来看在平台中的实现。
从开始集成功能,主要原因有三个:
手机要支持的话,必须有一个卡,因为卡往往采用支持的分区格式。如果想把内部存储空间通过挂载到上,则内部存储空间需采用特定的分区格式。这对某些手机而言根本不可行。因为内部存储空间本身可能是一个设备,它们采用统一的分区格式。不能因为需要使用,而再增加一块特定分区格式的存储设备。挂载到后,操作系统拥有绝对控制权。此时,系统将无法操作这些设备。根据前文举的例子而言,这对越来越高级的版本而言是不可接受的。另外一个不可忽略的事实就是操作系统在普通劳动人民那儿依然占据极高的市场份额。这恐怕也是明知、对支持力度不够,也要集成它的一个重要原因吧。
中的代码架构
要使用功能,首先需要在设置中启用连接模式为,如图所示:
图中的设置
图所示为参考机(版本)中“连接模式”设置。该操作实际上会触发驱动做相应变动。本文不拟讨论其中的过程,读者可参考手机中文件以查看系统中的模式设置。从目前市面上发布的数款及后续版本的机型来看,大有取代的趋势。
根据前文所述,中的和已有的模块结合紧密,以更好体现“”的特性。其主要结构如图所示:
由图可知架构由下到上分别是:
层包括几个主要对象,如负责从驱动读取数据,并结构化命令格式及其参数、负责结构化手机要返回给的数据包、负责结构化手机要给返回的。负责解析来自的命令并调用相应的接口函数进行处理。层包括、、等对象。其中用来监视事件,判断何时启动或停止。负责启动和加载存储设备的信息到数据库。负责通过接口去启动停止层中以及处理的添加和删除。则负责查询和更新数据库。名字虽然叫,但实际功能用于在和之间转换数据格式。例如把传递过来的信息(如文件大小、文件路径等)转换成需要的格式以方便其更新数据库。
下面我们来看的工作流程。
我们先来看模块启动的流程,如图所示:
图主要模块启动流程
由图可知:
当手机连上线后,会收到来自系统的广播事件。接着它需要从中查询的链接状态,的设置信息和的设置信息。当用户设置为使用模式时,将通过函数启动。启动,在其中将创建对象和对象。同时通过一条特殊(值为“”)的方式,触发调用的函数。这样,和就建立了紧密联系。
是平台中协议处理的核心模块,它会单独启动一个线程用于接收端的命令,其代码如图所示:
图函数代码片段
由图可知,不断从文件描述符读取请求,然后调用进行处理。最后把处理结果返回给对端。
从这段代码读者可以发现,命令层和物理层之间的耦合度较低,这样也方便将来实现功能。
接下来我们看看端发送的处理流程,如图所示:
图处理流程图
由图可知的处理流程大体步骤如下:
发命令给。需要检查存储设备剩余空间、可支持的最大文件大小。如果一切正常的话,它会通过的函数往媒体数据库中加入一条数据项。接着通过将文件内容传递给给。而就会创建该文件,并把数据写到文件中。当文件数据发送完毕,调用。而则会触发进行媒体文件扫描。当然,扫描完后,该文件携带的媒体信息(假如是文件的话,则会把专辑信息、歌手、流派、长度等内容)加入到媒体数据库中。
通过对描述,我们也可看出,充分利用了其平台本身的特性,真正将媒体传输协议和媒体文件扫描恰到好处得结合起来,从而发挥了最大功效。
本文主要对中的进行了相关介绍。虽然协议由微软提供,但因为历史原因,其使用程度相当广泛,以至于也提供了最基本的实现。
当然,如果要做到真正实用并通过微软认证,手机厂商还需要在此基础上做进一步的开发。结合笔者自己的使用经历,国外大牌手机厂商例如、、等对的支持相当到位。相比而言,国内手机厂商的起步稍微晚一点,需要投入更多的精力才能超越。另外,随着无线技术的普及,基于的实现也将极大方面用户的使用。笔者在此希望大家能一起努力,早日让用户从数据线中解放出来。
.cn/s/blog_53dfqc2.html
http://blog.csdn.net/innost/article/details/8876392
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:11270次
排名:千里之外
原创:12篇
转载:47篇
(1)(1)(2)(5)(4)(8)(2)(5)(5)(6)(16)(4)Download PPSSPP - PSP emulator free - latest version
Improve your gaming skills!
Watch experts, learn moves, share experiences
Download PPSSPP - PSP emulator direct from the Windows Store
PPSSPP - PSP emulator for %2
Sign in to start the Download
Sign in with Facebook
Sign in with Google
PPSSPP - PSP emulator free download. Always available from the Softonic servers
Free & fast download
Always available
Tested virus-free
Download PPSSPP - PSP emulator for Windows XP, Vista, 7, 8, 8.1 direct from Softonic secure servers
PPSSPP - PSP emulator free download. Always available from the Softonic servers
Free & fast download
Always available
Tested virus-free
Download PPSSPP - PSP emulator free for other operating systems
Other optionsfor PPSSPP - PSP emulator
Advertisement
Advertisement
If the download doesn't start automatically,
Alternatives to PPSSPP - PSP emulator:
Articles PPSSPP - PSP emulator
by Nick Mead
If you spent many hours of youth in games arcades or sat behind a games console, you'll probably...
by Nick Mead
It seems a lifetime ago now but in the days before Playstations and X-Boxes, game playing was...
Related videos
PPSSPP - PSP emulator
You control your hero dashing around the screen flattening the forces of evil. An over-head perspective gives you a great view of the...
You control your hero dashing around the screen flattening the forces of evil. An over-head perspective gives you a great view of the...
With all the buzz around Marvel's latest blockbuster, pretty much every Marvel free-to-play title is receiving an update with new...
Advertisement
Top Downloads: Emulators games
Softonic - Top Downloads
Top Downloads
The best PSP emulator for all platforms
Advertisement
Advertisement
Developers
We use own and third party cookies to improve our services and your experience. This includes to personalise ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners. If you continue browsing, you are considered to have accepted such use. You may change your cookie preferences and obtain more information .您当前的位置: -&
本类下载榜
总下载排行
安卓手机与PC同步数据(SyncDroid)1.2.5 官方中文版
软件大小:20.08 MB
软件类型:手机软件 - 应用软件 - 手机相关
软件标签:
软件语言:多国语言
授权方式:免费软件
软件星级:
更新时间: 10:10:43
运行环境:WinXP/Win2003/Vista/Win7/Win8/WinALL
下载帮助:
SyncDroid是一款免费的Android与PC同步管理软体,它能同步Android上的视讯、音乐、照片。你只需要3个步骤来备份你的Android简讯、联络人、通话记录、书签、音讯、视讯、相机拍摄的照片、SD卡照片到电脑上,它亦能让您可以轻松地复原到任何Android装置上。&
SyncDroid管理内容:
&音频和视频
&数码相机/&SD卡照片
&浏览器书签
媒体转换:
Android视频,音频,照片TransferConvert视频或音频文件为iPhone,iPoad,Android的管理iPodSyncDroid会是最好的和最简单的备份和恢复解决方案为Android。所有Android用户可以使用免费的SyncDroid&Android的照片,视频,音频,铃声,书签或其他文件备份和同步开启和关闭的Android,一切只是点击几下:&从电脑传输视频和音频到Android
&备份视频和音乐从Android手机到PC
&管理在Android相机和SD卡中的照片
上一软件:
下一软件:
* 本站提供的软件我们都会尽可能测试再上传,都亲自运行过,同时通过360等杀毒软件的验证,限于能力及系统等问题,无法保证所有软件都没有任何问题,如果您发现链接错误或其它问题,发email到zarong◎告诉我们,谢谢!
* 为了达到最快的下载速度,推荐使用或下载本站软件。为确保正常使用请用最新版来解压本站提供的软件!
* 为了网站可以继续发展下去,在不太影响大家的情况下还请给予点击站内广告。本站所有下载无需点击任何广告即可正常下载,由于部分是FTP下载,限制了同时连接数,因此还请使用下载工具尝试多一会连接时间。如果您发现下载链接错误,请点击谢谢!
* 站内提供的所有软件如包含破解及注册码均是由网上搜集,若无意中侵犯到您的版权利益,通知我们,我们会在收到信息一周内给予配合处理!
* 本站为非营利性站点,所有资源均是网上搜集或私下交流学习之用,任何涉及商业盈利目的均不得使用,否则产生的一切后果将由您自己承担!本站仅仅提供一个观摩学习的环境,将不对任何资源负法律责任。所有资源请在下载后24小时内删除。如果您觉得满意,请购买正版,唯有如此才能更好支持你所喜欢的软件更好发展!本站严厉谴责和鄙夷一切利用本站资源进行牟利的盗版行为!> Kingguary的博客详情
传统的Android系统只有一个framework-res.apk资源包,第三方厂商在进行rom定制时会直接修改framework res资源,达到美化目的。但是这种方式跟原生资源的耦合度过高,在系统迁移或者framework ui移植时需要进行人工merge,工作量巨大。通过为Android添加一个新的独立的资源包,可以将厂商定制资源独立出来,可移植、可维护性非常好。
具体做法可以分为以下几个步骤:
1. 修改build/core/clear_var.mk
LOCAL_USE_LETV_FRAMEWORK_RES:= true
2. 修改build/core/package.mk
以下脚本可以加在 $(R_file_stamp): $(framework_res_package_export_deps) 之前,然后修改$(R_file_stamp): $(framework_res_package_export_deps) 和 $(LOCAL_INTERMEDIATE_TARGETS): \ &&& PRIVATE_AAPT_INCLUDES := $(framework_res_package_export)
如下所示:
ifeq ($(LOCAL_USE_LETV_FRAMEWORK_RES),true)
letv_framework_res_package_export := \
$(call intermediates-dir-for,APPS,letv-framework-res,,COMMON)/package-export.apk
letv_framework_res_package_export_deps := \
$(dir $(letv_framework_res_package_export))src/R.stamp
letv_framework_res_package_export :=
letv_framework_res_package_export_deps :=
endif # LOCAL_USE_LETV_FRAMEWORK_RES
$(R_file_stamp): $(framework_res_package_export_deps) $(letv_framework_res_package_export_deps)
$(LOCAL_INTERMEDIATE_TARGETS): \
PRIVATE_AAPT_INCLUDES := $(framework_res_package_export) \
$(letv_framework_res_package_export)
endif # LOCAL_NO_STANDARD_LIBRARIES
3. 修改build/target/product/core.mk
在PRODUCT_PACKAGES增加letv-framework-res
4. 添加一个新的资源包项目,这里在framework/base/core/res同级目录下建立一个新的文件夹letv_res用来存放我们的资源。把res目录下的AndroidManifest.xml和Android.mk拷贝过来,进行修改。&
记得设置LOCAL_USE_MY_FRAMEWORK_RES为false。
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_PACKAGE_NAME := letv-framework-res
LOCAL_CERTIFICATE := platform
# Set LOCAL_USE_LETV_FRAMEWORK_RES as false
LOCAL_USE_LETV_FRAMEWORK_RES := false
# Tell aapt to create "extending (non-application)" resource IDs,
# since these resources will be used by many apps.
LOCAL_AAPT_FLAGS := -x
# Install this alongside the libraries.
LOCAL_MODULE_PATH := $(TARGET_OUT_JAVA_LIBRARIES)
# Create package-export.apk, which other packages can use to get
# PRODUCT-agnostic resource data like IDs and type definitions.
LOCAL_EXPORT_PACKAGE_RESOURCES := true
# Include resources generated by system RenderScript files.
framework_GENERATED_SOURCE_DIR := $(call intermediates-dir-for,JAVA_LIBRARIES,framework,,COMMON)/src
framework_RenderScript_STAMP_FILE := $(framework_GENERATED_SOURCE_DIR)/RenderScript.stamp
#LOCAL_RESOURCE_DIR := $(framework_GENERATED_SOURCE_DIR)/renderscript/res $(LOCAL_PATH)/res
include $(BUILD_PACKAGE)
# Make sure the system .rs files get compiled before building the package-export.apk.
#$(resource_export_package): $(framework_RenderScript_STAMP_FILE)
# define a global intermediate target that other module may depend on.
.PHONY: letv-framework-res-package-target
letv-framework-res-package-target: $(LOCAL_BUILT_MODULE)
&?xml version="1.0" encoding="utf-8"?&
&manifest xmlns:android="/apk/res/android"
package="letv" coreApp="true" android:sharedUserId="android.uid.system"
android:sharedUserLabel="@null"&
&application android:process="system"
android:persistent="true"
android:hasCode="false"
android:label="@null"
android:allowClearUserData="false"
android:killAfterRestore="false"
android:icon="@null"&
&/application&
&/manifest&
资源的放置跟res下的类似,记得values目录下创建public.xml,public.xml对id的类型区分比较严格,attr必须是0x0x010000开头,drawable必须是0x0x020000开头,其他类型好像就没有限制,直接依次0x0xx0x040000开始即可。否则,编译过程中会出现segmentation fault错误。
&resources&
&public type="attr" name="cForeground" id="0x" /&
&public type="drawable" name="ic_filemanager" id="0x" /&
&public type="style" name="LetvTheme" id="0x" /&
&public type="string" name="letv" id="0x" /&
&public type="dimen" name="letv_width" id="0x" /&
&public type="layout" name="letv_text" id="0x" /&
&/resources& 5. &以上只是解决了资源的编译环境问题,资源的查找过程也需要进行修改,修改
AssetManager.java,在init()后添加代码 addAssetPath("/system/framework/letv-framework-res.apk");
public AssetManager() {
synchronized (this) {
if (DEBUG_REFS) {
mNumRefs = 0;
incRefsLocked(this.hashCode());
addAssetPath("/system/framework/letv-framework-res.apk");
if (localLOGV) Log.v(TAG, "New asset manager: " + this);
ensureSystemAssets();
6. 最后就是资源应用问题。应用程序在xml文件中引用letv-framework-res.apk中的资源时可以使用与原生资源类似的访问方式,首先声明letv xmlns :
xmlns:letv="/apk/res/letv"
然后像@android:drawable @android:dimen这种引用方式改成@letv:drawable @letv:dimen即可。
&?xml version="1.0" encoding="utf-8"?&
&LinearLayout
xmlns:android="/apk/res/android"
xmlns:letv="/apk/res/letv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="@letv:dimen/letv_width"
android:orientation="horizontal" &
&ImageView android:id="@+id/file_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="40dp"
android:src="@letv:drawable/ic_filemanager" /&
&/LinearLayout&
人打赏支持
码字总数 17331
应该是type对应的数字有问题
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥
& 开源中国(OSChina.NET) |
开源中国社区(OSChina.net)是工信部
指定的官方社区328 好笑 &
859 好笑 &
134 评论 &
5918 好笑 &
1966 好笑 &
320 好笑 &
434 好笑 &
2676 好笑 &
260 好笑 &
163 好笑 &
213 好笑 &
216 好笑 &
191 好笑 &
177 好笑 &
126 好笑 &
398 好笑 &
1381 好笑 &
141 好笑 &
糗事精选:0
糗龄:1391天

我要回帖

更多关于 android ptp 的文章

 

随机推荐