android初学-1电话与短信应用_第1页
android初学-1电话与短信应用_第2页
android初学-1电话与短信应用_第3页
android初学-1电话与短信应用_第4页
android初学-1电话与短信应用_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、通过前面章节的学习,相信读者对Android应用编程已经有了较为全面的认识,已经知道5如何创建Activity,如何通过XML文件创建用户界面。这些知识技能已经能够让你开发出应用程序的静态用户界面。现在就进一步看看如何让你的应用程序动起来能够和Android上的其他组件交互。本章主要介绍 ent的概念及使用方法。首先从 ent的基本类型入手,介绍不同类型 ent的使用方法,然后分别用和两个例子讲解Android上基本应用的开发。打和发是任何一款智能的基本功能,它需要底层(GSM/3G模块)的支持,因此本章就通过和的例子展示应用程序该如何利用Android提供的API和设备上的通信模块打交道。5

2、.1ent在动手编写自己的拨号程序前,先来看看 ent到底是什么。ent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。通过 ent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来请求。比一个Activity希望打开网页浏览器查看某一网页的内容,那么这个Activity只需要发出WEB_SEARCH_ACTION请求给Android,Android会根据 ent的请求内容,查询各组件时的 entFilter,找到网页浏览器Activity来浏览网页。第3章中讲过Android的有三个基本组件Ac

3、tivity,Service和BroadcastReceiver,它们都是通过 ent机制激活的,而不同类型的组件有传递 ent的不同方式。(1) 要激活一个新的Activity,或者让一个现有的Activity执行新的操作,可以通过调用Context.startActivity()或者Activity.startActivityForResult()方法。这两个方法需要传入的青鸟殷勤为探看与应用第5章 116第 5 章青鸟殷勤为探看与应用ent参数也称为Activity Actionent(活动行为意图),根据 ent对象对目标Activity描述的不同,来启动与之相匹配的Activity或

4、传递信息。刚刚提到的打开网页浏览器例子就是一个Activity Actionent。(2) 要启动一个新的服务,或者向一个已有的服务传递新的指令,调用Context.startSer-vice()方法或调用Context.bindService()方法将调用此方法的上下文对象与Service绑定。(3) 通过ContexdBroadcast()、ContexdOrderBroadcast()和Contexd-的StickBroadcast()这三个方法可以发送Broadcastent。Broadcastent发送后,所有已拥有与之相匹配 entFilter的BroadcastReceiver就

5、会被激活。这种机制被广泛运用于设备或系统状态变化,一个常见的例子是,当Android 的电池电量过低时,系统会发送Action为BATTERY_LOW的广播,接着任何可匹配该Action的 entFilter的BroadcastReceiver都会各自运行自定义的处理代码,比如关闭设备的WIFI和GPS以节省电池消耗。ent一旦发出,Android都会准确找到相匹配的一个或多个Activity、Service或Broadcast-Receiver作为响应。所以,不同类型的 ent消息不会出现:Broadcastent消息只会发送给BroadcastReceiver,而绝不可能发送给Activi

6、ty或Service。由startActivity()传递的消息也只可能发送给Activity,由startService()传递的 ent只可能发送给Service。ent 的主要组成部分ent对象抽象地描述了要执行的操作,其描述的基本内容可以分为组件名称、Action(动作)、Data(数据)、Category(类别)、Extra(附加信息)和Flag(标志位)6部分,下面是详细的介绍。(1) 组件名称是指目标组件的名称。组件名称是一个ponentName对象,这种对象名称是目标组件类名和目标组件所在应用程序的包名的组合。组件中包名不一定要和manifest文件中的包名完全匹配。组件名称是

7、一个可选项。如果 ent消息中指明了目标组件的名称,这就是一个显式消息, ent会传递给指明的组件。如果目标组件名称并没有指定,Android则通过 ent内的其他信息和已 的 entFilter的比较来选择合适的目标组件。(2) Action描述 ent所触发动作名字的字符串,对于Broadcastent来说,Action指被广去的动作。理论上Action可以为任何字符串,而与Android系统应用有关的Action字符串以静态字符串常量的形式定义在了 ent类中。表5-1列出了当前Android系统中常见的Activity Actionent的Action,的介绍可以参见附录A。5.1en

