




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 <<android 的幾個技巧1>>目錄 <<android 的幾個技巧1>>10. 入門實(shí)例剖析121.在測試時,如何實(shí)現(xiàn)一個提示82.可以使用AlertDialog.Builder 才產(chǎn)生一個提示框.94.menu 的用法.101. 簡單的代碼102. menu實(shí)現(xiàn)的兩種方法105.Activity 的切換141. 代碼142. 詳解:156.Android UI Layout191. AbsoluteLayout197. Tab以及 HostTab操作208. List (圖片/按鈕/標(biāo)題/文本
2、)26LIST例一27LIST例二36LIST例三409. 調(diào)用瀏覽器 載入某網(wǎng)址4310.監(jiān)控應(yīng)用程序包的安裝&刪除43方法一:43方法二:4611. 使用Toast輸出一個字符串5212. 把一個字符串寫進(jìn)文件5213. 把文件內(nèi)容讀出到一個字符串5414. 調(diào)用Android installer 安裝和卸載程序5515. 結(jié)束某個進(jìn)程5516. 設(shè)置默認(rèn)來電鈴聲5617. 開機(jī)自啟動5718. 線程與子線程58handlerMessage實(shí)例5819. Service601. 什么是Service602. 如何使用Service603. Service的生命周期66附) 常用界面
3、截圖:67提示167提示268菜單681 / 740. 入門實(shí)例剖析1開卷語俗話說,“熟讀唐詩三百首,不會作詩也會吟”。最近收集了很多Android的示例代碼,從這些代碼的閱讀和實(shí)驗(yàn)中學(xué)習(xí)到很多知識,從而產(chǎn)生寫這個系列的打算,目標(biāo)就是一步步跟著實(shí)例進(jìn)行動手實(shí)作,真正從“做”中體會和學(xué)習(xí)Android開發(fā)。 本文目標(biāo)是Android自帶的一個范例程序:記事本, 預(yù)備知識搭建開發(fā)環(huán)境,嘗試編寫”Hello World”,了解Android的基本概念,熟悉Android的API(官方文檔中都有,不贅述)。程序截圖先來簡單了解下程序運(yùn)行的效果 1 2 3 4程序入口點(diǎn)類似于win32程序里的WinMa
4、in函數(shù),Android自然也有它的程序入口點(diǎn)。它通過在AndroidManifest.xml文件中配置來指明,可以看到名為NotesList的activity節(jié)點(diǎn)下有這樣一個intent-filter,其action為ent.action.MAIN,Category指定為 ent.category.LAUNCHER,這就指明了這個activity是作為入口activity,系統(tǒng)查找到它后,就會創(chuàng)建這個activity實(shí)例來運(yùn)行,若未發(fā)現(xiàn)就不啟動(你可以把MAIN改名字試試)。<intent-filter><action andro
5、id:name="ent.action.MAIN"/><category android:name="ent.category.LAUNCHER"/></intent-filter>NotesList詳解就從入口點(diǎn)所在的activity(見圖1)開始,可以看到這個activity最重要的功能就是顯示日志列表。這個程序的日志都存放在Sqlite數(shù)據(jù)庫中,因此需要讀取出所有的日志記錄并顯示。先來看兩個重要的私有數(shù)據(jù),第一個PROJECTION字段指明了“日志列表“所關(guān)注的數(shù)據(jù)庫中的字段
6、(即只需要ID和Title就可以了)。privatestaticfinal String PROJECTION =new String Notes._ID, / 0 Notes.TITLE, / 1 ;第二個字段COLUMN_INDEX_TITLE指明title字段在數(shù)據(jù)表中的索引。privatestaticfinalint COLUMN_INDEX_TITLE =1;然后就進(jìn)入第一個調(diào)用的函數(shù)onCreate。 Intent intent = getIntent(); if (intent.getData() =null) intent.setData(Notes.CONTENT_URI);
7、 因?yàn)镹otesList這個activity是系統(tǒng)調(diào)用的,此時的intent是不帶數(shù)據(jù)和操作類型的,系統(tǒng)只是在其中指明了目標(biāo)組件是Notelist,所以這里把”content:/ vider.NotePad/notes”保存到intent里面,這個URI地址指明了數(shù)據(jù)庫中的數(shù)據(jù)表名(參見以后的NotePadProvider類),也就是保存日志的數(shù)據(jù)表notes。 Cursor cursor = managedQuery(getIntent().getData(), PROJECTION, null, null, Notes.DEFAULT_SORT_ORDER);
8、然后調(diào)用managedQuery函數(shù)查詢出所有的日志信息,這里第一個參數(shù)就是上面設(shè)置的” content:/ vider.NotePad/notes”這個URI,即notes數(shù)據(jù)表。PROJECTION 字段指明了結(jié)果中所需要的字段,Notes.DEFAULT_SORT_ORDER 指明了結(jié)果的排序規(guī)則。實(shí)際上managedQuery并沒有直接去查詢數(shù)據(jù)庫,而是通過Content Provider來完成實(shí)際的數(shù)據(jù)庫操作,這樣就實(shí)現(xiàn)了邏輯層和數(shù)據(jù)庫層的分離。SimpleCursorAdapter adapter =new SimpleCursorAdapter(thi
9、s, R.layout.noteslist_item, cursor, new String Notes.TITLE , newint android.R.id.text1 ); setListAdapter(adapter); 查詢出日志列表后,構(gòu)造一個CursorAdapter,并將其作為List View的數(shù)據(jù)源,從而在界面上顯示出日志列表??梢钥吹剑诙€參數(shù)是R.layout.noteslist_item,打開對應(yīng)的noteslist_item.xml文件,<TextView xmlns:android=" android:id="android:id/te
10、xt1" android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:textAppearance="?android:attr/textAppearanceLarge" android:gravity="center_vertical" android:paddingLeft="5dip" android:singleLine=&quo
11、t;true"/> 就是用來顯示一條日志記錄的TextView,最后兩個字段指明了實(shí)際的字段映射關(guān)系,通過這個TextView來顯示一條日志記錄的title字段。處理“選擇日志”事件既然有了“日志列表”,就自然要考慮如何處理某一條日志的單擊事件,這通過重載onListItemClick方法來完成, Override protectedvoid onListItemClick(ListView l, View v, int position, long id) Uri uri = ContentUris.withAppendedId(getIntent().getData(),
12、id); String action = getIntent().getAction(); if (Intent.ACTION_PICK.equals(action) | Intent.ACTION_GET_CONTENT.equals(action) / The caller is waiting for us to return a note selected by / the user. The have clicked on one, so return it now. setResult(RESULT_OK, new Intent().setData(uri); else / Lau
13、nch activity to view/edit the currently selected item startActivity(new Intent(Intent.ACTION_EDIT, uri); 首先通過”content:/ vider.NotePad/notes”和日志的id 號拼接得到選中日志的真正URI,然后創(chuàng)建一個新的Intent,其操作類型為Intent.ACTION_EDIT,數(shù)據(jù)域指出待編輯的日志URI(這里只分析else塊)。Intent深度剖析那么,上面這句startActivity(new Intent(Intent.ACTION_
14、EDIT, uri)執(zhí)行后會發(fā)生什么事情呢?這時候Android系統(tǒng)就跳出來接管了,它會根據(jù)intent中的信息找到對應(yīng)的activity,在這里找到的是NoteEditor這個activity,然后創(chuàng)建這個activity的實(shí)例并運(yùn)行。那么,Android又是如何找到NoteEditor這個對應(yīng)的activity的呢?這就是intent發(fā)揮作用的時刻了。new Intent(Intent.ACTION_EDIT, uri)這里的Intent.ACTION_EDIT=” ent.action.EDIT”,另外通過設(shè)置斷點(diǎn),我們看下這里的uri值: 可以看到選中的日志條目的
15、URI是:content:/vider.NotePad/notes/1然后我們再來看下Androidmanfest.xml,其中有這個provider<provider android:name="NotePadProvider" android:authorities="vider.NotePad"/> 發(fā)現(xiàn)沒有?它也有vider.NotePad,這個是content:/vider.NotePad/notes/1的一部分,同時&l
16、t;activity android:name="NoteEditor" android:theme="android:style/Theme.Light" android:label="string/title_note" android:screenOrientation="sensor" android:configChanges="keyboardHidden|orientation"><!- This filter says that we can view or edit
17、 the data of a single note -><intent-filter android:label="string/resolve_edit"><action android:name="ent.action.VIEW"/><action android:name="ent.action.EDIT"/><action android:name="com.android.notepad.action.EDIT_NOTE&
18、quot;/><category android:name="ent.category.DEFAULT"/><data android:mimeType="vnd.android.cursor.item/vnd.google.note"/></intent-filter><!- This filter says that we can create a new note inside of a directory of notes. -><intent-filter>
19、<action android:name="ent.action.INSERT"/><category android:name="ent.category.DEFAULT"/><data android:mimeType="vnd.android.cursor.dir/vnd.google.note"/></intent-filter></activity> 上面第一個intent-filter中有一個action 名為andro
20、ent.action.EDIT,而前面我們創(chuàng)建的Intent也正好是Intent.ACTION_EDIT=” ent.action.EDIT”,想必大家已經(jīng)明白是怎么回事了吧。下面就進(jìn)入activity選擇機(jī)制了:系統(tǒng)從intent中獲取道uri,得到了content:/vider.NotePad/notes/1,去掉開始的content:標(biāo)識,得到vider.NotePad/notes/1,然后獲取前面的vider.NotePad,然后就到Androidmanfest.xml
21、中找到authorities為vider.NotePad的provider,這個就是后面要講的contentprovider,然后就加載這個content provider。<provider android:name="NotePadProvider" android:authorities="vider.NotePad"/>在這里是NotePadProvider,然后調(diào)用NotePadProvider的gettype函數(shù),并把上述URI傳給這個函數(shù),函數(shù)返回URI所對應(yīng)的類型(這里返
22、回Notes.CONTENT_ITEM_TYPE,代表一條日志記錄,而CONTENT_ITEM_TYPE = " vnd.android.cursor.item/vnd.google.note ")。 Override public String getType(Uri uri) switch (sUriMatcher.match(uri) case NOTES: return Notes.CONTENT_TYPE; case NOTE_ID: return Notes.CONTENT_ITEM_TYPE; default: thrownew IllegalArgument
23、Exception("Unknown URI "+ uri); 上面的sUriMatcher.match是用來檢測uri是否能夠被處理,而sUriMatcher.match(uri)返回值其實(shí)是由 sUriMatcher =new UriMatcher(UriMatcher.NO_MATCH); sUriMatcher.addURI(NotePad.AUTHORITY, "notes", NOTES); sUriMatcher.addURI(NotePad.AUTHORITY, "notes/#", NOTE_ID);決定的。然后系統(tǒng)
24、使用獲得的" vnd.android.cursor.item/vnd.google.note "和”ent.action.EDIT”到androidmanfest.xml中去找匹配的activity.<intent-filter android:label="string/resolve_edit"><action android:name="ent.action.VIEW"/><action android:name="ent.
25、action.EDIT"/><action android:name="com.android.notepad.action.EDIT_NOTE"/><category android:name="ent.category.DEFAULT"/><data android:mimeType="vnd.android.cursor.item/vnd.google.note"/></intent-filter>正好NoteEditor這個activity的
26、intent-filter滿足上述條件,這樣就找到了NoteEditor。于是系統(tǒng)加載這個類并實(shí)例化,運(yùn)行,然后就到了NoteEditor的OnCreate函數(shù)中(見后續(xù)文章)。小技巧1,在命令行中使用”adb shell”命令進(jìn)入系統(tǒng)中,然后”cd app”進(jìn)入應(yīng)用程序所在目錄,”rm XXX”就可以刪除你指定的apk,從而去掉其在系統(tǒng)頂層界面占據(jù)的圖標(biāo),若兩次”cd data”則可以進(jìn)入應(yīng)用程序使用的數(shù)據(jù)目錄,你的數(shù)據(jù)可以保存在這里,例如Notepad就是把其數(shù)據(jù)庫放在它的databases目錄下,名為note_pad.db.2,第一次啟動模擬器會比較慢,但以后就別關(guān)閉模擬器了,修改代碼,
27、調(diào)試都不需要再次啟動的,直接修改后run或debug就是。1.在測試時,如何實(shí)現(xiàn)一個提示可以使用1. Toast.makeText(this, "這是一個提示", Toast.LENGTH_SHORT).show(); 2. /從資源文件string.xml 里面取提示信息3. Toast.makeText(this, getString(R.string.welcome), Toast.LENGTH_SHORT).show();這個提示會幾秒鐘后消失2.可以使用AlertDialog.Builder 才產(chǎn)生一個提示框.
28、; 例如像messagebox那樣的1. new AlertDialog.Builder(this)2. .setTitle("Android 提示")3. .setMessage("這是一個提示,請確定")4. .show();帶一個確定的對話框1. new AlertDialog.Builder(this)2.
29、0; .setMessage("這是第二個提示")3. .setPositiveButton("確定",4.
30、0; new DialogInterface.OnClickListener()5. public void onClick(DialogI
31、nterface dialoginterface, int i)6. /按鈕事件7.
32、160; 8.
33、; )9. .show();AlertDialog.Builder 還有很多復(fù)雜的用法,有確定和取消的對話框1. new AlertDialog.Builder(this)2. .setTitle("提示")3.
34、;.setMessage("確定退出?")4. .setIcon(R.drawable.quit)5. .setPositiveButton("確定", new DialogInterface.OnClickListener() 6. pub
35、lic void onClick(DialogInterface dialog, int whichButton) 7. setResult(RESULT_OK);/確定按鈕事件8. finish();9. 10.
36、 )11. .setNegativeButton("取消", new DialogInterface.OnClickListener() 12. public void onClick(DialogInterface dialog, int whic
37、hButton) 13. /取消按鈕事件14. 15. )16. .show();4. menu 的用法. 1. 簡單的代碼1. public static final
38、60;int ITEM_1_ID = Menu.FIRST;2. public static final int ITEM_2_ID = Menu.FIRST + 1;3. public static final int ITEM_3_ID = Menu.FIRST + 2;4. 5. public boolean onCreateOpti
39、onsMenu(Menu menu) 6. super.onCreateOptionsMenu(menu);7. /不帶圖標(biāo)的menu8. menu.add(0, ITEM_1_ID, 0, "item-1"); 9. /帶圖標(biāo)的menu10.
40、; menu.add(0, ITEM_2_ID, 1, "item-2").setIcon(R.drawable.editbills2);11. menu.add(0, ITEM_3_ID, 2, "item-3").setIcon(R.drawable.billsum1);12. &
41、#160; return true; 13. 14.15. public boolean onOptionsItemSelected(MenuItem item)16. switch (item.getItemId() 17. case 1:18.
42、0; Toast.makeText(this, "menu1",Toast.LENGTH_SHORT).show(); 19. return true;20.
43、0; case 2:21. 22. return true;23. case 3:24. 25.
44、60; return true;26. 27. return false;28. 2. menu實(shí)現(xiàn)的兩種方法大部分的應(yīng)用程序都包括兩種人機(jī)互動方式,一種是直接通過GUI的 Views,其可以滿足大部分的交互操作。另外一種是應(yīng)用Menu,當(dāng)按下Menu按鈕后,會彈出與當(dāng)
45、前活動狀態(tài)下的應(yīng)用程序相匹配的菜單。這兩種方式相比較都有各自的優(yōu)勢,而且可以很好的相輔相成,即便用戶可以由主界面完成大部分操作,但是適當(dāng)?shù)耐卣筂enu功能可以更加完善應(yīng)用程序,至少用戶可以通過排列整齊的 按鈕清晰的了解當(dāng)前模式下可以使用的功能。有兩種方法可以為Android APPs添加菜單功能,下邊將對設(shè)置過程給出詳細(xì)的介紹:第一種方法,通過Layout來添加靜態(tài)菜單元素。一般情況下,開發(fā)者在res/Layout路徑下來定義應(yīng)用程序的GUI。應(yīng)用Eclipse創(chuàng)建一個新項(xiàng)目后,可以看到res/layout中存在一個 預(yù)置的main.xml文件,其作為程序默認(rèn)啟動界面。同樣,可以通過這種方式
46、創(chuàng)建一個靜態(tài)的Menu,創(chuàng)建方法參閱下邊的源代碼:?View Code XML<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android=" <item android:id="+id/previous"
47、60;android:title="string/previous" android:enabled="false" android:icon="android:drawable/ic_media_previous"/> <!-th
48、ese may not be available in next api (level > 3), so be carefull-> <item android:id="+id/play_pause" android:title="string/play"
49、; android:icon="android:drawable/ic_media_play"/> <item android:id="+id/next" android:title="string/next"
50、60; android:icon="android:drawable/ic_menu_next"/> </menu>在Activity類中調(diào)用剛剛創(chuàng)建的Menu,首先將當(dāng)前的Activity與指定的Menu XML相關(guān)聯(lián):1.Override2.public boolean onCreateOptionsMenu(Menu menu) 3. super.onCreateOptionsMenu(menu);4.
51、 getMenuInflater().inflate(R.layout.player_menu, menu);5. return true;6.實(shí)現(xiàn)onOptionsItemSelected方法: (其目的是捕捉到菜單觸發(fā)事件后,對具體觸發(fā)的選項(xiàng)作出響應(yīng),實(shí)際調(diào)用的函數(shù)包含在各自的case中)01.Override02.public boolean onOptionsItemSelected(MenuItem item) 03. switch (item.getItemId() 04. case R.id
52、.previous:05. previous(); /go to previous song in the playlist06. return true;07. case R.id.play_pause:08. isPlaying() ? pause() : play(); /toggle play/pause09.
53、60; return true;10. case R.id.next:11. next(); /go to next song in the playlist12. return true;13. 14. return false; /should never happen15.最后可以通過onPrepareOptionMenu方法初始
54、化Menu Items的屬性:01.Override02.public boolean onPrepareOptionsMenu(Menu menu) 03. /set play_pause menu item look04. if(isPlaying() 05. menu06. .findItem(R.id.play_pause)07.
55、60; .setTitle(R.string.pause)08. .setIcon(android.R.drawable.ic_media_pause);09. else 10. menu11. .findItem(R.id.pla
56、y_pause)12. .setTitle(R.string.play)13. .setIcon(android.R.drawable.ic_media_play);14. 15. return true;16.大部分程序都通過這種方式添加Menu菜單功能,而且通過以上的步驟來看,其實(shí)現(xiàn)方法非常簡單。第二種方法,在Activity類中動態(tài)創(chuàng)建
57、Menu。首先需要定義Menu Item識別序號:1.public static final MENU_PREVIOUS = 0; /no more R.ids2.public static final MENU_PLAY_PAUSE = 1;3.public static final MENU_NEXT = 2;實(shí)現(xiàn)onCreateOptionMenu()方法:(第一種方法中已經(jīng)通過xml定義了現(xiàn)成的Menu結(jié)構(gòu),所以不需要應(yīng)用這個方法)01.Override02.public boolean onCreateOptionsMenu(Menu menu) 03. m
58、enu04. .add(0, MENU_PREVIOUS, 0, R.string.previous)05. .setIcon(android.R.drawable.ic_media_previous);06. menu07. .add(0, MENU_PLAY_PAUSE, 0, R.string.play)08.
59、0; .setIcon (android.R.drawable.ic_media_play);09. menu10. .add(0, MENU_NEXT, 0, R.string.next)11. .setIcon(android.R.drawable.ic_media_next);12. return true;13.引用與第一種方法相同的方式來捕捉菜單的行為
60、:01.Override02.public boolean onOptionsItemSelected(MenuItem item) 03. switch (item.getItemId() 04. case MENU_PREVIOUS:05. previous(); /go to previous song in the playlist06. return true;07.
61、60; case MENU_PLAY_PAUSE:08. isPlaying() ? pause() : play(); /toggle play/pause09. return true;10. case MENU_NEXT:11. next(); /go to next song in the playlist12.
62、160; return true;13. 14. return false; /should never happen15.對以上兩種方法的補(bǔ)充:根據(jù)需要設(shè)置不同Menu Item的屬性:1.menu.findItem(R.id.next).setEnabled(false);設(shè)置Menu Item從屬關(guān)系(添加子父級別):直接寫在方法中:1.menu2. .addSubMenu(R.id.repeat)3.
63、 .add(R.id.one)4. .add(R.id.all)5. .add(R.id.none);直接定義在XML Layout中:?View Code XML<item android:id="+id/repeat" android:title="string/repeat"> <menu>
64、0; <item android:id="+id/one" android:title="string/repeat_one"></item> <item android:id="+id/all" android:title="string/repeat_all"></item> <item android:id="+id/no
65、ne" android:title="string/repeat_none"></item> </menu>這兩種不同的方法實(shí)現(xiàn)的目的是一樣的,而且不存在本質(zhì)上的卻別,具體根據(jù)實(shí)際情況(根據(jù)項(xiàng)目的結(jié)構(gòu)需要或者團(tuán)隊(duì)開發(fā)標(biāo)準(zhǔn))選擇合適的方法來創(chuàng)建Menu。5.Activity 的切換1. 代碼 2個Activity 的切換,沒有數(shù)據(jù)傳遞1. /從A到B2. Intent intent = new Intent();3.
66、 intent.setClass(A.this, B.class);4. startActivity(intent); 2個Activity 之間傳遞數(shù)據(jù) 相關(guān)的幾個函數(shù)&
67、#160; startActivityForResult public final void setResult(int resultCode, String data) 回調(diào)函數(shù) protected void onActivityResult(int requestCode, int resultCode, Intent data) 例如A到B,從B得到數(shù)據(jù) 1. /A到B
68、2. static final int RG_REQUEST = 0;3. Intent intent = new Intent();4. intent.setClass(A.this, B.class);5. startActivityForResult(intent,RG_REQUEST);6.
69、0; 7. /在B中處理8. Bundle bundle = new Bundle();bundle.putString("DataKey", edittext.getText().toString();/給bundle 寫入數(shù)據(jù)Intent mIntent = new Intent();mIntent.putExtras(bundle);setResult(RESULT_OK, mIntent);finish();9.1
70、0. /最后在A的回調(diào)函數(shù)里面接收數(shù)據(jù)11. if (requestCode = RG_REQUEST) if (resultCode = RESULT_CANCELED) setTitle("Canceled."); else if(resultCode = RESULT_OK) &
71、#160; setTitle(String)data.getCharSequenceExtra("DataKey"); 2. 詳解: 一個Android應(yīng)用程序很少會只有一個Activity對象,如何在多個Activity之間進(jìn)行跳轉(zhuǎn),而且能夠互相傳值是一個很基本的要求。在前面創(chuàng)建的MyApp中,我們通過點(diǎn)擊按鈕可以更新當(dāng)前界面上的文本內(nèi)容?,F(xiàn)在我們想換種方式,在點(diǎn)擊按鈕后,顯示一個新的屏幕,在這個屏幕上輸入一段話,然后再返回到原先的界面顯示剛才輸
72、入的那句話。首先我們新建這個新屏幕的布局文件input.xml,并添加一個文本輸入框和一個按鈕(注意,xml元素的命名不要和其他布局文件中的定義重名,因?yàn)樗械馁Y源都在R中進(jìn)行索引,比如id,如果重名了在使用R.id.*的時候就會有問題了)。這個布局文件對應(yīng)的是一個Activity,因此我們再新建一個Input類(繼承自Activity)用于顯示這個布局并響應(yīng)事件。然后,還有一個重要的工作,那就是在清單文件AndroidManifest.xml中告訴程序,我定義了一個新的Activity,你可以去調(diào)用它。我們希望在以前的那個主界面上點(diǎn)擊按鈕以后可以跳轉(zhuǎn)到文本輸入界面,所以我們需要對按鈕的onC
73、lick事件進(jìn)行定義:在這段代碼里出現(xiàn)了一些新東西。首先是Intent,它是Android一個很重要的類.Intent直譯是“意圖”,什么是意圖呢?比如你想從這個Activity跳轉(zhuǎn)到另外一個Activity,這就是一個意圖。它不但可以連接多個Activity,還可以在它們之間傳遞數(shù)據(jù)。在這里,我們就是用Intent從MyApp對象跳轉(zhuǎn)到了Input對象。再看緊跟著的startActivityForResult()方法,顧名思義,它可以從一個定義好的Intent對象啟動一個新的Activity,并且,這個Activity會返回執(zhí)行的結(jié)果,這些內(nèi)容下面馬上就會提到。好,這里我們已經(jīng)可以調(diào)出新Activity了,我們看一下執(zhí)行
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 纜索吊索力監(jiān)測技術(shù)專題
- 園林苗木養(yǎng)護(hù)與管理培訓(xùn)
- 佳木斯大學(xué)《邏輯與幽默》2023-2024學(xué)年第一學(xué)期期末試卷
- 江蘇商貿(mào)職業(yè)學(xué)院《結(jié)構(gòu)力學(xué)(含動力學(xué))》2023-2024學(xué)年第一學(xué)期期末試卷
- 甘肅民族師范學(xué)院《海洋生物綜合實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 云南體育運(yùn)動職業(yè)技術(shù)學(xué)院《文化管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 河南省鄭州市六校2024-2025學(xué)年高二下學(xué)期5月第二次聯(lián)考試題 數(shù)學(xué)(B卷) PDF版含解析
- 通化醫(yī)藥健康職業(yè)學(xué)院《微生物學(xué)檢驗(yàn)實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 監(jiān)控量測培訓(xùn)
- 水上樂園保潔培訓(xùn)
- 2025浙江嘉興市海寧市嘉睿人力招聘5人筆試參考題庫附帶答案詳解析版
- 2025年安徽蚌埠市龍子湖區(qū)東方人力資源有限公司招聘筆試參考題庫含答案解析
- 2025至2030中國云計算行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報告
- 語文(西藏卷)-2025年中考考前預(yù)測卷(全解全析)
- 2025中考?xì)v史高頻點(diǎn)速記大全
- 《STP戰(zhàn)略規(guī)劃與應(yīng)用》課件
- 建筑施工安全協(xié)議范本5篇
- 【中學(xué)】【主題班會】護(hù)紅色根脈 圓復(fù)興夢想
- 2025年特種設(shè)備作業(yè)人員氣瓶充裝P證考試題庫
- 《智能駕駛輔助系統(tǒng)ADAS》課件
- 2024年自然資源部所屬單位招聘筆試真題
評論
0/150
提交評論