安卓開發外文翻譯_第1頁
安卓開發外文翻譯_第2頁
安卓開發外文翻譯_第3頁
安卓開發外文翻譯_第4頁
安卓開發外文翻譯_第5頁
已閱讀5頁,還剩18頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、附錄A 譯文安卓應用開發基礎在Java編程語言編寫的Android應用程序的Android的SDK工具編譯代碼以及與任何數據和到一個Android的包,一個歸檔文件檔案資源的.apk后綴,所有的在一個單一的代碼.apk文件被認為是一個應用程序,是Android的文件,供電設備來安裝應用程序。一旦安裝在設備上,每個Android應用程序的生命在它自己的安全沙箱:而Android操作系統是一個多用戶Linux系統中,每個應用程序是一個不同的用戶。默認情況下,每個應用程序的系統分配一個唯一的Linux用戶ID(該ID僅用于由系統是未知的應用程序),系統設置所有的應用程序中的文件權限,以便只有用戶ID

2、分配給該應用程序可以訪問它們。每個進程都有它自己的虛擬機(VM),因此應用程序的代碼在從其他應用程序隔離運行。默認情況下,每個應用程序運行在它自己的Linux進程。Android的啟動過程時,應用程序的任何組件需要被執行,然后關閉該進程時,它不再需要或恢復時,系統必須為其他應用程序的內存。這樣一來,Android系統實現了最小特權原則,也就是說,每個應用程序,默認情況下,只能訪問的組件,它需要做的工作,沒有更多,這將創建一個非常安全的環境,使應用程序無法訪問的,這就是它沒有給予許可制度的部分。但是,有一個應用程序的方法與其他應用程序和應用程序訪問系統服務的數據:這有可能為兩個應用程序安排共享相

3、同的Linux用戶ID,在這種情況下,它們能夠相互訪問的文件。為了節約使用相同的用戶ID系統資源,應用程序還可以安排運行在相同的Linux進程和共享同一個VM(應用也必須使用相同的證書簽名)。應用程序可以請求訪問權限,如用戶的聯系人,短信,可安裝存儲(SD卡),攝像頭,藍牙等設備的數據,所有應用程序的權限必須由用戶在安裝時授予。 這涵蓋了基本就如何Android應用程序在系統中存在這個文件的其余部分向您介紹:1、框架的核心組件定義應用程序。2、清單文件中聲明組件和應用程序所需的設備功能。3、資源是從應用程序代碼分開,并允許您的應用程序正常優化的設備配置各種其行為。應用程序組件(Applicat

4、ion Components)Android的核心功能之一就是一個應用程序可以使用其它應用程序的元素(如果那個應用程序允許的話)。比如說,如果你的應用程序需要一個圖片卷動列表,而另一個應用程序已經開發了一個合用的而又允許別人使用的話,你可以直接調用那個卷動列表來完成工作,而不用自己再開發一個。你的應用程序并沒有吸納或鏈接其它應用程序的代碼,它只是在有需求的時候啟動了其它應用程序的那個功能部分。 為達到這個目的,系統必須在一個應用程序的一部分被需要時啟動這個應用程序,并將那個部分的Java對象實例化。與在其它系統上的應用程序不同,Android應用程序沒有為應用準備一個單獨的程序入口(比如說,沒

5、有main()方法),而是為系統依照需求實例化提供了基本的組件。共有四種組件類型:活動(Activities)一個activity代表用戶界面的一個獨立屏幕。例如,一個郵件應用程序應該有一個 activity 用于顯示新郵件列表,另一個 activity 用于撰寫一封郵件,還有一個 activity 用于讀取郵件。盡管所有 activitie 協同工作以構成郵件應用程序的用戶體驗,但彼此之間相對獨立。應次,不同的應用程序能夠從任何一個 activity 啟動 (只要郵件應用程序允許)。例如,用戶需要分享一張照片,一個拍照應用程序能夠啟動郵件應用程序的 activity 。activity 是一