8、t117表5-1常见的Activity Actionent常量Activityent Action字符串常量描述拨出Data里指定的ACTION_CALL ACTION_EDIT ACTION_MAIN ACTION_SYNC ACTION_VIEW ACTION_DIALACTION_SENDTO号码打开编辑Data里指定数据相对应的应用程序主程序,不会接收数据,结束后也不返回数据在Android和服务器之间同步数据根据Data类型的不同,打开相对应的应用程序以显示数据启动系统拨号程序或其他拨号程序,并显示Data里指定的向Data里描述的目标地址发送数据号码表5-2列出了常见的Broadc

9、ast表5-2ent Action常量。常见的Broadcast ent Action常量Broadcast ent Action字符串常量描述5ACTION_TIME_TICK ACTION_TIME_CHANGED ACTION_TIMEZONE_CHANGEDPLETED ACTION_PACKAGE_ADDED ACTION_PACKAGE_CHANGED ACTION_PACKAGE_REMOVEDACTION_UID_REMOVED系统时间每过一分钟发出的广播系统时间通过设置发生了变化 时区改变系统启动完毕新的应用程序apk包安装完毕现有应用程序apk包改变现有应用程序apk用户i

10、d被删除删除(3) Data描述 ent要操作的数据URI和数据类型。有的动作需要对相应的数据进行处理。比如,对于动作ACTION_EDIT来说,它的数据可以为联系人息等可编辑的URI。而对于ACTION_CALL来说,它的数据可以是一个:/格式的号码URI。正确设置 ent的数据对于Android寻找系统中匹配 ent请求的组件很重要。如果你使用了ACTION_CALL,但是你的数据却设置成了to:/格式的URI,那么你所期望的“启动打应用程序”这一动作会因为没有与之相对应的应用程序而不会被执行。所以每次使用 ent时,都应该留意与设置的Action相关的数据类型和格式。(4) Catego

11、ry是对被请求组件的额外描述信息。Android也在ent类中定义了一组静态字符串常量表示 ent不同的类别,表5-3列出了常见的Category常量,内容请参见附录A。表5-3 常见的Category常量Category字符串常量描述CATEGORY_BROWSABLECATEGORY_GADGET目标Activity能通过在网页浏览器中点击而激活(比如,点击浏览器中的)表示目标Activity可以被内嵌到其他Activity当中118第 5 章青鸟殷勤为探看与应用(续)Category字符串常量描述CATEGORY_HOME目标Activity是HOME Activity,即显示的Acti

12、vity开机启动后显示的Activity,或按下HOME键后CATEGORY_LAUNCHERCATEGORY_PREFERENCE表示目标Activity是应用程序中最优先被执行的Activity表示目标Activity是一个偏好设置的Activity(5) Extra当ent连接不同的组件时,有时需要在 ent中附加额外的信息,以便将使用数据传递给目标Activity。比如ACTION_TIMEZONE_CHANGED需要带有附加信息表示新的时区。Extra用键值对结构保存在 ent对象当中, ent对象通过调用方法putExtras()和getExtras()来和获取Extra。Extr

13、a是以Bundle对象的形式来保存的,Bundle对象提供了一系列put和get方法来设置、提取相应键值信息。在 ent类中同样为Android系统应用的一些Exrta的键值定义了静态的字符串常量。表5-4 常见的Extra常量Extra键值字符串常量描述装有邮件密送地址的字符串数组装有邮件抄送地址的字符串数组装有邮件发送地址的字符串数组使用ACTION_PICK_ACTIVITY动作时装有 ent选项的键触发该 ent的按键的KeyEvent对象EXTRA_BCCEXTRA_CC EXTRA_EXTRA_ENTEXTRA_KEY_EVENTEXTRA_PHONE_NUMBEREXTRA_SH

14、ORTCUT_ICON EXTRA_SHORTCUT_ICON_RESOURC使用拨打相关Action时,号码字符串的键,类型为String使用ACTION_CREATE_SHORTCUT在HomeActivity创建快捷方式时,对快捷方式的描述信息。其中ICON和ICON_RESOURCE描述的是快捷方式的图标,类型分别为Bitmap和ShortcutIconResource。 ENT描述的是快捷方式相对应的ent对象。NAME描述的是快捷方式的名字EEXTRA_SHORTCUT_ENTEXTRA_SHORTCUT_NAMEEXTRA_SUBJECT EXTRA_TEXT描述信息的键使用AC

15、TION_SEND动作时,quence使用ACTION_CHOOSER动作时,描述要发送的文本信息,类型为CharSe-EXTRA_TITLEEXTRA_UID框标题的键,类型为CharSequence使用ACTION_UID_REMOVED动作时,描述删除的用户id的键,类型为5.2entent是一种在不同组件之间传递的请求消息,是应用程序发出的请求和意图。作为一个完整的消息传递机制, ent不仅需要发送端,还需要接收端。Android如何ent的请求内容,并选择合适的组件响应 ent请求呢?马上就一起来学习这个内容。5.2ent1195.2.1显式ent 和隐式ent对于明确了目标组件名称

16、的 ent,称之为“显式 ent”。对于没有明确目标组ent相关的件名称的 ent,则称之为“隐式 ent”。Android系统使用 entFilter 来寻找与隐式对象。(关于 entFilter马上就会讲到。)显式 ent直接用组件的名称定义目标组件,这种方式很直接。但是由于开发往往并不清楚别的应用程序的组件名称,因此,显式 ent用于在应用程序传递消息。比如在某应用程序内,一个Activity启动一个Service。隐式 ent恰恰相反,它不会用组件名称定义需要激活的目标组件,它更广泛地用于在不同应用程序之间传递消息。清楚了显式 ent和隐式 ent的概念后,再来看看决定 ent目标组件

17、的。在显式ent消息中,决定目标组件的唯一要素就是组件名称,因此,如果你的 ent中已经明确定义了目标组件的名称,那么你就完全不用再定义其他 ent内容。而对于隐式 ent则不同,由于没有明确的目标组件名称,所以必须由Android系统帮助应用程序寻找与 ent请求意图最匹配的组件。具体的选择方法是:Android将 ent的请求内容和一个叫做 entFilter的过滤器比较, entFilter中包含系统中所有可能的待选组件。如果 entFilter中某一组件匹配隐式 ent请求的内容,那么Android就选择该组件作为该隐式 ent的目标组件。5Android如何知道应用程序能够处理某种类

18、型的 ent请求呢?这需要应用程序在Android-Manifest.xml中自己所含组件的过滤器(即可以匹配哪些 ent请求)。一个没有ent-了Filter的组件只能响应指明自己名字的显式 ent请求,而无法响应隐式 ent请求。而一个entFilter的组件既可以响应显式 ent请求,也可以响应隐式 ent请求。在通过和 entFilter比较来隐式 ent请求时,Android将以下三个作为选择的参考标准。ActionDataCategory而Extra和Flag在收到 ent时是并不起作用的。5.2.2entFilter应用程序的组件为了告诉Android自己能响应、处理哪些隐式 e

19、nt请求,可以一个甚至多个 entFilter。每个 entFilter描述该组件所能响应 ent请求的能力组件希望接收什么类型的请求行为,什么类型的请求数据。比如之前请求网页浏览器这个例子中,网页浏览器程序的entFilter就应该它所希望接收的 ent Action是WEB_SEARCH_ACTION,以及与之相关的请求120第 5 章青鸟殷勤为探看与应用数据是网页地址URI格式。如何为组件自己的 entFilter? 常见的方法是在AndroidManifest.xml文件中用属性ent-Filter描述组件的 entFilter。提到,隐式 ent和 entFilter进行比较时的三要

20、素是 ent的Action、Data以及前面Category。实际上,一个隐式 ent请求要能够传递给目标组件,必要通过这三个方面的检查。如果任何一方面不匹配,Android都不会将该隐式 ent传递给目标组件。接下来检查的具体规则。讲解这面1动作测试元素中可以包括子元素,比如:action android:name=com.exaction android:name=com.exject.SHOW_CURRENT / ject.SHOW_RECENT /ject.SHOW_PENDING /一条元素至少应该包含一个,否则任何 ent请求都不能和该匹配。如果 ent请求的Action和中个某一