6、個實現了Activity的子類,你可以在Activities開發者指導部分了解更多。服務(Services)service是在后臺運行,執行長時間操作或者執行遠程操作。 service 不提供用戶界面。例如,當用戶在另一個應用程序時,一個 service 可在后臺播放音樂,或者是從網絡上獲取數據,而不阻斷用戶與當前 activity 的交互。其他組件,比如一個 activity ,為了與該 service 互動,可以啟動或者 綁定它。service是一個實現了Service的子類,你可以在Services開發者指導部分了解更多。廣播接收器(Broadcast receivers)廣播接收器是一

7、個專注于接收廣播通知信息,并做出對應處理的組件。很多廣播是源自于系統代碼的比如,通知時區改變、電池電量低、拍攝了一張照片或者用戶改變了語言選項。應用程序也可以進行廣播比如說,通知其它應用程序一些數據下載完成并處于可用狀態。應用程序可以擁有任意數量的廣播接收器以對所有它感興趣的通知信息予以響應。所有的接收器均繼承自BroadcastReceiver基類。廣播接收器沒有用戶界面。然而,它們可以啟動一個activity來響應它們收到的信息,或者用NotificationManager來通知用戶。通知可以用很多種方式來吸引用戶的注意力閃動背燈、震動、播放聲音等等。一般來說是在狀態欄上放一個持久的圖標,

8、用戶可以打開它并獲取消息。內容提供者(Content providers)內容提供者將一些特定的應用程序數據供給其它應用程序使用。數據可以存儲于文件系統、SQLite數據庫或其它方式。內容提供者繼承于ContentProvider基類,為其它應用程序取用和存儲它管理的數據實現了一套標準方法。然而,應用程序并不直接調用這些方法,而是使用一個ContentResolver對象,調用它的方法作為替代。ContentResolver可以與任意內容提供者進行會話,與其合作來對所有相關交互通訊進行管理。參閱獨立的內容提供者Content Providers章節獲得更多關于使用內容提供者的內容。每當出現一個

9、需要被特定組件處理的請求時,Android會確保那個組件的應用程序進程處于運行狀態,或在必要的時候啟動它。并確保那個相應組件的實例的存在,必要時會創建那個實例。Android系統設計的一個獨特方面是任何的一個程序都可以啟動另一程序的組件。比如,你想讓你的程序可以使用照相機拍照,如果已經有了實現這種功能的程序并且你你的程序能使用它(有權限),那么你就沒有再要再寫一個新的Activity來實現這個功能。你的程序不需要包含或者鏈接這個拍照程序。相反,你只需要在你的程序中打開這個拍照程序中的實現拍照功能的Activity。當拍完之后,拍好的照片甚至會自動返回給你的程序。者對于用戶來說,就好像是想拍照功

10、能的程序就是你的這個程序的一部分一樣。當系統啟動一個組件之后,如果這個組件所在的程序之前沒有運行的話,系統會自動開始這個程序的進程,并初始化這個組件所需要的相關類。比如,你的程序開啟了一個拍照功能程序的Activity,這時系統會啟動這個Activity所在的程序,所以這個Activity運行在拍照功能的程序當中,而不是在你的程序中。所以,不像其他操作系統的中的程序一樣,Android程序沒有一個單獨的入口點(比如沒有我們常見的main()函數)。因為系統中的程序運行在自己的獨立進程中,并且程序中的文件都有自己的限制其他程序訪問的權限,所以,你的程序不能直接激活其他程序中的組件。但是Andro

11、id系統就可以。具體是這樣的實現的,為了激活(activate)其他程序中的組件,你必須向系統發送一個消息來詳細說明你要啟動其他組件的意圖,這樣系統才會為你激活這個組件。激活組件(Activating Components)四大組件中的三個組件activities、services和broadcastreceiver是由一種叫intent的異步消息來激活的。這些intents在運行時(runtime)將這些屬于你的程序或不同程序的單獨的組件綁定在一起(bind),你可以把這些intents看作是需要其他組件的action的messengers。一個intent就是一個Intent對象,這個in