21、条匹配,那么该 ent就通过了这条的动作测试。如果 ent请求或中没有说明具体的Action类型,那么会出现下面两种情(1) 如果中没有包含任何Action类型,那么无论什么 ent请求都无法和这条匹配。(2) 反之,如果 ent请求中没有设定Action类型,那么只要中包含有Action类型,这个 ent请求就将顺利地通过的行为测试。2类别测试元素可以包含子元素,比如:ent-filter . . . category android:name=android.ent.Category.DEFAULT /ent.Category.BROWSABLE /5.3用ent 激活拨号程序121只有当

22、 ent请求中所有的Category与组件中某一个 entFilter的完全匹配时,才会让该 ent请求通过测试, entFilter中多余的并不会导致匹配失败。一个没有指定任何类别测试的 entFilter仅仅只会匹配没有设置类别的 ent请求。3数据测试数据在中的描述如下:ent-filter/元素指定了希望接受的 ent请求的数据URI和数据类型,URI被分成三部分来进行匹配:scheme、authority和path。其中,用setData()设定的 ent请求的URI数据类型和scheme5必须与entFilter中所指定的一致。若entFilter中还指定了authority或pa

23、th,它们也需要相匹配才会通过测试。讲解完 ent基本概念之后,接下来就使用 ent激活Android自带的拨号程序。通过这个实例你会发现,使用 ent并不像其概念描述得那样难。5.3用ent 激活拨号程序前面介绍的内容让读者清楚了序中使用 ent。这里使用一个 ent打开ent,现在马上用一个实例来讲解如何在应用程拨号程序, ent的行为是ACTION_DIAL,同时在ent中传递被呼叫人的号码。程序的实现分为三个阶段,在第一阶段,只完成向固定拨号的工作,用户不能输入希望通话的号码。在第二阶段,再进一步完户号码,然后再拨号。在第三阶段,加入 entFilter,使得用户可的程序。界面,让用户

24、可以输入以通过硬键盘拨号键启动5.3.1拨号程序雏形程序完成后你将看到如图5-1所示的画面。屏幕上有一个“拨号”按钮,按下该按钮后将看到一个新的Activity画面,画面的内容就是Android自带的拨号程序。本例将用到之前讲过的所有知识,是到目前为止本书的第一个综合实例,读者可以借此机会自己对本书前面所述内容的掌握。下面就让一起来一步步地构建这个应用吧。(1) 创建一个新项目。122第 5 章青鸟殷勤为探看与应用新创建的项目名字叫TinyDialer,图5-1向读者展示了创建项目的基本信息。图5-1 新建TinyDialer项目程序的包名为com.studio.android.chp05.e

25、x01,Activity和应用程序名字也叫TinyDialer。(2) 修改用户界面。新创建的项目中用户界面默认为o Android风格(只显示问候语字符串),因此需要修改默认的用户界面,在用户界面中加入一个Button按钮。编辑res/layout/main.xml文件,删除对,加入新的,代码如下。?xml ver HYPERLINK http:/s/ xmlns:android=http:/s/apk/res/androidandroid:orienion=verticalandroid:layout_width=fill_parent android:layout_height=fill

26、_parent把Button的id设置为button_id,同时将Button显示在界面上的文字设置为res/string.xml/下的Button,打开res/string.xml,把Button的内容设置为“拨号”。?xml ver拨号TinyDialer(3) 创建TinyDialer的Activity。编辑TinyDialer.java512345678910111213package com.studio.android.chp05.ex01;import android.app.Activity;import android.os.Bundle;public class TinyD

27、ialer extend Activity第一次创建时调用 Overrideivity public void onCreate(Bundle savedInstane) super.onCreate(savedInstansetContentView(R.layout.main);e);现在运行你的TinyDialer,你会发现一个简单的用户界面已经创建好了,如图5-2所示。图5-2 TinyDialer的初始界面不过这时点击“拨号”按钮不会有任何反应。接下来,事件的处理。就继续加入对“拨号”按钮单击(4) 定位“拨号”按钮。124第 5 章青鸟殷勤为探看与应用要加入对“拨号”按钮的响应,首