12、tent定義了一種可以激活(activate)某個特定組件或者某種特定類型的組件,這兩種情況分別對應兩種intent的定義方式或者顯示的或者隱式的。對于activities和services,一個intent定義了要執行的操作(action)(比如,要“view”或者“send”什么)和要操作的數據的URI。比如,一個intent可能會為一個activity傳遞一個請求來展示一張圖片或者打開一個網頁。有時,你可以啟動一個activity來得到返回的結果,在這個例子中這個activity的返回的結果也是一個Intent(比如,你可以發送一個intent讓用戶選擇一個personalcontact

13、并返回給你這個返回的intent就包含了一個指向用戶選擇的聯系人的URI)。(關于activity和service的啟動方式,下面將介紹。)對于廣播接收者來說,intent只是簡單的定義了要廣播的內容(比如,一個用以表明電池電量很低的廣播僅包含了一個表明電池電量很低的字符串)。最后一種組件類型contentprovider并不是由intent來激活的(activate)。而是由接收到ContentResolver的請求時激活的。它們都各自有自己的方法來激活相應的組件:你可以通過傳遞一個Intent給startActivity()或startActivityForResult()啟動一個acti

14、vity(或者給他一些新的要做的內容)。使用startActivityForResult()你將得到一個返回結果。你可以通過傳遞一個Intent給startService()來start一個service(或者給一個正在運行的service一些新的指令(instructions))。或者你可以通過把一個Intent傳遞給bindService()來綁定一個service。你可以通過傳遞一個Intent給諸如sendBroadcast()、sendOrderedBroadcast()或者sendStickyBroadcast()等方法來初始化一個廣播。你可以通過調用ContentResolver

15、的query()方法來執行一次contentprovider的查詢操作。更多的關于intent的內容,可以參看文檔中的IntentsandIntentFilters。更多的關于激活特定組件的內容可以參看文檔中的:Activities、Services、BroadcastReceiver、ContentProviders。關于Manifest文件在Android系統可以啟動一個應用程序組件之前,Android系統必須通過讀取這個程序的AndroidManifest.xml(即manifest文件)文件來確定要啟動的組件存在。你的程序必須在這個manifest文件聲明用到的所有的組件,并且這個ma

16、nifest文件必須在項目的根目錄下。另外,這個manifest文件還聲明一些其他的東西,比如:確定這個程序需要的所有權限,比如Internet訪問權限或者讀取用戶聯系人權限。聲明這個運行這個程序所需要的最低API版本,這個可以根據開發該程序所使用的API版本。聲明該程序所需要的硬件或軟件特征(features),比如照相機、藍牙服務或者多點觸屏。聲明該程序需要鏈接(linkagainst)的API庫(不是Andorid的frameworkAPIs),比如GoogleMapslibrary。組件聲明Manifest文件的首要任務就是通知系統關于程序中要使用的組件。比如,一個manifest文件

17、可以用如下的方式來聲明一個activity:javaview plaincopy1. 2. 3. 4. 6. 7. .8. 9. 在元素中,android:icon屬性用于指定一個用于標示該程序的icon。在元素中,android:name屬性用于確定這個擴展自Activity的子類的全路徑名,android:label屬性用于標示這個activity的對于用戶可見的label。你必須要用以下方式來聲明你的程序組件:1、 activities:標簽2、 services:標簽3、 broadcastreceiver:標簽4、 contentproviders:標簽如果程序中用到activiti

18、es、services和contentproviders,你沒有在manifest文件中聲明,那么這些組件將不會被系統知道,結果就是你的程序不能運行。然而,broadcastreceiver既可以在manifest文件中聲明也可以在代碼中動態創建(BroadcastReceiver),并通過調用registerReceiver()在系統中注冊。更多關于怎樣為你的程序構建manifest文件,請參看文檔TheAndroidManifes.xml文件。聲明組件的能力正如在上面ActivatingComponents中討論的那樣,你可以使用一個Intent來啟動activities、services