28、先通过findViewById()方法获得该按钮对象的final Button button = (Button) findViewById(R.id.button_id);。(5) 加入对“拨号”按钮按键动作的响应。为“拨号”按钮对象调用setOnClickListener()方法,设置单击事件final Button button = (Button) findViewById(R.id.button_id); button.setOnClickListener(new Button.OnClickListener() Overridepublic void onClick(View b)

29、 /TODO 加入对按钮按下后的操作);器。(6) 创建 ent对象,用 ent启动新的Activity。希望在按钮被按下后发出一个启动系统自带拨号程序的 ent,所以首先创建 ent对象。创建一个新的 ent对象的基本语法如下所示。ent = newent(,)在本例中,参数为ent.ACTION_DIAL参数是你希望传入的号码。在Android中,传给 ent的数据用URI格式表示,因此需要使用Uri.parse方法将字符串格式的号码成URI格式。在本例中,用最终创建 ent的代码如下所示。表示想要呼叫的号码。那么:ent I = newUri.parse(ent(ent.ACTION_D

30、IAL,);:/创建好 ent之后,你就可以通过它告诉Android希望启动新的Activity了。startActivity(i);至此,一个完整的使用 ent的例子雏形就完成了。12345678910package com.studio.android.chp05.ex01;import android.app.Activity;import android.content. import .Uri; import android.os.Bundle;import android.view.View;ent;import android.widget.Button;public class

31、 TinyDialer extendivity 5.3用ent 激活拨号程序12511121314151617181920212223242526/* Called when the Activity isOverridecreated. */public void onCreate(Bundle savedInstane) super.onCreate(savedInstansetContentView(R.layout.main);e);final Button button = (Button) findViewById(R.id.button_id); button.setOnClic

32、kListener(new Button.OnClickListener() Overridepublic void onClick(View b) ent i = new startActivity(i););ent(ent.ACTION_DIAL, Uri.parse(:/);5再次运行TinyDialer,按下“拨号”键,这次你将看到用户界面切换到Android自带的拨号程序,同时你所设定的号码已经显示在屏幕上,如图5-3所示。图5-3 切换到Android自带的拨号程序5.3.2可输入号码的拨号程序下面进一步完善第一阶段中的成果,使得用户能输入号码。由于用户输入的内容可能不是一个有效的

33、号码,所以程序还需要对用户输入的字符串进行判断,呼叫有效号码,如果是无效号码则提示用户重新输入。126第 5 章青鸟殷勤为探看与应用步骤1:修改用户界面,加入获取用户输入的EditText控件。在Button控件之上加入一个EditText控件用于获取用户输入phonenumber_id。号码,设置其id名为步骤2:获得EditText对象的final EditText phoneNumber = (EditText)findViewById(R.id.phonenumber_id);。步骤3:在回调方法onClick中加入对Overridepublic void onClick(View b

34、) 号码有效性的判断和处理。String callee = phoneNumber.getText().toString();if (PhoneNumberUtils.isGlobalPhoneNumber(callee)ent i = newent(ent.ACTION_DIAL,Uri.parse(:/+ callee);startActivity(i); else Toast.makeText(TinyDialer.this, R.string.notify_incorrect_phonenumber, Toast.LENGTH_LONG).show();步骤3中有几点需明。(1) 判断

35、号码的有效性可以使用android.ephony.PhoneNumberUtils 包中的isGlobalPhoneNumber方法,Android已经为准备了很多诸如此类的基本方法简化程序员的工作量,用好这些方法能够帮助轻松快速地完成工作。(2) 对于无效号码的提示,可以使用Toast类。SDK文档中明确说明Toast是包含给用户快速提醒信息的一种通知机制。当然,你可能会问,我怎么知道Android SDK提供了哪些机制帮助我实现不同的需求?一个好办法是查看模拟器中自带的Aemos(API演示),如图5-4所示。5.3用ent 激活拨号程序127Aemos已经分门别类地为读开发组织了很多实例

36、,这些丰富多彩的实例是开发获取灵感的好地方。比如中,如图5-5所示。这里用到的Toast就在App-Notification-NotifyWithText这个例子5图5-4 模拟器自带了Aemos图5-5 NotifyWithText示例的界面相应的源代码可以在Android SDK安装目录下的slesAemossrccomexleandroidapisappNotifyWithText.java中找到。有了这样一个有力的帮手,相信你开发应用程序时会更有信心。至此就完成了所有主要功能,完成后的程序外观如图5-6所示。如果用户输入的内容不是一个有效号码,那么可以看到类似这样的提示,如图5-7所示

37、。图5-6 完成后的TingDialer应用程序图5-7 输入号码不正确会看到提示128第 5 章青鸟殷勤为探看与应用5.3.3使用entFilter 的拨号程序根据之前对于 entFilter的描述,从硬件键盘的拨号键启动程序需要在TinyDialer中加入一条新的 entFilter。先来看看在AndroidManifest.xml中关于 entFilter的描述是什么。action android:name=android.ent.Category.LAUNCHER /目前只有一条 entFilter,它的动作名称是Action.MAIN,类别名称是Category.LAUNCHER。正

38、是有了这条 entFilter,TinyDialer的图标才出现在了应用程序选择的菜单里。为了新加入拨号键启动TinyDialer,加入:action android:name=android.更改后的效果怎么样?当你按下键盘左下角绿色的拨号键时,系统会弹出一个窗口提醒用户,选择启动TinyDialer还是选择Android自带的拨号程序如图5-8所示。图5-8 提示选择拨号程序这个例子很好地说明了隐式 ent 的用法。TinyDialer自己的 entFilter 的行为是ACTION.CALL_BUTTON,以后每次用户按下拨号键时,Android系统都会将拨号键的意图和所有声明过ACTI

39、ON.CALL_BUTTON的 entFilter进行比较,然后将匹配的组件提供给用户选择。5.4用ent 实现一个简单的程序1295.4用ent 实现一个简单的程序和拨号程序一样,也是任何一款不可或缺的基本应用,是使用频率最高的程序之一。现在,Android自带的再实现一个自己的程序TinySMS。这个例子中不是简单地使用 ent激活程序,而是使用SmsManager类完成的功能。希望借此例抛砖引玉,帮助读者进一步理解Android中常见类的用法。由于已经有前面的拨号程序的例子,在程序中,用更简洁的方式来描述开发的整个过程。5.4.1创建 TinySMS 界面创建新项目TinySMS,如图5

40、-9所示。5图5-9新建TinySMS项目修改用户界面和AndroidManifest.xml文件。用户界面的res/layout/main.xml文件内容如下所示,界面如图5-10所示。12?xml ver HYPERLINK http:/s/ xmlns:android=http:/s/apk/res/android3android:orienion=vertical130第 5 章青鸟殷勤为探看与应用4567891011121314151617181920212223242526272829android:layout_width=fill_parent android:layout_h

41、eight=fill_parentTextViewandroid:layout_width=fill_parent android:layout_height=wrap_contentandroid:text=输入android:id=+id/txtPhoneNo android:layout_width=fill_parent android:layout_height=wrap_content /TextViewandroid:layout_width=fill_parent android:layout_height=wrap_contentandroid:text=android:id

42、=+id/txtMessage android:layout_width=fill_parent android:layout_height=150px android:gravity=top /Buttonandroid:id=+id/btnSendSMS android:layout_width=fill_parent android:layout_height=wrap_contentandroid:text= /图5-10 TinySMS的界面5.4用ent 实现一个简单的程序1315.4.2设置权限由于的程序需要使用功能,根据3.5节关于AndroidManifest.xml的描述,

43、我们需要在该文件中程序的权限。因此这里需要加入TinySMS行)。(第16的权限的1234567891011121314151617manifest HYPERLINK http:/s/ xmlns:android=http:/spackage=com.studio.android.chp05.ex02/apk/res/androidandroid:ver android:verandroid:icon=drawable/icon android:label=string/app_name5action android:name=android.ent.Action.MAIN /ent.Cat

44、egory.LAUNCHER /uses-permisandroid:name=android.permis.SEND_SMS/5.4.3在“”按钮的单击事件处理的回调方法onClick()的实现中,实现的功能。btnSendSMS.setOnClickListener(new View.OnClickListener() public void onClick(View v) String phoneNo = txtPhoneNo.getText().toString(); String message = txtMessage.getText().toString(); if (phoneNo.length()0 & message.length()0)sendSMS(phoneNo, message); else Toast.makeText(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论