19、和broadcastreceiver。你可以通過在intent中注明目標組件的名字(使用的是組件的類名)來顯示的啟動組件。然而,intents真正強大的地方在與關于intent的actions的概念。通過intent的actions,你可以簡單的描述你要執行的操作的類型(并且可以有選擇的描述你要處理的數據),可以允許系統在device中找到這個組件并啟動它。如果有多個組件可以執行intent中描述的action,這時用戶就可以選擇一個來執行。系統可以識別能對某intent做出反應的方式是通過將接收到的intent和設備中其他程序的manifest文件的intentfilters進行比較實現的。

20、當你在程序的manifest文件中聲明一個組件之后,你可以有選擇包含intentfilters,這些intentfilters表明了組件對接收自其他程序的intent做出反應的能力(capabilities)。你可以通過添加一個元素作為achildofthecomponentsdeclarationelement來為你的程序聲明一個intentfilter。比如,在一個郵件程序中的一個activity可以編寫新的郵件,這樣的話你就需要在manifest文件中來聲明一個intentfilter來對“發送”intent響應(為了發送郵件)。這樣,在你的程序中,一個activity就可以創建一個發送

21、intent(ACTION_SEND),這樣當你調用startaActivity()時,系統就會匹配郵件程序中的發送activity并啟動它。更多關于創建intentfilters的內容,可以參看IntentsandIntentFilter文檔。聲明運行程序所需的條件Andorid系統可以支持很多不同的設備,并且這些設備的性能特征并不相同。為了防止你的程序被安裝在不能正常運行你的程序的較低android系統版本上,通過在manifest文件中聲明你的程序支持的設備和軟件,便變得尤其重要起來。大多數的這些聲明僅是一些信息,而系統并不會讀取它們,但是其他的服務比如AndroidMarket卻會閱讀

22、這些聲明來幫助通過通過自己的設備搜索軟件的用戶過濾軟件。比如,你的程序需要照相機,并且使用的Android2.1的APIs,那么你就必須在你的manifest文件中聲明這些需要。這樣的話,在AndroidMarket上,沒有照相機或者Android系統版本低于2.1將不能安裝你的程序。然而,如果你的程序不需要照相機,你仍可以聲明你需要照相機。這種情況下,你的程序必須在運行時做一下檢查,來檢查這個設備是否含有照相機,如果沒有照相機可用,則系統將會使使用照相機的相關程序不能用。下面是一些你在設計和開發你的程序時,必須要考慮的關于設備的一些重要方面:屏幕大小和分辨率:為了根據屏幕的類型進行分類,An

23、droid定義了兩個特征:屏幕大小和分辨率。屏幕尺寸有:小,中,大,超大;屏幕分辨率類型:低分辨率,中分辨率,高分辨率,超高分辨率;默認情況下,你的程序可以兼容所有的屏幕尺寸和分辨率,因為Android系統對你的程序的UI布局和image資源做了適當的調整。輸入方式:很多設備有不同類型的輸入方式,比如鍵盤、軌跡球、五位元導航。如果你的程序需要某特定形式的輸入方式,則你必須在manifes文件中使用標簽來聲明。不過這種情況是比較少的。設備配置:有許多硬件或軟件并不全在Android系統的設備上,比如,一個照相機、光線傳感器、某個版本的 OpenGL,或者屏幕的保真度(fidelity)。你在任何

24、條件下都不能假定Android設備具備某種特性(feature)(當然得除掉Android標準庫的情況),所以如果你的程序使用了某feature,則你必須使用標簽來聲明。不同地Android平臺設備通常運行不同版本的 Android ,比如 Android 1.6 或者 Android 2.3。每個后續版本通常包含之前版本所不支持的新增 API。 In order to indicate which set of APIs are available, 每個平臺版本對應一個API Level(例如, Android 1.0 對應于 API Level 1 , Android 2.3 對應于 A

25、PI Level 9)。如果你使用任何在 1.0 版之后平臺新增的 API,你應該使用 元素聲明最低API Level 是包含這些API的。為你的應用程序聲明所有這些要求至關重要,因為,當你在 Android Market 上發布你的應用程序時,Market 使用這些聲明來過濾該應用程序是否對于每臺設備可用。 這樣,你的應用程序僅對能夠滿足你的應用程序要求的設備可用。應用程序資源一個應用程序不僅僅由代碼組成它需要區別于源代碼的資源,比如圖片,音頻文件,以及任何與應用程序視覺呈現相關聯的內容。例如,你應該使用XML 文件定義動畫,菜單,風格,顏色,以及 activity 用戶界面的布局。 使用應

26、用程序資源文件,可以更容易地更新你的應用程序的特性而無需修改代碼,并且 通過提供多套可替換資源文件 使您能夠針對各種設備配置優化你的應用程序(比如不同語言或屏幕大小)。對于你的安卓工程里面包含的每一項資源,SDK 構建工具定義一個唯一的正整數 ID 標識符,你可以使用該標識符從你的應用程序代碼中或者從XML文件中定義的其他資源中特指該資源。例如,如果你的應用程序中包含一個名為logo.png 圖片文件(保存在res/drawable/文件夾里), SDK 工具會生成一個資源 ID 命名為R.drawable.logo,你可以使用該 ID 特指這張圖片并插入你的用戶界面中。將資源提供工作同你的源

27、代碼分隔開來最重要的原因之一是能夠使您為不同的設備配置提供可替換的資源文件。例如,在 XML 中定義 UI 字符串,你可以將這些字符串翻譯成其他語言并保存在特定的文件夾中。然后,基于語言qualifier / 修飾詞你添加資源文件夾名稱 (比如res/values-fr/對應于法語字符串) 以及用戶語言設置, Android 系統會給你的 UI 提供適當的語言字符串。對于你的可替代資源,Android 支持許多不同的qualifiers / 修飾符。修飾符是包含在你的資源文件夾名稱中的一個短字符串,以便界定哪些設備配置可使用這些資源。 另一個例子,對于不同的設備屏幕和大小,你應當為你的 act

28、ivities 創建不同的布局。 例如,當設備屏幕是縱向的 (高),你可能希望一個按鈕垂直排列的布局,但當屏幕是橫向的(寬),按鈕應當水平排列。為了根據方向調整布局,你可以定義兩個不同的布局文件并給每個布局文件夾提供適當的修飾符。這樣,系統會根據特定的設備方向自動為其提供適當的布局。附錄B 外文原文Android Application FundamentalsWriter. Android.developerAndroid applications are written in the Java programming language. The Android SDK tools comp

29、ile the codealong with any data and resource filesinto anAndroid package, an archive file with an.apksuffix. All the code in a single.apkfile is considered to be one application and is the file that Android-powered devices use to install the application.Once installed on a device, each Android appli

30、cation lives in its own security sandbox:The Android operating system is a multi-user Linux system in which each application is a different user.By default, the system assigns each application a unique Linux user ID (the ID is used only by the system and is unknown to the application). The system se

31、ts permissions for all the files in an application so that only the user ID assigned to that application can access them.Each process has its own virtual machine (VM), so an applications code runs in isolation from other applications.By default, every application runs in its own Linux process. Andro

32、id starts the process when any of the applications components need to be executed, then shuts down the process when its no longer needed or when the system must recover memory for other applications.In this way, the Android system implements theprinciple of least privilege. That is, each application

33、, by default, has access only to the components that it requires to do its work and no more. This creates a very secure environment in which an application cannot access parts of the system for which it is not given permission.However, there are ways for an application to share data with other appli

34、cations and for an application to access system services:Its possible to arrange for two applications to share the same Linux user ID, in which case they are able to access each others files. To conserve system resources, applications with the same user ID can also arrange to run in the same Linux p

35、rocess and share the same VM (the applications must also be signed with the same certificate).An application can request permission to access device data such as the users contacts, SMS messages, the mountable storage (SD card), camera, Bluetooth, and more. All application permissions must be grante

36、d by the user at install time.That covers the basics regarding how an Android application exists within the system. The rest of this document introduces you to:1、The core framework components that define your application.2、The manifest file in which you declare components and required device feature

37、s for your application.3、Resources that are separate from the application code and allow your application to gracefully optimize its behavior for a variety of device configurations. Application ComponentsApplication components are the essential building blocks of an Android application. Each compone

38、nt is a different point through which the system can enter your application. Not all components are actual entry points for the user and some depend on each other, but each one exists as its own entity and plays a specific roleeach one is a unique building block that helps define your applications o

39、verall behavior.There are four different types of application components. Each type serves a distinct purpose and has a distinct lifecycle that defines how the component is created and destroyed.Here are the four types of application components:ActivitiesAnactivityrepresents a single screen with a u

40、ser interface. For example, an email application might have one activity that shows a list of new emails, another activity to compose an email, and another activity for reading emails. Although the activities work together to form a cohesive user experience in the email application, each one is inde

41、pendent of the others. As such, a different application can start any one of these activities (if the email application allows it). For example, a camera application can start the activity in the email application that composes new mail, in order for the user to share a picture.An activity is implem

42、ented as a subclass ofActivityand you can learn more about it in theActivitiesdeveloper guide.ServicesAserviceis a component that runs in the background to perform long-running operations or to perform work for remote processes. A service does not provide a user interface. For example, a service mig

43、ht play music in the background while the user is in a different application, or it might fetch data over the network without blocking user interaction with an activity. Another component, such as an activity, can start the service and let it run or bind to it in order to interact with it.A service

44、is implemented as a subclass ofServiceand you can learn more about it in theServicesdeveloper guide.Content providersAcontent providermanages a shared set of application data. You can store the data in the file system, an SQLite database, on the web, or any other persistent storage location your app

45、lication can access. Through the content provider, other applications can query or even modify the data (if the content provider allows it). For example, the Android system provides a content provider that manages the users contact information. As such, any application with the proper permissions ca

46、n query part of the content provider (such asContactsContract.Data) to read and write information about a particular person.Content providers are also useful for reading and writing data that is private to your application and not shared. For example, theNote Padsample application uses a content pro

47、vider to save notes.A content provider is implemented as a subclass ofContentProviderand must implement a standard set of APIs that enable other applications to perform transactions. For more information, see theContent Providersdeveloper guide.Broadcast receiversAbroadcast receiveris a component th

48、at responds to system-wide broadcast announcements. Many broadcasts originate from the systemfor example, a broadcast announcing that the screen has turned off, the battery is low, or a picture was captured. Applications can also initiate broadcastsfor example, to let other applications know that so

49、me data has been downloaded to the device and is available for them to use. Although broadcast receivers dont display a user interface, they maycreate a status bar notificationto alert the user when a broadcast event occurs. More commonly, though, a broadcast receiver is just a gateway to other comp

50、onents and is intended to do a very minimal amount of work. For instance, it might initiate a service to perform some work based on the event.A broadcast receiver is implemented as a subclass ofBroadcastReceiverand each broadcast is delivered as anIntentobject. For more information, see the Broadcas

51、tReceiverclass.A unique aspect of the Android system design is that any application can start another applications component. For example, if you want the user to capture a photo with the device camera, theres probably another application that does that and your application can use it, instead of de

52、veloping an activity to capture a photo yourself. You dont need to incorporate or even link to the code from the camera application. Instead, you can simply start the activity in the camera application that captures a photo. When complete, the photo is even returned to your application so you can us

53、e it. To the user, it seems as if the camera is actually a part of your application.When the system starts a component, it starts the process for that application (if its not already running) and instantiates the classes needed for the component. For example, if your application starts the activity

54、in the camera application that captures a photo, that activity runs in the process that belongs to the camera application, not in your applications process. Therefore, unlike applications on most other systems, Android applications dont have a single entry point (theres nomain()function, for example

55、).Because the system runs each application in a separate process with file permissions that restrict access to other applications, your application cannot directly activate a component from another application. The Android system, however, can. So, to activate a component in another application, you

56、 must deliver a message to the system that specifies yourintentto start a particular component. The system then activates the component for you.Activating ComponentsThree of the four component typesactivities, services, and broadcast receiversare activated by an asynchronous message called anintent. Intents bind individual components to each other at runtime (you can think of them as the messengers that request an action from other components), whether the component belongs to your application or another.An intent is created with anIntentobject, which defines a message to a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論