diff options
Diffstat (limited to 'docs/html-intl/intl/zh-tw')
51 files changed, 15001 insertions, 100 deletions
diff --git a/docs/html-intl/intl/zh-tw/about/versions/lollipop.jd b/docs/html-intl/intl/zh-tw/about/versions/lollipop.jd index d05e5db..21929d1 100644 --- a/docs/html-intl/intl/zh-tw/about/versions/lollipop.jd +++ b/docs/html-intl/intl/zh-tw/about/versions/lollipop.jd @@ -3,22 +3,22 @@ page.title=Android Lollipop @jd:body +<div style="float:right;"> + <img src="{@docRoot}images/home/l-hero_2x.png" srcset="/images/home/l-hero.png 1x, /images/home/l-hero_2x.png 2x"> +</div> +<p>歡迎使用 Android 5.0 Lollipop,這是目前為止規模最大、功能最強的 Android 版本!</p> +<p>這個版本不僅為使用者提供了許多新功能,也為開發人員提供了數以千計的全新 API。Android 的應用領域也因此從手機、平板電腦、穿戴式裝置,進一步擴展到電視和汽車。</p> +<p>如要深入瞭解全新的開發人員 API,請參閱 <a href="{@docRoot}about/versions/android-5.0.html">Android 5.0 API 總覽</a>。如需適合一般消費者閱讀的 Android 5.0 相關資訊,請前往 <a href="http://www.android.com/versions/lollipop-5-0/">www.android.com</a>。</p> - - - - <div style="padding:0px 0px 0px 20px;float:right;margin:0 -10px 0 0"> - <img src="{@docRoot}images/home/l-hero_2x.png" srcset="{@docRoot}images/home/l-hero.png 1x, {@docRoot}images/home/l-hero_2x.png 2x" width="460" height="300" > - </div> - - <div class="landing-docs" style="float:right;clear:both;margin:68px 0 2em 3em;"> - <div class="col-4 normal-links highlights" style="font-size:12px;"> - <h3 id="thisd" >主要開發人員功能</h3> - <ul style="list-style-type:none;"> +<div id="qv-wrapper"> +<div id="qv"> + <h2>主要開發人員功能</h2> + <ol> + <ul style="list-style-type:none;"> <li><a href="#Material">實感設計</a></li> <li><a href="#Perf">聚焦優異效能</a></li> <li><a href="#Notifications">通知</a></li> @@ -34,22 +34,11 @@ page.title=Android Lollipop <li><a href="#WebView">Chromium WebView</a></li> <li><a href="#Accessibility">協助工具和輸入功能</a></li> <li><a href="#Battery">用於打造低耗電應用程式的工具</a></li> - </ul> + </ol> </div> </div> - - - - - -<p>歡迎使用 Android 5.0 Lollipop,這是目前為止規模最大、功能最強的 Android 版本!</p> - -<p>這個版本不僅為使用者提供了許多新功能,也為開發人員提供了數以千計的全新 API。Android 的應用領域也因此從手機、平板電腦、穿戴式裝置,進一步擴展到電視和汽車。</p> - -<p>如要深入瞭解全新的開發人員 API,請參閱 <a href="{@docRoot}about/versions/android-5.0.html">Android 5.0 API 總覽</a>。如需適合一般消費者閱讀的 Android 5.0 相關資訊,請前往 <a href="http://www.android.com/versions/lollipop-5-0/">www.android.com</a>。</p> - <h2 id="Material">實感設計</h2> <p>Android 5.0 將<a href="http://www.google.com/design/spec">實感設計</a>功能 (Material Design) 導入到 Android 中,並為您提供了更加完善的使用者介面工具套件,讓您輕鬆將全新的設計模式整合到應用程式中。 </p> @@ -77,7 +66,7 @@ page.title=Android Lollipop </div> -<p>您可以為按鈕、核取方塊和應用程式中的其他觸控控制項套用波紋動畫。 +<p>您可以為按鈕、核取方塊和應用程式中的其他觸控控制項套用波紋動畫。 <p>您也能以 XML 定義向量圖形可繪項目,並透過多種方式套用動畫效果。向量圖形可繪項目縮放時不會失真,因此最適合用於應用程式內的單色圖示。</p> diff --git a/docs/html-intl/intl/zh-tw/design/get-started/principles.jd b/docs/html-intl/intl/zh-tw/design/get-started/principles.jd new file mode 100644 index 0000000..27cce81 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/design/get-started/principles.jd @@ -0,0 +1,307 @@ +page.title=Android 設計原則 +@jd:body + +<p>這些設計原則是由 Android 使用者體驗團隊開發,並針對 Android 使用者體驗團隊的需求所開發,以使用者的最大利益為出發點。對於 Android 開發者和設計者而言,針對不同類型的裝置,這些原則仍持續是更詳細設計方針的基礎。 + + + +</p> + +<p> +當您套用您本身的創意與設計思維時,請考慮這些原則。 +偏離一般做法要帶有目的。 +</p> + +<h2 id="enchant-me">使人著迷</h2> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="delight-me">以出乎意外的方式取悅人</h4> +<p>漂亮的外觀、精心設置的動畫,或時機恰到好處的音效,都是令人感到喜悅的體驗。 +微妙的效果有助於產生毫不費力及強大力量就在手邊的感覺。 +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_delight.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="real-objects-more-fun">真實的物件比按鈕和功能表更有趣</h4> +<p>讓人們可以在您應用程式中直接輕觸和操縱物件,這可減少執行某項工作所需的認知過程,同時在情緒上更令人感到滿足。 +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_real_objects.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="make-it-mine">提供個人設定</h4> +<p>人們喜歡加上個人風格,因為這有助於他們感到自在並握有主控權。提供能令人感受及美觀的預設設定,但也可以考慮使用不會阻礙主要工作卻又好玩的可選用性自訂項目。 + +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_make_it_mine.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="get-to-know-me">設法了解使用者</h4> +<p>隨著時間而學習使用者的偏好。讓人們易於取得之前的選擇,而不是一再詢問他們會做出相同選擇的問題。 +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_get_to_know_me.png"> + + </div> +</div> + +<h2 id="simplify-my-life">簡化生活</h2> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="keep-it-brief">保持簡潔</h4> +<p>以簡單單字組成簡短語句。人們傾向於略過冗長的句子。</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_keep_it_brief.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="pictures-faster-than-words">圖片的傳達效果更勝於言語</h4> +<p>請考慮使用圖片來解釋想法。圖片能吸引人們的注意力,並比言語更有效率。 +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_pictures.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="decide-for-me">幫使用者決定,但使用者擁有最終決定權</h4> +<p>做出最好的猜測,先行動,而非先詢問。太多的選擇和決定會讓人們不高興。 +為防止錯誤,務必允許復原。</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_decide_for_me.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="only-show-when-i-need-it">必要時僅顯示使用者需要的東西</h4> +<p>人們無法承受一次看到太多東西。將工作和資訊細分成小型、易消化的區塊。 +隱藏當下不重要的選項,但在人們需要選擇時要明確指導。</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_information_when_need_it.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="always-know-where-i-am">使用者應該總是清楚所在位置</h4> +<p>給人們信心,知道自己沒有迷路。讓您應用程式中的各處看起來都有獨特性,並使用轉換來顯示畫面之間的關係。 +針對進行中的工作提供回饋。</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_navigation.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="never-lose-my-stuff">別弄丟使用者的東西</h4> +<p>儲存使用者花時間所建立的資訊,並且讓使用者可從任何地方存取。跨手機、平板電腦和電腦記住設定、個人風格和建立的資訊。 +這會讓升級變得很簡單。 +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_never_lose_stuff.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="looks-same-should-act-same">如果看起來一樣,就應該有相同的動作</h4> +<p>讓功能看起來就不一樣,而非變化微妙,這可以協助人們辨別功能差異。在相同輸入環境下,因為模式看起來很類似但卻有不同的動作,請盡量避免使用。 +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_looks_same.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="interrupt-only-if-important">重要時才打斷</h4> +<p>就像一位好的私人助理,讓人們免於無關緊要的枝微末節。人們總想集中注意力,除非很重要且具時效性,不然貿然中斷會令人感到費力且沮喪。 +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_important_interruption.png"> + + </div> +</div> + +<h2 id="make-me-amazing">讓使用者驚艷</h2> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="give-me-tricks">提供使用者各處通用的訣竅</h4> +<p>當人們能自行弄清楚來龍去脈時是很棒的體驗。運用來自其他 Android 應用程式的視覺模式和肌肉記憶效應,讓使用者更易於學會您的應用程式。 +例如,擺動手勢可能是很好的導覽捷徑。 +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_tricks.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="its-not-my-fault">不是使用者的錯</h4> +<p>提示人們更正時要溫和。人們使用您的應用程式時,會想要感受到自已非常明智。如果有什麼不對,請提供明確的復原指示,但不需要使用者明瞭技術細節。如果可以,請盡量在幕後修正。 + +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_error.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="sprinkle-encouragement">分段鼓勵</h4> +<p>將複雜工作細分成更小的步驟,讓使用者可以輕鬆完成。對動作給予回饋,即使只是個微光效果。 +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_sprinkle_encouragement.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="do-heavy-lifting-for-me">為使用者處理繁重的工作</h4> +<p>讓新手也能做出以前從未想像過可以辦到的事情,讓使用者有專家的感覺。例如,組合多個相片效果的捷徑,只要幾個步驟,即可讓業餘照片令人驚艷。 + +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_heavy_lifting.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="make-important-things-fast">快速找到重要的功能</h4> +<p>並非所有的動作都一視同仁。決定應用程式中最重要的部分,並讓使用者易於找到並可迅速使用,例如相機的快門按鈕或音樂播放器的暫停按鈕。 +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_make_important_fast.png"> + + </div> +</div> diff --git a/docs/html-intl/intl/zh-tw/design/material/index.jd b/docs/html-intl/intl/zh-tw/design/material/index.jd new file mode 100644 index 0000000..620ee6e --- /dev/null +++ b/docs/html-intl/intl/zh-tw/design/material/index.jd @@ -0,0 +1,186 @@ +page.title=材料設計 +page.tags=Material, design +page.type=設計 +page.image=design/material/images/MaterialLight.png + +@jd:body + +<!-- developer docs box --> +<a class="notice-developers right" href="{@docRoot}training/material/index.html"> + <div> + <h3>開發人員文件</h3> + <p>使用材料設計建立應用程式</p> + </div> +</a> + +<!-- video box --> +<a class="notice-developers-video" href="https://www.youtube.com/watch?v=p4gmvHyuZzw"> +<div> + <h3>影片</h3> + <p>材料設計簡介</p> +</div> +</a> + +<!-- video box --> +<a class="notice-developers-video" href="https://www.youtube.com/watch?v=YaG_ljfzeUw"> +<div> + <h3>影片</h3> + <p>紙張和墨水:重要的材料</p> +</div> +</a> + +<!-- video box --> +<a class="notice-developers-video" href="https://www.youtube.com/watch?v=XOcCOBe8PTc"> +<div> + <h3>影片</h3> + <p>Google I/O 應用程式中的材料設計</p> +</div> +</a> + + + +<p itemprop="description">材料設計是一份內容廣泛的綜合性指南,引導您跨平台、跨裝置進行視覺、動態和互動的設計。 +Android 現已納入對材料設計應用程式的支援。 +如果要在 Android 應用程式中使用材料設計,請依照<a href="http://www.google.com/design/spec">材料設計規格</a>中定義的指示,並使用 +Android +5.0 (API 層級 21) 或後續版本中的新元件和新功能。</p> + +<p>Android 提供下列元素,供您打造材料設計應用程式:</p> + +<ul> + <li>一個新的設計風格</li> + <li>用於複雜檢視的小工具</li> + <li>自訂陰影和動畫的新 API</li> +</ul> + +<p>如需取得如何在 Android 上實作材料設計的詳細資訊,請詳見<a href="{@docRoot}training/material/index.html">使用材料設計建立應用程式</a>。 +</p> + + +<h3>材料設計風格</h3> + +<p>材料設計風格提供您應用程式使用的新樣式、可以讓您設定色板的系統小工具,並針對輕觸回饋與操作行為轉換提供預設動畫。 +</p> + +<!-- two columns --> +<div style="width:700px;margin-top:25px;margin-bottom:20px"> +<div style="float:left;width:250px;margin-left:40px;margin-right:60px;"> + <img src="{@docRoot}design/material/images/MaterialDark.png" width="500" height="238" /> + <div style="width:140px;margin:0 auto"> + <p style="margin-top:8px">深色材料設計風格</p> + </div> +</div> +<div style="float:left;width:250px;margin-right:0px;"> + <img src="{@docRoot}design/material/images/MaterialLight.png" width="500" height="238" /> + <div style="width:140px;margin:0 auto"> + <p style="margin-top:8px">淺色材料設計風格</p> + </div> +</div> +<br style="clear:left"/> +</div> + +<p>如需詳細資訊,請參閱<a href="{@docRoot}training/material/theme.html">使用材料設計風格</a>。 +</p> + + +<h3>清單和卡片</h3> + +<p>Android 提供兩個新的小工具,搭配材料設計樣式與動畫,可用來顯示清單和卡片: +</p> + +<!-- two columns --> +<div style="width:700px;margin-top:25px;margin-bottom:20px"> +<div style="float:left;width:250px;margin-left:40px;margin-right:60px;"> + <img src="{@docRoot}design/material/images/list_mail.png" width="500" height="426" /> + <p>新的 <code>RecyclerView</code> 小工具是 <code>ListView</code> +更容易插入的版本,支援不同的版面配置類型,並提供效能改善。</p> +</div> +<div style="float:left;width:250px;margin-right:0px;"> + <img src="{@docRoot}design/material/images/card_travel.png" width="500" height="426" /> + <p>新的 <code>CardView</code> 小工具讓您可以顯示卡片內的重要資訊,並且該資訊都能擁有一致的外觀與風格。 +</p> +</div> +<br style="clear:left"/> +</div> + +<p>如需詳細資訊,請參閱<a href="{@docRoot}training/material/lists-cards.html">建立清單和卡片</a>。 +</p> + + +<h3>檢視陰影</h3> + +<p>除了 X 和 Y 屬性外,Android 中的檢視現在也有 Z 屬性。 +這個新屬性代表檢視的高度,這會決定:</p> + +<ul> +<li>陰影大小:帶有較高 Z 值的檢視會投射更大的陰影。</li> +<li>繪製順序:具有較高 Z 值的檢視會顯示在其他檢視之上。</li> +</ul> + +<div style="width:290px;margin-left:35px;float:right"> + <div class="framed-nexus5-port-span-5"> + <video class="play-on-hover" autoplay> + <source src="{@docRoot}design/material/videos/ContactsAnim.mp4"/> + <source src="{@docRoot}design/videos/ContactsAnim.webm"/> + <source src="{@docRoot}design/videos/ContactsAnim.ogv"/> + </video> + </div> + <div style="font-size:10pt;margin-left:20px;margin-bottom:30px"> + 如要重播影片,請按一下裝置螢幕<em></em> + </div> +</div> + +<p>如需取得詳細資訊,請參閱<a href="{@docRoot}training/material/shadows-clipping.html">定義陰影和裁剪檢視</a>。 +</p> + + +<h3>動畫</h3> + +<p>新的動畫 API 可針對 UI 控制項的輕觸回饋、檢視狀態中的變更,以及行為轉換,讓您建立自訂動畫。 +</p> + +<p>這些 API 讓您可以:</p> + +<ul> +<li style="margin-bottom:15px"> +回應您檢視中有<strong>輕觸回饋</strong>動畫的輕觸事件。 +</li> +<li style="margin-bottom:15px"> +隱藏和顯示有<strong>循環顯示</strong>動畫的檢視。 +</li> +<li style="margin-bottom:15px"> +在有自訂<strong>行為轉換</strong>動畫的行為間切換。 +</li> +<li style="margin-bottom:15px"> +使用<strong>曲線動作</strong>建立更自然的動畫。 +</li> +<li style="margin-bottom:15px"> +在帶有<strong>檢視狀態變更</strong>動畫的一個或多個檢視屬性中變更動畫。 +</li> +<li style="margin-bottom:15px"> +在檢視狀態變更間,顯示<strong>狀態清單可繪項目</strong>中的動畫。 +</li> +</ul> + +<p>輕觸回饋動畫會內建於數個標準檢視中,例如按鈕等。新 API 可讓您自訂這些動畫,並將其新增至您的自訂檢視中。 +</p> + +<p>如需詳細資訊,請參閱<a href="{@docRoot}training/material/animations.html">定義自訂動畫</a>。 +</p> + + +<h3>可繪項目</h3> + +<p>可繪項目的這些新功能可以幫助您實作材料設計應用程式:</p> + +<ul> +<li><strong>矢量可繪項目</strong>可以調整大小,但又不會喪失定義,最適合於應用程式中的單色圖示。 +</li> +<li><strong>可繪項目著色</strong>可讓您在執行階段將點陣圖定義為 Alpha 遮罩,並以一個顏色進行著色。 +</li> +<li><strong>顏色提取</strong>可讓您自動從點陣圖影像中提取顯著顏色。 +</li> +</ul> + +<p>如需詳細資訊,請參閱<a href="{@docRoot}training/material/drawables.html">使用可繪項目</a>。 +</p> diff --git a/docs/html-intl/intl/zh-tw/design/patterns/confirming-acknowledging.jd b/docs/html-intl/intl/zh-tw/design/patterns/confirming-acknowledging.jd new file mode 100644 index 0000000..ac8975f --- /dev/null +++ b/docs/html-intl/intl/zh-tw/design/patterns/confirming-acknowledging.jd @@ -0,0 +1,70 @@ +page.title=確認及確認完成 +page.tags=dialog,toast,notification +@jd:body + +<p>在某些情況下,當使用者在您應用程式中呼叫一個動作時,最好是透過文字來「確認」(confirm) <em></em>或「確認完成」<em></em>(acknowledge)。</p> + +<div class="layout-content-row"> + <div class="layout-content-col span-6"> + <img src="{@docRoot}design/media/confirm_ack_confirming.png"> + <p><strong>確認</strong>是要求使用者確認真的要進行剛剛呼叫的動作。在某些情況下,確認訊息出現時會伴隨警告或需要使用者考量是否採取動作的相關重要資訊。</p> + </div> + <div class="layout-content-col span-6"> + <img src="{@docRoot}design/media/confirm_ack_acknowledge.png"> + <p><strong>確認完成</strong>是顯示文字,讓使用者知道已經完成剛剛呼叫的動作。這會排除系統正在採取之隱式作業的不確定性。在某些情況下,確認完成出現時會伴隨復原動作的選項。</p> + </div> +</div> + +<p>使用這種方式和使用者溝通有助於降低已發生或將發生事情的不確定性。確認或確認完成也可以防止使用者誤犯可能會後悔的錯誤。</p> + +<h2>確認或確認完成使用者動作的時機</h2> +<p>並非所有的動作都能保證會執行確認或確認完成。使用此流程圖可以指引您的設計決策。</p> +<img src="{@docRoot}design/media/confirm_ack_flowchart.png"> + +<h2>確認</h2> +<div class="layout-content-row"> + <div class="layout-content-col span-6"> + <h4>範例:Google Play 書籍</h4> + <img src="{@docRoot}design/media/confirm_ack_ex_books.png"> + <p>在此範例中,使用者已要求從其 Google Play 媒體庫中刪除一本書籍。顯示<a href="{@docRoot}design/building-blocks/dialogs.html#alerts">警示</a>來確認此動作,因為使用者必須了解將不再針對任何裝置提供這本書籍。</p> + <p>設計一個確認的對話方塊時,要讓標題具有意義就必須回應要求的動作。</p> + </div> + <div class="layout-content-col span-7"> + <h4>範例:Android Beam</h4> + <img src="{@docRoot}design/media/confirm_ack_ex_beam.png"> + <p>確認不一定要以具有兩個按鈕的警示來呈現。在啟動 Android Beam 之後,會提示使用者輕觸要共用的內容 (在此範例中是一張照片)。如果他們決定不進行,只要移開他們的電話即可。</p> + </div> +</div> + +<h2>確認完成</h2> +<div class="layout-content-row"> + <div class="layout-content-col span-6"> + <h4>範例:已儲存放棄的 Gmail 草稿</h4> + <img src="{@docRoot}design/media/confirm_ack_ex_draftsave.png"> + <p>在此範例中,如果使用者從 Gmail 撰寫畫面返回,可能會發生預期外的狀況:會自動儲存目前的草稿。以快顯通知 (toast) 形式出現的確認完成,會讓使用者明瞭此情況。確認完成會在幾秒鐘後淡出。</p> + <p>在此並不合適使用復原功能,因為儲存動作是由應用程式發起,而非使用者。瀏覽至草稿清單,就可以方便且快速地繼續撰寫。</p> + + </div> + <div class="layout-content-col span-6"> + <h4>範例:已刪除 Gmail 會話群組</h4> + <img src="{@docRoot}design/media/confirm_ack_draft_deleted.png"> + <p>使用者從 Gmail 清單中刪除一個會話群組後,會出現確認完成訊息,並提供一個復原選項。確認完成會持續出現,直到使用者採取不相關的動作,例如捲動清單。</p> + </div> +</div> + +<h2>無「確認」或「確認完成」</h2> +<div class="layout-content-row"> + <div class="layout-content-col span-6"> + <h4>範例:+1 中</h4> + <img style="padding: 33px 0 30px;" src="{@docRoot}design/media/confirm_ack_ex_plus1.png"> + <p><strong>確認並非必要</strong>。如果使用者不小心按了 + 1 按鈕,這並不是什麼大問題。他們可以再次輕觸按鈕,復原此動作。</p> + <p><strong>確認完成並非必要</strong>。使用者將會看到 +1 彈起並變成紅色。這是個非常明確的訊號。</p> + </div> + <div class="layout-content-col span-7"> + <h4>範例:從主螢幕移除應用程式</h4> + <img src="{@docRoot}design/media/confirm_ack_ex_removeapp.png"> + <p><strong>確認並非必要</strong>。這是特意設計的動作:使用者必須拖曳項目放到相對較大且隔離的目標上。因此極不可能發生意外狀況。但如果使用者後悔所做的決定,只需幾秒鐘,就可以恢復原狀。</p> + <p><strong>確認完成並非必要</strong>。使用者會知道應用程式從主螢幕消失,因為是他們將應用程式拖曳離開,所以才會消失。</p> + + </div> +</div> diff --git a/docs/html-intl/intl/zh-tw/design/patterns/navigation.jd b/docs/html-intl/intl/zh-tw/design/patterns/navigation.jd new file mode 100644 index 0000000..db160c2 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/design/patterns/navigation.jd @@ -0,0 +1,213 @@ +page.title=使用 [返回] 及 [上一層] 導覽 +page.tags="navigation","activity","task","up navigation","back navigation" +page.image=/design/media/navigation_between_siblings_gmail.png +@jd:body + +<a class="notice-developers" href="{@docRoot}training/implementing-navigation/index.html"> + <div> + <h3>開發人員文件</h3> + <p>實作有效的導覽</p> + </div> +</a> + +<p itemprop="description">一致的導覽是整體使用者體驗的必備組成。基本導覽的行為若不一致又令人意外,是最令使用者感到更沮喪的狀況。 +Android 3.0 已將重大變更導入全域的導覽行為中。 +完全遵循 [返回] 及 [上一層] 的方針,會讓使用者感到您的應用程式導覽既可靠又符合預期。 +</p> +<p>Android 2.3 和更早版本依賴系統 [返回] +<em></em>按鈕,以支援應用程式內的導覽。在 Android 3.0 導入動作列之後,出現第二個導覽機制:[上一層] +<em></em>按鈕,由應用程式圖示和左指符號組成。</p> + +<img src="{@docRoot}design/media/navigation_with_back_and_up.png"> + +<h2 id="up-vs-back">[上一層] vs.[返回]</h2> + +<p>[上一層] 按鈕用於在畫面間有階層關係的應用程式中導覽。 +例如,如果畫面 A +顯示項目清單,然後選擇其中一個項目導致進入畫面 B (更詳細呈現該項目),那麼畫面 B 應該提供 [上一層] 按鈕,以便返回畫面 A。 +</p> +<p>如果畫面是在應用程式中的最頂端 (亦即應用程式的首頁),則不應該會有 [上一層]按鈕。 +</p> + +<p>系統 [返回] 按鈕用於逆時間順序導覽,透過歷程記錄,可以經歷使用者最近使用過的畫面。 +[返回] 通常基於畫面之間的暫時關係,而非應用程式的階層。 +</p> + +<p>當先前檢視的畫面也是目前畫面的階層父項時,按下 +[返回] 按鈕和按下 [上一層] 按鈕效果相同 — 這是常見的狀況。 +然而,與 [上一層] 按鈕不同的是 (該按鈕可以確保使用者仍停留在您的應用程式內):[返回] +按鈕可以讓使用者返回主畫面,或甚至是不同的應用程式。</p> + +<img src="{@docRoot}design/media/navigation_up_vs_back_gmail.png"> + +<p>[返回] 按鈕還支援幾個間接關聯畫面對畫面導覽的行為: +</p> +<ul> +<li>關閉浮動視窗 (對話、快顯)</li> +<li>關閉內容相關的動作列,並從選取項目移除醒目顯示</li> +<li>隱藏畫面鍵盤 (IME)</li> +</ul> +<h2 id="within-app">在應用程式內導覽</h2> + +<h4>導覽至具有多重入口的畫面</h4> +<p>有時候,一個畫面在應用程式的階層中並沒有嚴謹的位置,而且可以從多個入口存取 — 例如可以從您應用程式中任何其他畫面存取的設定畫面。在這種情況下,[上一層] +按鈕應該選擇返回導引至此畫面的前一畫面,這個行為與 [返回] 相同。 + +</p> +<h4>在畫面內變更檢視</h4> +<p>變更畫面的檢視選項並不會變更 [上一層] 或 [返回] 的行為:畫面仍維持在應用程式階層中的相同位置,並不會建立新的導覽歷程記錄。 +</p> +<p>這類檢視變更的範例如下:</p> +<ul> +<li>使用標籤和/或左與右滑動來切換檢視</li> +<li>使用下拉清單 (亦即折疊標籤) 切換檢視</li> +<li>篩選清單</li> +<li>對清單排序</li> +<li>變更顯示特性 (如縮放)</li> +</ul> +<h4>在同層級畫面間導覽</h4> +<p>當您的應用程式支援從項目清單導覽至項目之一的詳細檢視時,使用者通常會想使用方向導覽功能,以便從該項目導覽至清單中的前一個或後一個項目。 + +例如在 Gmail 中,可以很容易從會話群組向左或右滑動,方便檢視相同「收件匣」中的較新或舊會話群組。 +就像在一個畫面中變更檢視時,這類導覽不會變更 [上一層] 或 [返回] 的行為。 +</p> + +<img src="{@docRoot}design/media/navigation_between_siblings_gmail.png"> + +<p>然而有一個明顯的例外是,在不被引用清單綁在一起的相關詳細資料檢視之間瀏覽時 — 例如在 Play 商店中於相同開發者的不同應用程式之間瀏覽時,或是在相同演出者的專輯間瀏覽時。 + +在這些情況下,瀏覽每個連結都會產生歷程記錄,這會造成 [返回] 按鈕會經歷每個先前檢視過的畫面。 +[上一層] 應該會繼續略過這些相關的畫面,並導覽到最近檢視過的容器畫面。 +</p> + +<img src="{@docRoot}design/media/navigation_between_siblings_market1.png"> + +<p>基於您對詳細資料檢視的瞭解,您有能力讓 [上一層] 行為甚至變得更聰明。 +再延伸說明之前提及的 Play 商店範例,想像使用者已從最近檢視的「書籍」導覽至「電影」改編的詳細資料。 +在這種情況下,[上一層] +可以返回到使用者之前沒有導覽過的上層容器 (電影)。</p> + +<img src="{@docRoot}design/media/navigation_between_siblings_market2.png"> + +<h2 id="into-your-app">透過「主畫面小工具」和「通知」,導覽至您的應用程式</h2> + +<p>您可以使用主畫面小工具或通知,協助您直接導覽至深入您應用程式階層中的畫面。 +例如,Gmail 的「收件匣」小工具和新郵件通知,都可以略過「收件匣」畫面,將使用者直接帶到會話群組檢視之中。 +</p> + +<p>針對這兩種情況,可以使用下列方式來處理 [上一層] 按鈕:</p> + +<ul> +<li>如果目的地畫面通常是透過您應用程式中的一個特定畫面到達,那麼 [上一層] 應該要導覽至該畫面。<em></em> +</li> +<li>否則<em></em>, [上一層] 應該導覽至您應用程式的最頂端 (「主」) 畫面。</li> +</ul> + +<p>就 [返回] 按鈕而言,您應讓導覽更符合預期,方法是在工作的返回堆疊中,插入前往應用程式最頂端畫面的完整向上導覽路徑。 +這可讓忘了如何進入您應用程式的使用者,能在退出之前導覽至應用程式的最頂端畫面。 + +</p> + +<p>舉例來說,Gmail 的主畫面小工具有一個按鈕,可以直接往下進入撰寫畫面。 +來自撰寫畫面的 [上一層] 或 [返回] 按鈕,會將使用者帶到「收件匣」中,而此處的 [返回] 按鈕則可繼續前往至「主畫面」。 +</p> + +<img src="{@docRoot}design/media/navigation_from_outside_back.png"> + +<h4>間接通知</h4> + +<p>當您的應用程式需要同時呈現多個事件的資訊時,可以使用單一通知,引導使用者進入一個插頁畫面。 +此畫面會摘要這些事件,並提供路徑,讓使用者可以深入應用程式之中。這種風格的通知稱為「間接通知」<em></em>。 + +</p> + +<p>與標準 (直接) 通知不同的是,從間接通知的插頁畫面按下 [返回],會讓使用者返回至通知觸發的起點 — 無其他畫面會插入至返回堆疊之中。 + +一旦使用者從插頁畫面繼續進入應用程式之後,[上一層] +與 [返回] 會如上所述,其行為就像針對標準通知一樣:在應用程式內導覽,而非返回插頁畫面。 +</p> + +<p>例如,假設 Gmail 中的使用者收到來自「行事曆」的間接通知。輕觸這個通知會打開插頁畫面,而此畫面會顯示數個不同事件的提醒。 + +從插頁畫面輕觸 [返回],會讓使用者返回至 Gmail。輕觸特定事件會將使用者帶離插頁畫面,並進入完整的「行事曆」應用程式,顯示事件的詳細資料。 + +從事件詳細資料中,[上一層] 和 [返回] 會導覽至「行事曆」的最頂層檢視。</p> + +<img src="{@docRoot}design/media/navigation_indirect_notification.png"> + +<h4>快顯通知</h4> + +<p>快顯通知<em></em>會略過通知匣,直接出現在使用者面前。 +這不常使用,<strong>應該要保留在需要適時回應,以及必須中斷使用者前後關聯動作的時候</strong>。 +例如,Talk +就使用這種風格,用來提示使用者有朋友邀請加入視訊聊天,而且此邀請會在幾秒之後自動過期。 +</p> + +<p>就導覽行為而言,快顯通知緊接著間接通知插頁畫面的行為。 +[返回] 會關閉快顯通知。如果使用者從快顯導覽進入通知應用程式,[上一層] +和 [返回] 會遵循標準通知的規則,只在應用程式內導覽。 +</p> + +<img src="{@docRoot}design/media/navigation_popup_notification.png"> + +<h2 id="between-apps">在應用程式間導覽</h2> + +<p>Android 系統的基本優點之一是應用程式互相啟動的能力,讓使用者能夠直接從一個應用程式導覽至另一個應用程式。 +例如,需要擷取一張相片的應用程式可以啟動「相機」應用程式,而此應用程式會將相片傳回引用的應用程式。開發人員可以輕鬆利用其他應用程式的程式碼,而使用者在經常執行的動作中可以享受一致性的體驗,這對雙方都是一大好處。 + + + +</p> + +<p>要瞭解應用程式對應用程式的導覽,重要的是要瞭解以下討論的 Android 架構行為。 +</p> + +<h4>活動、工作和意圖</h4> + +<p>在 Android 中,<strong>活動</strong>是一個應用程式元件,定義了資訊畫面,以及使用者可以執行的所有關聯動作。 +您的應用程式是個活動的集合,包括您可以建立及您能從其他應用程式重複使用的活動。 +</p> + +<p><strong>工作</strong>是使用者遵循以達到目標的一系列活動。單一工作可以利用來自單一應用程式的活動,或是汲取數個不同應用程式的活動。 + +</p> + +<p><strong>意向</strong>是指應用程式所發出想要另一套應用程式協助執行某動作訊號的機制。 +應用程式的活動可指示其可回應哪些意向。 +針對如「共用」等常見意向,使用者可能已安裝許多可以滿足此要求的應用程式。 +</p> + +<h4>範例:在應用程式間導覽,以支援共用</h4> + +<p>要理解活動、工作和意向如何攜手合作,請思考應用程式如何讓使用者使用另一套應用程式來共用內容。例如,從「主」畫面啟動 Play 商店應用程式,開始新工作 A (見下圖)。 + +在導覽經歷 Play 商店,並輕觸一本促銷的書籍以查看詳細資料後,使用者仍會停留在相同工作中,並透過新增行為延伸工作。 +觸發「共用」動作會提示使用者一個對話框,列出已註冊可用來處理「共用」意向的每個活動 (來自不同的應用程式)。 + +</p> + +<img src="{@docRoot}design/media/navigation_between_apps_inward.png"> + +<p>當使用者選擇透過 Gmail 共用,Gmail +的撰寫活動會被新增為工作 A 的延續 — 而不會建立新工作。如果 Gmail 有本身的工作正在背景執行,這並不會影響該工作。 +</p> + +<p>從撰寫活動中,傳送訊息或輕觸 [返回] 按鈕,會讓使用者返回至書籍詳細資料的活動。 +繼續輕觸 [返回] 則會經由 Play 商店往回導覽,最終到達「主畫面」。 +</p> + +<img src="{@docRoot}design/media/navigation_between_apps_back.png"> + +<p>然而,透過輕觸撰寫行為的 [上一層],代表使用者指明停留在 Gmail 的意願。 +Gmail 的會話群組清單活動會隨即出現,並針對該活動建立一個新的工作 B。新工作的最後根源都是「主畫面」,所以從會話群組輕觸 [返回] 會返回至該處。 +</p> + +<img src="{@docRoot}design/media/navigation_between_apps_up.png"> + +<p>工作 A 仍然存在背景之中,而使用者可能會在稍後返回 (例如,透過「最近」畫面)。 +如果 Gmail 在背景正在執行自己的工作,則其會被工作 B 取代 — 並捨棄之前的前後關係,而就使用者的新目標。 +</p> + +<p>當您的應用程式註冊來處理具有深入應用程式階層活動的意向時,請參考<a href="#into-your-app">透過主畫面視窗小工具和通知,導覽至您的應用程式</a>,取得如何指定 [上一層] 導覽的指導方針。 + +</p> diff --git a/docs/html-intl/intl/zh-tw/design/patterns/notifications.jd b/docs/html-intl/intl/zh-tw/design/patterns/notifications.jd new file mode 100644 index 0000000..3e3f59c --- /dev/null +++ b/docs/html-intl/intl/zh-tw/design/patterns/notifications.jd @@ -0,0 +1,872 @@ +page.title=通知 +page.tags="notifications","design","L" +@jd:body + + <a class="notice-developers" href="{@docRoot}training/notify-user/index.html"> + <div> + <h3>開發人員文件</h3> + <p>通知使用者</p> + </div> +</a> + +<a class="notice-designers" href="notifications_k.html"> + <div> + <h3>Android 4.4 及較早版本中的通知</h3> + </div> +</a> + +<!-- video box --> +<a class="notice-developers-video" href="https://www.youtube.com/watch?v=Uiq2kZ2JHVY"> +<div> + <h3>影片</h3> + <p>DevBytes:Android L 開發者預覽版中的通知</p> +</div> +</a> + +<style> + .col-5, .col-6, .col-7 { + margin-left:0px; + } +</style> + +<p>通知系統可以隨時知會使用者有關應用程式中的相關事件與及時事件,例如來自朋友的新聊天訊息。您可以將通知視為一種事件發生時警示使用者的新聞管道,或是在使用者沒注意時,記錄事件的日誌 — 並會視情況跨所有 Android 裝置且同步處理。 + + + + + +</p> + +<h4 id="New"><strong>Android 5.0 新功能</strong></h4> + +<p>在 Android 5.0 中,通知會透過結構化、視覺化和功能化的效果接收重要更新: +</p> + +<ul> + <li>通知已經有視覺方面的變更,與新的材料設計風格一致。 +</li> + <li> 現在可在裝置的鎖定螢幕上提供通知,而敏感內容仍可隱藏於其背後。 + +</li> + <li>當裝置於使用中收到高優先順序的通知時,會使用稱為預告 (heads-up) 通知的新格式。 +</li> + <li>雲端同步化通知:關閉您其中一部 Android 裝置的通知,隨之也會在其他裝置上關閉此通知。 + +</li> +</ul> + +<p class="note"><strong>注意:</strong>此版本 Android 中的通知設計和先前版本大相徑庭。 + +如需有關先前版本通知的設計資訊,請參閱 +<a href="./notifications_k.html">Android 4.4 及較早版本中的通知</a>。</p> + +<h2 id="Anatomy">通知的詳細分析</h2> + +<p>本節會重溫通知的基礎功能,以及其如何可在不同類型裝置上出現。 +</p> + +<h3 id="BaseLayout">基礎版面配置</h3> + +<p>至少,所有通知都必須包含一個基礎版面配置,它包含:</p> + +<ul> + <li> 通知的<strong>圖示</strong>。該圖示代表原始應用程式。如果應用程式會產生一種以上的通知類型,則圖示也有可能表示通知類型。 + + +</li> + <li> 一個通知<strong>標題</strong>和額外<strong>文字</strong>。 +</li> + <li> 一個<strong>時間戳記</strong>。</li> +</ul> + +<p>針對先前平台版本,使用 {@link android.app.Notification.Builder Notification.Builder} +所建立的通知其外觀與運作方式和在 Android 5.0 +中的一樣,只是在系統為您處理的方式上有一點樣式上的變更。 +如需更多有關 Android 先前版本通知的詳細資訊,請參閱 +<a href="./notifications_k.html">Android 4.4 及較早版本中的通知</a>。 +</p></p> + + + <img style="margin:20px 0 0 0" src="{@docRoot}images/android-5.0/notifications/basic_combo.png" alt="" width="700px" /> + + +<div style="clear:both;margin-top:20px"> + <p class="img-caption"> + 手持裝置通知的基礎版面配置 (左),以及穿戴裝置上的相同通知 (右),都帶有使用者相片及一個通知圖示 + + </p> + </div> + +<h3 id="ExpandedLayouts">擴充的版面配置</h3> + + +<p>您可以選擇到底要讓您應用程式的通知提供多詳細的資料。 +通知可以顯示訊息的前幾行,也可以顯示較大的影像預覽。 +此額外資訊可提供使用者更多內容,而且 — 在某些情況下 — 可讓使用者讀取完整訊息。 + + +使用者可以捏合縮放或執行單手指滑動,在精簡的版面配置與擴充的版面配置間切換。 + + + 對於單一事件通知,Android 提供三個擴充版面配置範本 +(文字、收件匣和影像),讓您可以在應用程式中使用。 +以下的影像顯示單一事件通知在手持裝置 (左) 和穿戴裝置 (右) 上的外觀。 + +</p> + +<img style="margin-top:30px" +src="{@docRoot}images/android-5.0/notifications/expandedtext_combo.png" + alt="" width="700px" height;="284px" /> +<img style="margin-top:30px" +src="{@docRoot}images/android-5.0/notifications/stack_combo.png" + alt="" width="700px" height;="284px" /> +<img style="margin-top:30px" +src="{@docRoot}images/android-5.0/notifications/ExpandedImage.png" + alt="" width="311px" height;="450px" /> + +<h3 id="actions" style="clear:both; margin-top:40px">動作</h3> + +<p>Android 支援可以在通知底端顯示的選用動作。透過動作,使用者可針對特定通知,從通知欄 (notification shade) 內處理最常見的工作,而無需開啟原始啟動的應用程式。這可加速互動,而且在配合滑動關閉 +(swipe-to-dismiss) +時,有助使用者專注於高重要性的通知。 + + + +</p> + + + <img src="{@docRoot}images/android-5.0/notifications/action_combo.png" alt="" width="700px" /> + + + +<p style="clear:both">明智地決定要在通知中要納入多少個動作。 +您納入的動作愈多,就會發現創造出愈複雜的通知。 +請納入最緊迫重要且有意義的動作,限制自己儘可能使用最少數目的動作。 + + +</p> + +<p>適合用於通知上的動作包含:</p> + +<ul> + <li> 必須是必要、頻繁且典型的想要顯示內容類型 + + <li> 可讓使用者快速完成工作 +</ul> + +<p>避免下列狀況:</p> + +<ul> + <li> 模稜兩可 + <li> 和通知的預設動作相同 (如「讀取」或「開啟」) + +</ul> + + + +<p>您最多可以指定三個動作,每個動作都由一個動作圖示與名稱組成。 + + 為簡單的基礎版面配置新增動作,可讓通知變得更具擴充性 +-- +即使通知並未具備擴充的版面配置。由於動作只針對擴充的通知顯示,其他時候則隱藏,請確認使用者可從通知內呼叫的任何動作,也可以從關聯的應用程式中使用。 + + + + +</p> + +<h2 style="clear:left">預告通知</h2> +<div class="figure" style="width:311px"> + <img src="{@docRoot}images/android-5.0/notifications/hun-example.png" alt="" width="311px" /> + <p class="img-caption"> + 預告通知 (來電、高優先順序) +出現在沉浸式應用程式之上的範例 + + </p> +</div> + +<p>當高優先順序的通知到達 (如右) 時,會對使用者呈現很短的時間,且會顯示可能執行動作的擴充版面配置。 + +</p> +<p> 在這段時間之後,通知會退回至通知欄。 +如果通知的<a href="#correctly_set_and_manage_notification_priority">優先順序</a>被標記為「高」、「最大」或「全螢幕」,就會取得預告通知。 +</p> + +<p><b>預告通知的好範例</b></p> + +<ul> + <li> 使用裝置時有來電</li> + <li> 使用裝置時啟動鬧鐘功能</li> + <li> 新簡訊</li> + <li> 電池電力不足</li> +</ul> + +<h2 style="clear:both" id="guidelines">指導方針</h2> + + +<h3 id="MakeItPersonal">提供個人設定</h3> + +<p>針對由另一人傳送項目的通知 +(如郵件或狀態更新),使用 +{@link android.app.Notification.Builder#setLargeIcon setLargeIcon()} 納入對方提供的影像。也將對方的資訊附加至通知的中繼資料中 +(請參閱 {@link android.app.Notification#EXTRA_PEOPLE})。</p> + +<p>您通知的主要圖示仍會顯示,這樣使用者就可以將主要圖示與狀態列中的可見圖示關聯起來。 + +</p> + + +<img src="{@docRoot}images/android-5.0/notifications/Triggered.png" alt="" width="311px" /> +<p style="margin-top:10px" class="img-caption"> + 通知會顯示觸發通知的人及其傳送的內容。 +</p> + + +<h3 id="navigate_to_the_right_place">導覽至正確的地方</h3> + +<p>當輕觸通知的本文時 +(在動作按鈕之外),請將您的應用程式開啟至使用者可以檢視的地方,並根據通知中引用資料進行動作。 + +在多數情況下,這將是單一資料項目 (如訊息) 的詳細資料檢視,但如果通知被堆疊時,也可能會是概述檢視。 + +如果您的應用程式會將使用者帶到應用程式頂層之下的任何地方,則請將導覽過程插入應用程式的返回堆疊中,這可以讓使用者能夠按下系統的返回按鈕,返回至頂層。 + +如需詳細資訊,請見<a href="{@docRoot}design/patterns/navigation.html#into-your-app">導覽</a>設計模式中的「透過主螢幕視窗小工具和通知,導覽至您的應用程式」<em></em>。 + +</p> + +<h3 id="correctly_set_and_manage_notification_priority">正確設定和管理通知優先順序 + +</h3> + +<p>Android 支援對通知設定優先順序的旗標。此旗標可與其他通知旗標比較,影響通知顯示的位置,這有助於確保使用者一律會先看到最重要的通知。 + + +在發佈通知時,您可以從以下優先順序等級選擇: + +</p> +<table> + <tr> + <td class="tab0"> +<p><strong>優先順序</strong></p> +</td> + <td class="tab0"> +<p><strong>使用</strong></p> +</td> + </tr> + <tr> + <td class="tab1"> +<p><code>MAX</code></p> +</td> + <td class="tab1"> +<p>用於關鍵且緊急的通知,警示使用者注意此通知具時效性或必須在繼續特定工作前先解決的情況。 + + +</p> +</td> + </tr> + <tr> + <td class="tab1"> +<p><code>HIGH</code></p> +</td> + <td class="tab1"> +<p>主要用於重要通訊,例如內容為使用者特別感興趣的郵件或聊天事件。高優先順序通知會觸發預告通知的顯示。 + +</p> +</td> + </tr> + <tr> + <td class="tab1"> +<p><code>DEFAULT</code></p> +</td> + <td class="tab1"> +<p>用於不屬於此處所述任何其他優先事項類型的所有通知。</p> +</td> + </tr> + <tr> + <td class="tab1"> +<p><code>LOW</code></p> +</td> + <td class="tab1"> +<p>用於您希望使用者能夠被告知,但不那麼緊急的通知。 +低優先順序通知往往出現在清單的底端,因此適合於公共或間接的社交更新: + +使用者已要求針對這類事件通知,但這些通知一律不會優先於緊急或直接通訊。 + + +</p> +</td> + </tr> + <tr> + <td class="tab1"> +<p><code>MIN</code></p> +</td> + <td class="tab1"> +<p>用於內容關聯或背景資訊,例如天氣資訊或內容關聯位置的資訊。最低優先順序通知不會出現在狀態列。 + +使用者會在展開通知欄時找到這些通知。 +</p> +</td> + </tr> +</table> + + +<h4 id="how_to_choose_an_appropriate_priority"><strong>如何選擇合適的優先順序</strong> + +</h4> + +<p><code>DEFAULT</code>、<code>HIGH</code> 和 <code>MAX</code> 為可中斷的優先順序等級,且有打斷使用者正進行動作的風險。 + +如要避免惹惱您應用程式的使用者,請將可中斷的優先順序保留給下列通知: +</p> + +<ul> + <li> 涉及另一人</li> + <li> 具時效性</li> + <li> 可能會立即變更使用者在現實世界中的行為</li> +</ul> + +<p>對使用者而言,設定為 <code>LOW</code> 和 <code>MIN</code> 的通知仍可能很有價值: +很多通知 -- 就算不是大多數 -- 並不需要使用者立即注意,或透過振動使用者的手腕加以提醒;但在使用者選擇查看通知時,這些通知仍會包含使用者覺得有價值的資訊。 + + +<code>LOW</code> 和 <code>MIN</code> + 優先順序通知的準則包含:</p> + +<ul> + <li> 不會牽涉到別人</li> + <li> 不具時效性</li> + <li> 包含使用者可能感興趣,但可能在空閒時才會瀏覽的內容 +</li> +</ul> + + + <img src="{@docRoot}images/android-5.0/notifications/notifications_pattern_priority.png" alt="" width="700" /> + + +<h3 style="clear:both" id="set_a_notification_category">設定通知類別 +</h3> + +<p>如果您的通知屬於某個預先定義的類別 +(詳見下列說明),則請據以指派。 +通知欄 (或任何其他通知接聽器) 等系統 UI +可能會使用此資訊,決定排名和篩選結果。 +</p> +<table> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_CALL">CATEGORY_CALL</a></code></p> +</td> + <td> +<p>來電 (語音或視訊) 或類似的同步化通訊要求 +</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_MESSAGE">CATEGORY_MESSAGE</a></code></p> +</td> + <td> +<p>傳入的直接訊息 (簡訊、即時訊息等)</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_EMAIL">CATEGORY_EMAIL</a></code></p> +</td> + <td> +<p>非同步大量郵件 (電子郵件)</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_EVENT">CATEGORY_EVENT</a></code></p> +</td> + <td> +<p>「行事曆」事件</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_PROMO">CATEGORY_PROMO</a></code></p> +</td> + <td> +<p>宣傳或廣告</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_ALARM">CATEGORY_ALARM</a></code></p> +</td> + <td> +<p>鬧鐘或計時器</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_PROGRESS">CATEGORY_PROGRESS</a></code></p> +</td> + <td> +<p>長時間執行的背景操作其進度</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_SOCIAL">CATEGORY_SOCIAL</a></code></p> +</td> + <td> +<p>社交網路或共用更新</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_ERROR">CATEGORY_ERROR</a></code></p> +</td> + <td> +<p>背景操作或驗證狀態中的錯誤</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_TRANSPORT">CATEGORY_TRANSPORT</a></code></p> +</td> + <td> +<p>播放的媒體傳輸控制</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_SYSTEM">CATEGORY_SYSTEM</a></code></p> +</td> + <td> +<p>系統或裝置狀態更新。保留供系統使用。</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_SERVICE">CATEGORY_SERVICE</a></code></p> +</td> + <td> +<p>執行背景服務的表示</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_RECOMMENDATION">CATEGORY_RECOMMENDATION</a></code></p> +</td> + <td> +<p>針對單一件事的特定、及時建議。例如,新聞應用程式可能會想推薦其認為使用者下一步想要閱讀的新聞報導。 + +</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_STATUS">CATEGORY_STATUS</a></code></p> +</td> + <td> +<p>有關裝置或內容關聯狀態的進行中資訊</p> +</td> + </tr> +</table> + +<h3 id="summarize_your_notifications">概述您的通知</h3> + +<p>當您的應用程式嘗試傳送的通知,但已有類型相同的通知仍在等待中,則請針對應用程式將這些相同類型的通知合併為單一概述通知,而不要建立新物件。 + +</p> + +<p>概述通知會建立概述描述,並讓使用者瞭解特定種類的通知有多少數目正在等待處理。 + +</p> + +<div class="col-6"> + +<p><strong>不要這樣做</strong></p> + <img src="{@docRoot}images/android-5.0/notifications/Summarise_Dont.png" alt="" width="311px" /> +</div> + +<div> +<p><strong>請這樣做</strong></p> + + <img src="{@docRoot}images/android-5.0/notifications/Summarise_Do.png" alt="" width="311px" /> +</div> + +<p style="clear:left; padding-top:30px; padding-bottom:20px">您可以使用擴充摘要版面配置,針對組成概述的個別通知,提供更多詳細資料。 + +這種方法可讓使用者更能感覺出哪些通知正處於等待處理,以及是否夠有趣,以便在關聯應用程式中詳細閱讀。 + + + +</p> +<div class="col-6"> + <img src="{@docRoot}images/android-5.0/notifications/Stack.png" style="margin-bottom:20px" alt="" width="311px" /> + <p class="img-caption"> + 概述實際上是通知的展開和收縮 (使用 <code>InboxStyle</code>) + </p> +</div> + +<h3 style="clear:both" id="make_notifications_optional">讓通知成為可選用的 +</h3> + +<p>使用者應該總是能夠控制通知。讓使用者可以停用您應用程式的通知,或變更其警示屬性,如鬧鐘聲音或是否要使用振動,方法則是為您的應用程式設定新增通知設定項目。 + + + +</p> + +<h3 id="use_distinct_icons">使用易於分辨的的圖示</h3> +<p>使用者應該能瞄一下通知區域,即可以分辨哪些種類的通知目前正在等待處理。 + +</p> + +<div class="figure"> + <img src="{@docRoot}images/android-5.0/notifications/ProductIcons.png" alt="" width="420" /> +</div> + + <div><p><strong>請這樣做</strong></p> + <p>查看 Android 應用程式圖示, +Android 應用程式已為您的應用程式提供外觀易於分辨的通知圖示。 +</p> + + <p><strong>請這樣做</strong></p> + <p>針對小圖示使用<a href="/design/style/iconography.html#notification">通知圖示樣式</a>,針對您的動作列圖示使用 Material Light <a href="/design/style/iconography.html#action-bar">動作列圖示樣式</a>。 + + + +</p> +<p ><strong>請這樣做</strong></p> +<p >讓圖示保持看起來簡單的狀態,避免因過多的詳細資料造成使用者難以看清楚。 +</p> + + <div><p><strong>不要這樣做</strong></p> + <p>將任何額外的 +Alpha +(變暗或淡出) +置入您的小圖示和動作圖示之中;它們的邊緣可能會有反鋸齒狀,但因為 Android 使用這些圖示做為遮罩 +(也就是說,只使用 Alpha 通道),所以影像通常會以完全透明度來繪製。 +</p> + +</div> +<p style="clear:both"><strong>不要這樣做</strong></p> + +<p>使用顏色以區分您與其他人的應用程式。通知圖示應該只是個白色圖示透明背景的背景影像。 +</p> + + +<h3 id="pulse_the_notification_led_appropriately">可以調整通知 LED 適當開啟 +</h3> + +<p>許多 Android 裝置具備通知 LED,可用於當螢幕關閉時通知使用者有新事件。 + +優先順序等級為<code>MAX</code>、<code>HIGH</code> 和 <code>DEFAULT</code> 的通知, +應該要讓 LED 亮起,而只有低優先順序 (<code>LOW</code> 和 <code>MIN</code>) 的通知則不需要。 + +</p> + +<p>使用者對通知的控制應該延伸到 LED 上。當您使用 DEFAULT_LIGHTS,LED 會亮白色。 + +除非使用者已明確自訂通知,否則您的通知不應該使用其他顏色。 + +</p> + +<h2 id="building_notifications_that_users_care_about">建立使用者喜歡的通知 +</h2> + +<p>若要建立使用者喜歡的應用程式,精心設計您的通知非常重要。通知代表您應用程式的聲音,並有助於您應用程式的個性。 + + +非必要或非重要的通知會讓使用者不高興,這會讓他們覺得應用程式想要吸引注目不擇手段,所以請明智地使用通知。 + + +</p> + +<h3 id="when_to_display_a_notification">顯示通知的時機</h3> + +<p>若要建立人們喜歡使用的應用程式,重要的是要體認到使用者的注意與專注是必須加以保護的資源。 + +雖然 Android 的通知系統已重新設計,儘量降低通知對使用者注意力的影響。但仍然必須警覺,通知會中斷使用者的工作流程。在規劃您的通知時,請先自問:通知是否足夠重要到可以合理地中斷使用者。 + + + + + + +如果您不確定,則讓使用者可以使用您應用程式的通知設定,或調整通知優先順序旗標為 <code>LOW</code> 或 <code>MIN</code>,避免使用者在從事其他工作時因此分心。 + + + +</p> + + <img src="{@docRoot}images/android-5.0/notifications/TimeSensitive.png" alt="" width="311px" /> + <p style="margin-top:10px" class="img-caption"> + 具時效性的通知範例 + </p> + +<p>妥善規劃的應用程式只會在必要時才出現,但有幾個情況的確有益於應用程式透過無提示通知中斷使用者的行為。 +</p> + +<p>通知主要還是使用於<strong>具時效性時間的事件</strong>,特別是當這些同步事件<strong>涉及其他人</strong>的時候。 +比如說,傳入的聊天是通訊的即時、同步形式: + +另一個使用者正主動等待您的回應。 +「行事曆」事件是何時使用通知吸引使用者注意的另一個好例子,因為事件即將發生,而「行事曆」事件通常牽涉到其他人。 + + +</p> + +<h3 style="clear:both" id="when_not_to_display_a_notification">不顯示通知的時機 +</h3> + +<div class="figure" style="margin-top:60px"> + <img src="{@docRoot}images/android-5.0/notifications/AntiSample1.png" alt="" width="311px" /> +</div> + +<p>在許多其他情況下,通知並不適當:</p> + +<ul> + <li> 當通知並非直接針對使用者,或者資訊並非真正具時效性時,請避免通知使用者。 + +例如,來自社交網路的非同步與間接更新,通常不是即時中斷的好時機。 + + +對於重視這些狀況的使用者,可以讓他們自行選擇加入通知。 +</li> + <li> 如果相關的新資訊目前正在螢幕上,則不要建立另一個通知。 +反之,直接在前後關係中使用應用程式本身的 UI 通知使用者有新資訊。 + + + 例如,當使用者正與另一位使用者聊天時,聊天應用程式不應建立系統通知。 +</li> + <li> 如果應用程式或系統可以不干擾使用者而解決問題,就不要因為如儲存或同步化資訊,或更新應用程式等低層級的技術操作而中斷使用者活動。 + +</li> + <li> 如果可能的話,就讓應用程式能自行從錯誤恢復,在不需要使用者進行任何動作時,就不要告知他們錯誤而中斷使用者的活動。 + +</li> + <li> 不要建立無實質內容的通知,也不要建立內容僅是在廣告您應用程式的通知。 + +通知應該要能夠提供實用、及時的新資訊,而非只是為了啟動一個應用程式。 + +</li> + <li> 請不要為了讓您的品牌出現在使用者面前,而建立多餘的通知。 + + 這類通知會讓您的使用者感到失望並不願意使用您的應用程式。能夠提供少量的更新資訊並可以吸引使用者注意您應用程式的最佳方式,是開發一個小工具,讓使用者可以選擇放置在主畫面上。 + + + + +</li> +</ul> + +<h2 style="clear:left" id="interacting_with_notifications">與通知互動 +</h2> + +<p>通知可由狀態列上的圖示表示,並可以透過開啟通知匣來存取。 + +</p> + +<p>輕觸通知會開啟相關應用程式,顯示符合通知的詳細資料內容。對通知往左右滑動,可以將通知從通知匣中移除。 + +</p> + +<h3 id="ongoing_notifications">進行中通知</h3> +<div class="figure" style="width:311px"> + <img src="{@docRoot}images/android-5.0/notifications/MusicPlayback.png" alt="" width="311px" /> + <p class="img-caption"> + 因為音樂播放的緣故所以有進行中通知 + </p> +</div> +<p>進行中通知可讓使用者得知在背景中正在進行程序的資訊。例如,音樂播放程式會在通知系統中宣告正在播放的曲目,除非使用者停止曲目,否則就會繼續宣告。 + + + +進行中通知也可以針對如下載檔案或編碼影片等耗時較長的工作,向使用者顯示目前進度。 + +使用者無法手動將進行中通知從通知匣移除。 +</p> + +<h3 id="ongoing_notifications">媒體播放</h3> +<p>在 Android 5.0 中,鎖定螢幕不會針對已過時的 +{@link android.media.RemoteControlClient} 類別,顯示傳輸控制項。但鎖定螢幕「的確」<em></em>會顯示通知,所以每個應用程式的播放通知,現在都已經是使用者從鎖定狀態控制播放的主要方法。 + +這個行為可讓應用程式進一步控制以何種方式顯示哪些按鈕,同時無論螢幕是否鎖定,都能為使用者提供一致性的體驗。 + + +</p> + +<h3 style="clear:both" +id="dialogs_and_toasts_are_for_feedback_not_notification">對話和快顯通知 +</h3> + +<p>您的應用程式目前若不在畫面上,就不應建立對話或快顯通知。 +對話或快顯通知只在使用者於您應用程式內採取動作時產生立即回應時才顯示。至於使用對話與快顯通知的進一步指引,請參閱<a href="/design/patterns/confirming-acknowledging.html">確認和確認完成</a>。 + + + +</p> + +<h3>排名和排序</h3> + +<p>通知就是新聞,所以基本上是以逆時間順序顯示,同時會針對應用程式指定的通知<a href="#correctly_set_and_manage_notification_priority">優先順序</a>,給與特殊考慮。 + + +</p> + +<p>通知是鎖定螢幕的重要部分,並會在裝置重新顯示螢幕時明確作用。 + +鎖定螢幕上的空間有限,所以更重要的是辨別出最緊急或相關的通知。 + +基於這個理由,Android 針對通知提供了更複雜的排序演算法,並同時考慮: + +</p> + +<ul> + <li> 時間戳記和應用程式指定的優先順序。</li> + <li> 通知最近是否以聲音或振動干擾使用者。 +(也就是說,如果電話剛發出一個聲響,而使用者想要知道「剛剛發生什麼事?」,鎖定螢幕應該以瞄一下就能取得通知的方式來回應使用者。 +) + +</li> + <li> 任何使用 {@link android.app.Notification#EXTRA_PEOPLE} 附加至該通知的人員,尤其是他們是否為標記星號的連絡人。 +</li> +</ul> + +<p>要善用這種排序,請著重於您想要建立的使用者體驗,而非著眼於清單上的任何特定排名位置。 + +</p> + + <img src="{@docRoot}images/android-5.0/notifications/AntiSample3.png" alt="" width="700px" /> + + <p class="img-caption" style="margin-top:10px">Gmail 通知使用預設的優先順序,所以通常排序低於像 Hangouts 等即時訊息應用程式,但當有新郵件進來時,會暫時立即提升。 + + + + + </p> + + +<h3>在鎖定螢幕上</h3> + +<p>由於通知可見於鎖定螢幕上,因此使用者隱私是特別重要的考量。 + +通知通常包含敏感資訊,而且不一定要顯示給拿起裝置並打開顯示的任何人。 + +</p> + +<ul> + <li> 針對具有安全鎖定螢幕 (PIN、圖案或密碼) 的裝置,介面有公用和私密兩部分。 +公用介面可以顯示在安全鎖定螢幕上,因此任何人都可看見。 +私密介面是鎖定螢幕背後的世界,只在使用者登入裝置時才會顯示。 +</li> +</ul> + +<h3>使用者控制安全鎖定螢幕上顯示的資訊</h3> +<div class="figure" style="width:311px"> + <img src="{@docRoot}images/android-5.0/notifications/LockScreen@2x.png" srcset="{@docRoot}images/android-5.0/notifications/LockScreen.png 1x" alt="" width="311px" /> + <p class="img-caption"> + 鎖定螢幕上的通知,以及使用者解鎖裝置後顯示的內容。 + </p> +</div> + +<p>當設定安全鎖定螢幕時,使用者可以選擇隱藏來自安全鎖定螢幕的機密詳細資料。 +在這種情況下,系統 UI 會考慮通知的「可見度」<em></em>等級,判斷可以顯示何種內容。 + +</p> +<p> 如要控制可見度等級,可以呼叫 +<code><a +href="/reference/android/app/Notification.Builder.html#setVisibility(int)">Notification.Builder.setVisibility()</a></code>,並指定下列值之一: +</p> + +<ul> + <li><code><a +href="/reference/android/app/Notification.html#VISIBILITY_PUBLIC">VISIBILITY_PUBLIC</a></code>。 +顯示通知的完整內容。 + 如果未指定可見度,則這會是系統預設值。</li> + <li><code><a +href="/reference/android/app/Notification.html#VISIBILITY_PRIVATE">VISIBILITY_PRIVATE</a></code>。 +在鎖定螢幕上,顯示這個通知存在的基本資訊, +包括通知圖示和發佈通知的應用程式。通知詳細資料的其他部分則不會顯示。 +但請記住的下列幾點: + <ul> + <li> 如果您想要提供您通知的不同公用版本, +以便顯示在安全鎖定螢幕上, +請在 <code><a +href="/reference/android/app/Notification.html#publicVersion">Notification.publicVersion</a></code> +欄位中提供一個取代的「通知」物件。 + <li> 此設定可以讓您的應用程式有機會建立內容的改編版本,非常實用但卻不會透露個人資訊。 +考慮簡訊應用程式的例子, +其通知包含簡訊的文字和傳送者的姓名與連絡人圖示。 +此通知應該是 <code>VISIBILITY_PRIVATE</code>,但 <code>publicVersion</code> 仍包含像「3 個新訊息」等實用資訊, +但卻又不提供任何其他可用來識別的詳細資料。 + + </ul> + </li> + <li><code><a +href="/reference/android/app/Notification.html#VISIBILITY_SECRET">Notification.VISIBILITY_SECRET</a></code>。僅顯示最起碼的資訊, +甚至連通知圖示都排除。</li> +</ul> +<h2 style="clear:both" id="notifications_on_android_wear">Android Wear 上的通知 +</h2> + +<p>預設情況下,通知和其<em>動作</em>會橋接至穿戴裝置。 +開發人員可以控制哪些通知可從電話橋接至手錶上, +反之亦然。 +開發人員還可以控制哪些動作可以橋接。如果您的 +應用程式包含 +無法以單一點選完成的動作, +請在您的穿戴通知上隱藏這些動作 +,或考慮將其連結至穿戴應用程式, +讓使用者可以在手錶上完成動作。 +</p> + +<h4>橋接通知和動作</h4> + +<p>例如電話等已連線的裝置, +可以橋接通知至穿戴裝置,讓通知可以在該處顯示。同樣的,也可以橋接動作, +這樣使用者就可以直接從穿戴裝置對通知執行動作。</p> + +<p><strong>橋接</strong></p> + +<ul> + <li> 新的即時訊息</li> + <li> 例如 +1 等單點選動作,像 Heart</li> +</ul> + +<img src="{@docRoot}images/android-5.0/notifications/WearBasic.png" width="156px" height="156px" alt="" /> + +<p><strong>請勿橋接</strong></p> + +<ul> + <li> 新到播客的通知</li> + <li> 對應至手錶上不可能執行的動作</li> +</ul> + + + +<p><h4>要在穿戴裝置上定義的獨特動作</h4></p> + +<p>有些動作只能在穿戴裝置上執行。這些動作包含:</p> + +<ul> + <li> 罐頭回應的快速清單,例如「會馬上回來」</li> + <li> 在手機上開啟</li> + <li> 帶出語音輸入畫面的「註解」或「回覆」動作</li> + <li> 啟動穿戴裝置特定的應用程式動作</li> +</ul> + +<img src="{@docRoot}images/android-5.0/notifications/ReplyAction.png" width="156px" height="156px" alt="" /> diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/about.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/about.jd new file mode 100644 index 0000000..f63501f --- /dev/null +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/about.jd @@ -0,0 +1,294 @@ +page.title=Google Play商機 +meta.tags="visibility, growth, distributing" +page.tags="play, apps, distributing, publishing" +page.metaDescription=每月數十億次下載,此數量仍在攀升。憑藉 Google 的宏大規模向使用者呈現您的應用程式。 +page.image=/distribute/images/about-play.jpg + +@jd:body + +<div id="qv-wrapper"> + <div id="qv"> + <h2>關於 Google Play</h2> + <ol style="list-style-type:none;"> + <li><a href="#reach">範圍涵蓋全球,成長迅速</a></li> + <li><a href="#ratings-reviews">使用者評分與評論</a></li> + <li><a href="#category-browsing">類別瀏覽</a></li> + <li><a href="#search">搜尋</a></li> + <li><a href="#top-charts-and-lists">頂級排行圖表與清單</a></li> + <li><a href="#featured-staff-picks">特色精選、人員推薦、集合與徽章</a></li> + <li><a href="#product-detail-pages">市集清單頁面</a></li> + <li><a href="#related-resources">相關資源</a></li> + </ol> + </div> +</div> + +<p> + Google Play 是散佈 Android 應用程式的超級市集。在 Google Play 上發行時,您會向遍佈全球 190 多個國家/地區的龐大的 Android 客戶群呈現您的應用程式。 +</p> + +<div> + <img src="{@docRoot}images/gp-about-0.jpg" alt="Google Play on an Android Tablet" style="width:480px;position:relative" /> +</div> + +<p> + Google Play 是 Android 體驗的核心環節。新使用者可以使用應用程式、遊戲及其他 Google Play 內容對其裝置進行個人化。既有使用者可以定期返回以查看其趨勢與新項目。下載新應用程式非常便利迅捷,Google Play 會使用空中通訊功能將應用程式快速推送至使用者的裝置。 +</p> + +<p> + Google Play 也是網路使用者的頂級目標。只要有瀏覽器,任何人都能在網路上查看 Google Play。Android 使用者甚至可以購買並安裝所需的應用程式,Google Play 無需任何纜線即可將應用程式自動推送至使用者的裝置。 +</p> + +<p> + Google Play 網站的可存取性與便利性可為您提供新方式,供您將許多來源 (例如線上廣告、網頁搜尋與交叉連結) 的流量吸引到您的產品上來。Google Play 專為關聯使用者與絕佳的應用程式及遊戲而設計,能提供關鍵的通路,讓您的應用程式在市場上引人注目且動力十足。 +</p> + +<div class="headerLine"> + <h2 id="ratings-reviews"> + 使用者評分與評論 + </h2> + + +</div> + +<p> + 潛在的使用者會將評分與評論視為應用程式品質的關鍵度量指標。Android 使用者可將應用程式評為一星至五星,並發佈評論,以展示其對所下載應用程式的欣賞程度。 +</p> + +<p> + 在 Google Play 清單與搜尋結果中,<strong>您應用程式的評分是影響其排名的最重要的因素之一,</strong>也是在規劃應用程式及遊戲以便在市集內推廣時,編輯人員尋求的關鍵度量指標之一。 +</p> + +<div class="img" style="padding: 1em auto;width:96%;"> + <img src="{@docRoot}images/gp-rating-web.png" style="border:1px solid #ddd;"> +</div> + +<div class="headerLine"> + <h2 id="category-browsing"> + 類別瀏覽 + </h2> + + +</div> + +<p> + 在 Google Play 中發行應用程式時,您可以點選類別 (希望使用者從該類別中找到您的應用程式)。可以使用 30 多個類別。在每個類別中,會根據評分、評論、下載次數、國家/地區與其他因素的組合確定應用程式的排名。 +</p> + +<div class="headerLine"> + <h2 id="search"> + 搜尋 + </h2> + + +</div> + +<p> + 藉由在 Google Play 中進行搜尋,使用者可以快速準確地找到應用程式或遊戲。搜尋會使用強大的啟發法對作為使用者類型的字詞提出建議,並提供所建議應用程式的直接連結。在結果中,使用者會找到相關度最高、最受青睞的應用程式 (位於頂部)。 +</p> + +<div class="headerLine"> + <h2 id="top-charts-and-lists"> + 頂級排行圖表與清單 + </h2> + + +</div> + +<div class="figure"> + <img src="{@docRoot}images/gp-about-top.jpg"> +</div> + +<p> + 透過 [應用程式] 及 [遊戲] 首頁右側的頂級排行圖表,使用者可以始終了解有關 Android 使用者的流行資訊與趨勢。這些圖表始終保持最新狀態,每天會根據最近的下載活動進行數次更新。若應用程式的評分與下載活動次數上升,應用程式在這些圖表中的排行也將升高。 +</p> + +<p> + 為了讓這些圖表盡可能貼近全球的使用者,在使用 Google Play 的最普遍的國家/地區中,還提供這些國家/地區特定的頂級排行圖表。若您的應用程式動力十足,下載次數與評分快速上升,則會攀升到一或多個頂級排行圖表中,並獲得更多的展示機會。 +</p> + +<table style="width:50%;"> + <tr> + <td> + 免費頂級排行 + </td> + <td> + 免費應用程式與免費遊戲的清單 + </td> + </tr> + + <tr> + <td> + 付費頂級排行 + </td> + <td> + 付費應用程式與付費遊戲的清單 + </td> + </tr> + + <tr> + <td> + 總收入頂級排行 + </td> + <td> + 總體收入 (免費或付費) + </td> + </tr> + + <tr> + <td> + 新免費頂級排行 + </td> + <td> + 推出未滿 30 天 + </td> + </tr> + + <tr> + <td> + 新付費頂級排行 + </td> + <td> + 推出未滿 30 天 + </td> + </tr> + + <tr> + <td> + 趨勢 + </td> + <td> + 安裝次數快速上升的新生項目 + </td> + </tr> +</table> + +<div class="headerLine"> + <h2 id="featured-staff-picks"> + 特色精選、人員推薦、集合與徽章 + </h2> + + +</div> + +<p> + Google Play 編輯團隊致力於讓使用者注意到最佳的應用程式,並設定市集內應用程式品質的基調。該團隊會經常檢閱 Google Play 中的應用程式,不僅會尋找非常知名的應用程式及遊戲,還會尋找希望更多人了解的「泥沙下的珍珠」。該團隊會在<em>特色精選</em>、<em>人員推薦</em>及其他集合中推廣出色的應用程式。 +</p> + +<p> + 您無法將應用程式指定為精選應用程式,但是該團隊會始終關注 Google Play 以尋找出色的應用程式。若您建置的應用程式深受使用者喜愛,並在 Android 裝置上具有良好外觀,就會引起編輯團隊的注意。 +</p> + +<h3 id="featured-staff-picks2"> + 特色精選與人員推薦 +</h3> + +<p> + Google Play 編輯人員每週都會選取新的一組應用程式,在其大受歡迎的<em>特色精選</em>與<em>人員推薦</em>集合中予以推廣。 +</p> + +<p> + <em>特色精選</em>集合會著重展示可供 Android 使用的最新最優的應用程式與遊戲標題。該清單還包括頂級類別 (這些頂級類別也屬特色精選之列) 中品質最優、最受青睞的應用程式。<em>人員推薦</em>會收集 Google Play 上最近所有的特色精選應用程式與遊戲。為了聚焦平板電腦使用者,特殊的<em>人員推薦</em>集合會著重展示適用於 Android 平板電腦的最佳應用程式。 +</p> + +<table style="text-align:center;margin:1.5em 0;"> + <tr> + <td style="border:none;"> + <img src="{@docRoot}images/gp-about-picks1.jpg"> + <p> + 特色精選 + </p> + </td> + <td style="border:none;"> + <img src="{@docRoot}images/gp-about-picks2.jpg"> + <p> + 集合 + </p> + </td> + <td style="border:none;"> + <img src="{@docRoot}images/gp-about-picks3.jpg"> + <p> + 編輯人員的選擇 + </p> + </td> + </tr> +</table> + +<h3 id="collections"> + 應用程式集合 +</h3> + +<p> + 編輯人員經常會根據主題或季節性活動,將一組應用程式及遊戲整合在一起。此集合方式快速及時,受其吸引,使用者經常使用這些清單來選取應用程式。 +</p> + +<p> + 編輯人員會選擇供集合推廣的應用程式,即在手機與平板電腦上展示 Android 最佳特性的高品質應用程式。此外,該人員還會尋找可對集合整體作出有趣或獨特貢獻的應用程式。 +</p> + +<h3 id="editors-choice"> + <img style="margin-right:.25em;margin-bottom:.5em;" src="{@docRoot}images/editorschoice_ann.png">編輯人員的選擇 </h3> + +<p> + <em>編輯人員的選擇</em>是規劃的應用程式集合,著重展示可在 Android 上使用的某些非常出色的應用程式。編輯人員選擇這些應用程式著眼於品質與絕佳的使用者體驗、長期受歡迎,以及 Android 功能的創新使用。 +</p> + +<p> + 此外,<em>編輯人員的選擇</em>所選擇的應用程式還會收到徽章,該徽章顯示在 Google Play 中應用程式名稱所在的位置。 +</p> + +<h3 id="top-developer"> + <img style="margin-right:.25em;margin-bottom:.5em;" src="{@docRoot}images/topdev_ann.png">頂級開發人員 </h3> + +<p> + 「頂級開發人員」徽章將授予因致力於推出 Android 上的高品質創新應用程式而取得認可、受人尊敬的開發人員。Google Play 編輯人員會根據開發人員的累計工作,不時頒發「頂級開發人員」徽章。 +</p> + +<p> + 「頂級開發人員」徽章會顯示在 Google Play 中所顯示的開發人員名稱旁。該徽章意味著對開發人員所有應用程式的長期認可,預示著使用者對開發人員的產品具有更高的信任度。 +</p> + +<div class="headerLine"> + <h2 id="product-detail-pages"> + 市集清單頁面 + </h2> + + +</div> + +<div class="figure"> + <img src="{@docRoot}images/gp-about-listing.jpg"> +</div> + +<p> + 您應用程式的 Google Play 店面是其<em>市集清單頁面</em>:這是內容豐富的多彩頁面,您可藉此推廣應用程式、著重展示其評分與評論,並顯示應用程式的功能。 +</p> + +<p> + 使用者將在您的市集清單內尋找您應用程式的所有相關資訊。若使用者在搜尋結果、頂級排行圖表、類別清單與集合內看到列示的應用程式,只需點選一次即可直接進入您的市集清單。 +</p> + +<p> + 可以使用任何網頁瀏覽器透過 <a href="https://play.google.com/apps/publish/">Google Play Developer Console</a> 管理您的產品詳細資料頁面。登入以上傳或更新您的品牌資產,然後以市場的語言輸入您的產品詳細資料。 +</p> + +<p> + 發行時,Google Play 會將您應用程式的評分、評論、連結新增至您的其他產品等項目。Google Play 還可以確保您的市集清單頁面在手機、平板電腦及網頁瀏覽器中具有良好外觀。 +</p> + +<p> + 您可以從 Google Play 外部 (例如從您的網站、廣告活動、評論、社交媒體貼文等) 將網頁使用者直接連結至您的產品詳細資料頁面。請參閱<a href="{@docRoot}distribute/tools/promote/linking.html">連結至您的產品</a>以了解實現之道。 +</p> + +<p style="clear:both"> +</p> + +<div class="headerLine"> +<h2>相關資源</h2> +</div> + +<div class="resource-widget resource-flow-layout col-13" + data-query="collection:distribute/googleplay" + data-sortOrder="-timestamp" + data-cardSizes="9x3" + data-maxResults="4"></div> + </div>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/auto.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/auto.jd new file mode 100644 index 0000000..8fe944d --- /dev/null +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/auto.jd @@ -0,0 +1,163 @@ +page.title=散佈至 Android Auto +page.image=/design/auto/images/auto-overview.png +meta.tags="auto", "publish", "quality" +page.tags="auto", "publish", "googleplay" +page.metaDescription=將您的應用程式與內容散佈至 Android Auto。 + +@jd:body + +<div id="qv-wrapper"><div id="qv"> +<h2>如何參加</h2> +<ol> +<li><a href="#understand_guidelines">了解指導方針</a></li> +<li><a href="#develop_app">開發適用於 Auto 的卓越應用程式</a></li> +<li><a href="#test_app">測試 Auto 應用程式品質</a></li> +<li><a href="#opt_in">同意條款</a></li> +<li><a href="#track_review">追蹤檢閱</a></li> +</ol> + +<h2>您也應閱讀</h2> +<ol> +<li><a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 應用程式品質</a></li> +</ol> + +</div></div> + +<p> + 若您開發出卓越的應用程式,Android Auto 與 Google Play 可協助您將其提供給車輛內的使用者。您可以延伸適用於 Auto 的新應用程式或既有應用程式,然後在 Google Play 中使用熟悉的工具與程序發行這些應用程式。 +</p> + +<p> + 若要開始,請檢閱本文件的各節,以了解如何透過 Google Play 將您的 Auto 應用程式散佈至使用者。如需有關您的應用程式應符合的可用性、品質及安全性相關指導方針的資訊,請務必閱讀 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 應用程式品質</a>。若應用程式已準備就緒,您可以接受 Developer Console 中的條款,並上傳 APK 以供檢閱。 +</p> + +<h2 id="how_to_participate"> + 如何參加 +</h2> + +<p> + 藉由 Google Play,您可以提供在車輛內使用的應用程式。您可以使用既有的 Developer Console 帳戶以及目前的散佈與定價設定來執行開發與發行。參加方式非常簡單,以下諸節將說明參加程序。 +</p> + +<div style="float:right;margin:1em 0 1.5em 2em;"> + <img src="{@docRoot}images/gp-auto-process.png"> +</div> + +<h3 id="understand_guidelines"> + 1.了解指導方針與需求 +</h3> + +<p> + 若要準備在 Android Auto 上成功推出應用程式,首先請檢閱有關在 Auto 上營造絕佳體驗的指導方針。請參閱 <a href="{@docRoot}design/auto/index.html">Android Auto 設計指導方針</a>,以了解延伸 Auto 所適用應用程式的創意,以及有關設計與可用性的詳細資料。 +</p> + +<p> + 著手設計 Auto 體驗時,請確保閱讀並了解 Auto 應用程式的品質準則。在 Google Play 上,只會將可以在 Auto 上使用的應用程式指定為 Auto 應用程式,若您的應用程式符合一組基本的品質準則,則可以參加。如需詳細資料,請參閱 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 應用程式品質</a>。 +</p> + +<h3 id="develop_app">2.開發適用於 Auto 的卓越應用程式</h3> + +<p> + 適用於 Auto 的卓越應用程式針對在車輛內使用而設計,可利用 Android Auto 的功能。使用者在駕駛時,該應用程式能提供高品質的體驗,例如提供音訊內容的播放或訊息存取功能。 +</p> + +<p> + 考慮 Auto 應用程式時,請檢閱<a href="{@docRoot}training/auto/start/index.html">開發人員文件</a>以及可用性指導方針,然後對以可能的最大限度提供支援進行規劃。請確保設計絕佳的體驗,並遵循指導方針以防止駕駛員分心。 +</p> + +<p> + 您必須在提供用於手機、平板電腦及其他裝置的既有應用程式過程中,提供 Auto 應用程式 (使用相同的套件名稱與市集清單) 的體驗。 +</p> + +<h3 id="test_app">3.測試 Auto 應用程式品質</h3> + +<p> + 應將您的 Auto 應用程式設計為在車內具有良好的執行狀況與極佳的外觀,並提供可能最優的使用者體驗。Google Play 會顯示所選高品質 Auto 應用程式,以降低使用者在 Google Play 中的探尋難度。以下說明您如何參加並提供使用者會喜愛的 Android Auto 應用程式: +</p> + +<ul> + <li>符合 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 應用程式品質</a>指導方針 <ul> + <li>遵循 <a href="{@docRoot}training/auto/index.html">Auto 應用程式開發</a>的最佳做法</li> + <li>確保您的應用程式符合所有 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 應用程式品質</a>準則</li> + </ul> + </li> +</ul> + +<h3 id="opt_in">4.同意 Android Auto 條款並發行</h3> + +<p> + 開發人員帳戶所有者必須先同意 Developer Console 的 <strong></strong>[定價與散佈] 區段中的 <a href="https://play.google.com/about/auto/developer-distribution-agreement-addendum.html">Android Auto 條款</a>,然後您才能上傳 APK 並發行應用程式供檢閱。同意條款意味著您希望透過 Google Play 為 Android Auto 使用者提供您的應用程式,且您的應用程式符合 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 應用程式品質</a>指導方針。 +</p> + +<p> + 只有在您同意條款後,才能上傳您的 Auto 應用程式。以下內容將描述確定哪些應用程式為 Auto 應用程式: +</p> + +<ul> + <li>您的應用程式宣示說明中必須使用應用程式所用的 auto 功能宣告 <code>com.google.android.gms.car.application</code> 中繼資料項目。如需有關設定您的應用程式以便與 Android Auto 搭配使用的詳細資訊,請參閱 <a href="{@docRoot}training/auto/start/index.html#auto-metadata">開始使用 Auto</a>。 + </li> +</ul> + +<p> + 若您已建置準備發行的 APK,並已進行測試,確保其符合所有 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 應用程式品質</a>指導方針,請將其上傳至 Developer Console。使用其他 Auto 功能資訊更新您的市集清單,然後視需要設定散佈選項。若您不熟悉如何在 Google Play 上準備推出應用程式,請參閱<a href="{@docRoot}distribute/googleplay/publish/preparing.html">推出檢查清單</a>。 +</p> + +<p> + 您同意條款並儲存變更後,即可照常上傳並發行應用程式。在向 Android Auto 使用者提供應用程式之前,Google Play 會提交您的應用程式以根據 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 應用程式品質</a>準則進行檢閱,並向您通知結果。若您的應用程式已核准,Google Play 會向 Android Auto 使用者提供該應用程式。如需有關如何追蹤您應用程式核准狀態的詳細資料,請參閱下一節。 +</p> + +<p> + 請注意,檢閱會影響您的應用程式對 Google Play 市集內其他裝置 (例如在電話或平板電腦上) 的可用性。若您的既有應用程式包括對手機/平板電腦元件的更新,則 Android Auto 元件必須先通過檢閱,然後才能在 Google Play 市集內提供更新後的應用程式。 +</p> + +<p> + 在 Developer Console 中同意 Android Auto 條款的步驟如下: +</p> + +<ol> + <li>確保您的應用程式符合所有 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 應用程式品質</a>準則 + </li> + + <li>在 [所有應用程式]<strong></strong> 頁面中,按一下您希望發行的應用程式。 + </li> + + <li>在 [定價與散佈]<strong></strong> 下,向下捲動以尋找 <em>Android Auto</em> 及條款連結。 + </li> + + <li>按一下 [條款]<em></em> 連結。 + </li> + + <li>仔細閱讀條款,然後按一下 [同意]<em></em>。 + </li> +</ol> + +<div style="padding-top:1em"> + <img style="border:2px solid #ddd;" src="{@docRoot}images/gp-auto-opt-in.png"> + <p class="caption"> + <strong>同意 Auto 條款:</strong>同意 Developer Console 中的條款,以便將應用程式包括在 Android Auto 中。 + </p> +</div> + +<h3 id="track_review">5.追蹤檢閱</h3> + +<p> + 將檢閱您的應用程式,以遵循上述防止駕駛員分心指導方針與技術及品質準則。此詳細檢閱程序所需的時間可能較您提交手機/平板電腦應用程式時習慣的時間更長。在核准您的應用程式之前,不會將您的應用程式或應用程式更新發行至 Google Play 市集。檢閱成功後,將發行您的應用程式,並在 Google Play 市集上予以提供。 +</p> + +<p>若未接受您的應用程式,您將收到<strong>傳送至您開發人員帳戶地址的通知電子郵件</strong>,內含需要修正的領域的摘要。若您已進行所需調整,可以將新版本的應用程式上傳至 Developer Console。 +</p> + +<p> + 請注意,若提交的應用程式是既有應用程式的更新,且更新後的應用程式不符合檢閱準則,則會拒絕更新,既有應用程式在 Google Play 市集中仍保持已發行狀態。 +</p> + +<p>若要了解您應用程式的評估方式,請參閱 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 應用程式品質</a>文件。 </p> + + + <h3>相關資源</h3> + + <div class="resource-widget resource-flow-layout col-16" + data-query="collection:autolanding" + data-cardSizes="9x6, 6x3x2" + data-maxResults="6"> + </div> diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/developer-console.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/developer-console.jd new file mode 100644 index 0000000..a0093bb --- /dev/null +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/developer-console.jd @@ -0,0 +1,449 @@ +page.title=Developer Console +page.metaDescription=了解在 Google Play 上執行應用程式發行的基地,即 Developer Console。 +page.image=/distribute/images/developer-console.jpg +Xnonavpage=true + +@jd:body + +<div id="qv-wrapper"> + <div id="qv"> + <h2>發行功能</h2> + <ol> + <li><a href="#allapps">所有應用程式</a></li> + <li><a href="#account-details">您的帳戶詳細資料</a></li> + <li><a href="#merchant-account">連結您的商家帳戶</a></li> + <li><a href="#multiple-user-accounts">多個使用者帳戶</a></li> + <li><a href="#alpha-beta">Alpha 與 Beta 測試</a></li> + <li><a href="#staged-rollouts">分階段首次亮相</a></li> + <li><a href="#multiple-apk">多 APK 支援</a></li> + <li><a href="#selling-pricing-your-products">販售與定價</a></li> + <li><a href="#in-app-products">應用程式內產品</a></li> + <li><a href="#distribution-controls">散佈控制項</a></li> + <li><a href="#reviews-reports">使用者評論,當機報告</a></li> + <li><a href="#app-stats">應用程式統計資料</a></li> + <li><a href="#related-resources">相關資源</a></li> + </ol> + </div> +</div> + +<p> + <a href="https://play.google.com/apps/publish/">Google Play Developer Console</a> 是供您發行作業與工具的基地。 +</p> +<!-- <img src="{@docRoot}images/gp-dc-startscreen.jpg" style="width:480px;" /> --> +<img src="{@docRoot}images/gp-devconsole-home.png" style="width:480px;"> +<p> + 上傳應用程式,建置您的產品頁面,設定價格與散佈,然後即可發行。透過 Developer Console,您可以從網頁瀏覽器中管理在 Google Play 上發行的所有階段。 +</p> + +<p> + 在<a href="{@docRoot}distribute/googleplay/start.html">註冊</a>並收到電子郵件傳送的確認後,您可以登入至 Google Play Developer Console。 +</p> + +<div class="headerLine"> + <h2 id="allapps"> + 所有應用程式 + </h2> + + +</div> + +<p> + 請從 [所有應用程式] 開始,該項目將提供應用程式的快速概觀,您可藉此跳至統計資料、評論及產品詳細資料,或上傳新的應用程式。 +</p> + +<div style="padding:1em 0em 0em 0em;"> + <img src="{@docRoot}images/gp-dc-home.png" class="border-img"> +</div> + +<div class="headerLine" style="margin-top:-6px"> + <h2 id="account-details"> + 您的帳戶詳細資料 + </h2> + + +</div> + +<p> + 在帳戶詳細資料頁面上指定關於您或貴公司的基本開發人員簡介資訊。Google Play 與您的客戶可根據該資訊識別您的身分。您隨時可以後退,以編輯該資訊或變更設定。 +</p> + +<div> + <img src="{@docRoot}images/gp-dc-profile.png" class="frame"> +</div> + +<p> + 您的開發人員簡介包含以下項目: +</p> + +<ul> + <li> + <p> + 開發人員名稱 (顯示在您的市集清單頁面上及 Google Play 中的其他位置)。 + </p> + </li> + + <li> + <p> + 連絡資訊 (僅供 Google 使用,您的客戶不會看到該資訊)。 + </p> + </li> + + <li> + <p> + 網站 URL (顯示在您的市集清單頁面上)。 + </p> + </li> +</ul> + +<p> + 在帳戶詳細資料頁面上,您還可為行銷人員及其他團隊新增受限的存取權限、註冊商家帳戶,或設定 Google Play 授權的測試帳戶。 +</p> + +<div class="headerLine"> + <h2 id="merchant-account"> + 連結您的商家帳戶 + </h2> + + +</div> + +<p> + 若您希望販售應用程式或應用程式內產品,請將您的 Google Wallet Merchant Account (Google 電子錢包商家帳戶) 連結至您的開發人員簡介。Google Play 會將連結的商家帳戶用於財務或稅務身分識別,以及每月的銷售支出。 +</p> + +<div class="headerLine"> + <h2 id="multiple-user-accounts"> + 多個使用者帳戶 + </h2> + + +</div> + +<p> + 為其他團隊成員設定使用者帳戶,以存取 Developer Console 的不同部分。 +</p> + +<div style="width:550px;"> + <img src="{@docRoot}images/gp-dc-invite.png" class="frame"> +</div> + +<p> + 註冊的第一個帳戶是<em>帳戶所有者</em>,具有對 Developer Console 所有部分的完整存取權限。所有者可以新增<em>使用者帳戶</em>,並管理 Developer Console 的存取權限。 +</p> + +<p> + 例如,所有者可以向使用者授予針對發行與應用程式組態 (但不針對財務報告) 的存取權限。現在請了解如何<a href="https://support.google.com/googleplay/android-developer/answer/2528691">設定多個帳戶</a>。 +</p> + +<div class="headerLine"> + <h2 id="store-listing-details"> + 市集清單詳細資料 + </h2> + + +</div> + +<p> + 使用 Developer Console 可以設定<em>市集清單頁面</em>。Developer Console 是您的應用程式在 Google Play 中的基地,使用者在手機或網頁上可以透過該頁面了解並下載您的應用程式。 +</p> + +<p> + 上傳自訂的品牌資產、螢幕擷取畫面及影片,以著重展示您應用程式的卓越之處。提供當地語系化的描述,並新增有關最新版本的註解,等等。您隨時可以更新市集清單。 +</p> + +<div> + <img src="{@docRoot}images/gp-dc-details.png" class="frame"> +</div> + +<div class="headerLine"> + <h2 id="upload-instantly-publish"> + 上傳與即時發行 + </h2> + + +</div> + +<p> + 在 Developer Console 中,您可以快速上傳並發行做好發行準備的 Android 應用程式套件檔案。在發行之前,應用程式只是<em>草稿</em>,在發行時,Google Play 會向使用者提供您的市集清單頁面與應用程式,您的應用程式將在數小時 (而非數週) 內顯示在市集清單中。 +</p> + +<p> + 發行應用程式後,您能以任意頻率對其進行更新:隨時變更價格、組態與散佈選項,無需更新應用程式二進位檔案。 +</p> + +<p> + 新增功能或解決程式碼問題時,您隨時可以發行更新後的二進位檔案。新版本幾乎立即可用,既有客戶會收到更新可供下載的通知。此外,使用者也可以接受您應用程式的自動更新,如此您一旦發行更新,使用者會立即收到並安裝這些更新。您隨時可以取消應用程式的發行。 +</p> + +<div class="headerLine"> + <h2 id="alpha-beta"> + Alpha 與 Beta 測試 + </h2> + + +</div> + +<p> + 取得真實的使用者回饋通常極具價值,在推出應用程式之前更是如此。藉由 Google Play,可將應用程式的測試版輕鬆散佈至全球任何位置的 alpha 與 beta 測試群組。 +</p> + +<p> + 在 Google Play Developer Console 的 [APK] <strong></strong>區段中,您可以找到 [Alpha 測試]<strong></strong> 與 [Beta 測試]<strong></strong> 標籤。您可在其中上傳多個版本的應用程式 APK 檔案,並將測試者的清單定義為 <a href="https://support.google.com/groups/answer/46601">Google 群組</a>或 <a href="https://support.google.com/plus/topic/2888488">Google+ 社群</a>。完成此作業後,您將收到您向測試者轉寄的 URL,測試者可透過該 URL 選擇進入測試程式。 +</p> + +<div> + <img src="{@docRoot}images/gp-dc-ab.png" class="frame"> +</div> + +<p> + 測試者選擇進入後,會移至您應用程式的產品頁面。在測試者下載應用程式時,Google Play 會為其提供 alpha 或 beta 版本 (若合適)。若使用者無意中同時選擇進入兩個測試群組,Google Play 會始終為其提供 alpha 測試版本。 +</p> + +<p> + 請注意,使用者無法在應用程式的 alpha 與 beta 版本上提供回饋與評論。若要收集回饋,您可以使用 <a href="https://support.google.com/groups/answer/46601">Google 群組</a>或 <a href="https://support.google.com/plus/topic/2888488">Google+ 社群</a>,或者設定電子郵件地址或您自己的網站。 +</p> + +<p> + 您可以使用這些測試程式來<a href="{@docRoot}distribute/essentials/optimizing-your-app.html">最佳化您的應用程式</a>、為<a href="{@docRoot}distribute/users/expand-to-new-markets.html">首次亮相新市場</a>提供協助,並開始<a href="{@docRoot}distribute/users/build-community.html">建置您的社群</a>。此外,<a href="{@docRoot}distribute/tools/launch-checklist.html">推出檢查清單</a>與<a href="{@docRoot}distribute/tools/localization-checklist.html">當地語系化檢查清單</a>中提供了有關使用 beta 測試的更多資訊。 +</p> + +<div class="headerLine"> + <h2 id="staged-rollouts"> + 分階段首次亮相 + </h2> + + +</div> + +<p> + 您也可以使用 Google Play Developer Console 中 [APK] 區段內的 [生產] 標籤,分階段完成應用程式的首次亮相。您可在此定義能下載您應用程式的使用者的百分比。 +</p> + +<p> + 分階段首次亮相有助於限制非預期錯誤或伺服器負載帶來的影響,您可藉此根據部分無偏見使用者的意見來評估使用者的回饋。在分階段首次亮相期間,使用者可以對您的應用程式進行評分及評論,因此若您猶豫不定,請在使用者的小範圍內進行應用程式的首次亮相。請確保關注並回應任何負面評論。 +</p> + +<p> + 請注意,由於 Android 平台的<a href="{@docRoot}tools/publishing/versioning.html">應用程式版本控制需求</a>有所規定,因此不支援復原。若您需要復原,請考慮以新的版本編號推出先前的 APK。但是,此作法應該用作最後的解決辦法,因為使用者將無法存取新功能,您的舊應用程式可能無法與伺服器變更或資料格式正向相容,因此,請確保對更新執行 <a href="#alpha-beta">alpha 與 beta 測試</a>。 +</p> + +<div class="headerLine"> + <h2 id="multiple-apk"> + 多 APK 支援 + </h2> + + +</div> + +<p> + 在多數狀況下,您只需要單一應用程式套件 (APK) 即可,這通常是最輕鬆的應用程式管理及維護方式。但是,若您需要為不同裝置提供不同 APK,Google Play 會提供此目標的實現之道。 +</p> + +<p> + 藉由<em>多 APK 支援</em>,您可以建立多個應用程式套件,這些套件使用相同的名稱,但其 OpenGL 材質壓縮格式、螢幕大小支援或支援的 Android 平台版本並不相同。您只需在單一產品清單下上傳所有 APK 即可,Google Play 會根據裝置的特性,選取最佳的 APK 提供給使用者。 +</p> + +<p> + 此外,對於發行的每個 APK (包括多個 APK),您也可以使用 <em></em>[APK 擴充檔案] 選項,上傳最多兩個次要下載。每個擴充檔案最大為 2GB,可以包含任何類型的程式碼或資產。Google Play 會免費主控這些檔案,並在一般應用程式安裝過程中對這些檔案的下載進行處理。 +</p> + +<div class="headerLine"> + <h2 id="selling-pricing-your-products"> + 對您的產品進行販售與定價 + </h2> + + +</div> + +<div class="figure-right"> + <img src="{@docRoot}images/gp-buyer-currency.png" class="frame"> +</div> + +<p> + 您可以使用工具設定應用程式及應用程式內產品的價格。您的應用程式可以免費下載,也可以付費下載 (需要先付費後下載)。 +</p> + +<ul> + <li>若以免費應用程式的形式發行您的應用程式,<strong>該應用程式在生命週期內必須始終免費</strong>。Google Play 中的所有使用者都可以下載免費應用程式。 + </li> + + <li>若以付費應用程式的形式發行您的應用程式,可以後來將其變更為免費。只有在 Google Play 中已註冊付費形式的使用者,才能購買並下載付費應用程式。 + </li> +</ul> + +<div class="sidebox-wrapper" style="float:right;"> + <div class="sidebox"> + <p> + 如需可散佈或販售您應用程式的國家/地區清單,請參閱<a +href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=138294&topic=2365624&ctx=topic">支援的應用程式散佈地點</a>。 + </p> + </div> +</div> + +<p> + 此外,不論應用程式是免費還是付費,您都可以提供應用程式內產品與訂閱。請針對付費應用程式、應用程式內產品與訂閱分別設定價格。 +</p> + +<p> + 使用者瀏覽您的應用程式產品頁面或開始購買時,Google Play 會為其顯示付費價格 (以使用者當地的貨幣表示)。 +</p> + +<p> + 對於每項產品,您最初會設定預設價格 (以您自己的貨幣表示)。若您未設定其他價格,Google Play 會根據您應用程式的美元價格,每月一次自動設定當地價格。 +</p> + +<p> + 但是,對於在每個國家/地區如何為您的產品定價,Google Play 會為您提供完備的控制項。開始時,您可以使用<strong>立即自動轉換價格</strong>功能,根據預設價格手動設定固定的當地價格。然後,您可以檢閱這些價格,並針對您希望的國家/地區設定新價格,每個國家/地區的價格彼此獨立,因此調整一個價格不會影響其他價格。對於多數國家/地區,您設定的價格即為使用者付費的最終價格 (含稅)。 +</p> + +<p> + 如需有關對應用程式定價的詳細資訊,請參閱<a href="{@docRoot}distribute/users/expand-to-new-markets.html#localize-your-google-play-listing">開拓新市場</a>。 +</p> + +<div class="headerLine"> + <h2 id="in-app-products"> + 應用程式內產品 + </h2> + + +</div> + +<p> + 您可以使用 <a href="{@docRoot}google/play/billing/index.html">Google Play 應用程式內交易</a>作為應用程式的獲利方式,以販售應用程式內產品與訂閱。應用程式內產品需一次性付費購買,而訂閱可每月或每年逐次收費。 +</p> + +<p> + 在特定的已發行 APK 或草稿 APK 的 [應用程式內產品]<strong></strong> 區段中,您可以: +</p> + +<ul> + <li>為應用程式內產品及訂閱建立產品清單。 + </li> + + <li>設定價格。 + </li> + + <li>發行含應用程式的產品或撤回過時的產品。 + </li> +</ul> + +<p> + 如需有關如何實作應用程式內交易的詳細資料,請參閱<a href="{@docRoot}google/play/billing/index.html">應用程式內交易</a>開發人員文件。您可以在<a href="{@docRoot}distribute/monetize/premium.html">加值</a>、<a href="{@docRoot}distribute/monetize/freemium.html">免費增值</a>及<a href="{@docRoot}distribute/monetize/subscriptions.html">訂閱</a>獲利模型中使用應用程式內產品 +</p> + +<div class="headerLine"> + <h2 id="distribution-controls"> + 散佈控制項 + </h2> + + +</div> + +<p> + 對您的應用程式散佈的目標國家/地區進行管理。對於某些國家/地區,您可以選擇希望針對的電訊商。此外,您還可以根據宣示說明檔案中宣告的散佈規則,查看可使用您應用程式的裝置清單。 +</p> + +<h3 id="geotargeting"> + 針對的國家/地區 +</h3> + +<p> + 您可以使用 Google Play Developer Console 中的控制項輕鬆管理應用程式散佈的國家/地區,無需變更您的應用程式二進位檔案。您可以指定希望散佈至哪些國家/地區,甚至指定電訊商 (對於某些國家/地區)。 +</p> + +<p> + 使用者造訪市集時,Google Play 會先確保其位於您針對的其中一個國家/地區內,然後再下載應用程式。您隨時可以變更針對的國家/地區及電訊商,只需在 Google Play Developer Console 中儲存變更即可。 +</p> + +<div class="figure-right" style="width:500px;"> + <img src="{@docRoot}images/gp-supported-dev-requirements.png" class="frame"> +</div> + +<p> + 若要協助向全球使用者行銷,您可以<a href="{@docRoot}distribute/tools/launch-checklist.html#start-localization">對市集清單</a> (包括應用程式詳細資料與描述、推廣圖形、螢幕擷取畫面等) 執行當地語系化。 +</p> + +<h3 id="captargeting"> + 針對的功能 +</h3> + +<p> + 藉由 Google Play,您還可以根據應用程式依賴的裝置功能來控制散佈。應用程式可以在其宣示說明檔案中定義多種類型的相依性,例如硬體功能、OpenGL 材質壓縮格式、資源庫、Android 平台版本等。 +</p> + +<p> + 在您上傳應用程式時,Google Play 會讀取相依性,並設定所需的散佈規則。如需有關宣告相依性的技術資訊,請閱讀 <a href="{@docRoot}google/play/filters.html">Google Play 上的篩選器</a>。 +</p> + +<p> + 若要精確控制散佈,藉由 Google Play,您可以根據相依性 (若有),查看可使用您應用程式的所有裝置。在 Google Play Developer Console 中,您可以列出支援的裝置,甚至在需要時將特定裝置排除在外。 +</p> + +<div class="headerLine"> + <h2 id="reviews-reports"> + 使用者評論與當機報告 + </h2> + + +</div> + +<div class="figure-right" style="width:500px;"> + <img src="{@docRoot}images/gp-dc-reviews.png" class="frame"> + <p class="img-caption"> + 透過使用者評論區段可以存取特定應用程式的使用者評論。您可以使用多種方式篩選評論,以便更輕鬆地找到問題並更有效地支援客戶。 + </p> +</div> + +<p> + 透過 Google Play,使用者可以輕鬆地提交對您應用程式的評論,從而讓其他使用者受益。藉由這些評論,您可以直接了解客戶提供的可用性回饋、支援要求,以及重要功能問題的詳細資料。 +</p> + +<p> + 使用當機報告進行除錯並改進應用程式。您可以查看從 Android 裝置自動提交的當機報告 (含堆疊追蹤與其他資料)。 +</p> + +<div class="headerLine"> + <h2 id="app-stats"> + 應用程式統計資料 + </h2> + + +</div> + +<div class="figure" style="width:500px"> + <img src="{@docRoot}images/gp-dc-stats.png"> + <p class="img-caption"> + <b>應用程式統計資料頁面</b>:為您顯示有關特定應用程式安裝效能的各種統計資料。 + </p> +</div> + +<p> + 您可以取得有關應用程式安裝效能的詳細統計資料。 +</p> + +<p> + 查看依獨特使用者及獨特裝置量測的安裝度量指標。檢視有效安裝次數、安裝總體次數、升級次數、每日安裝次數與解除安裝次數,以及有關評分的度量指標。 +</p> + +<p> + 依度量指標 (包括 Android 平台版本、裝置、國家/地區、語言、應用程式版本及電訊商) 詳細查看安裝次數。檢視時間軸圖表上每個維度的安裝資料。 +</p> + +<p> + 這些圖表會著重展示您應用程式安裝的峰值與長期趨勢,可協助您了解使用者的採用行為、將統計資料與推廣項目建立關聯,並查看應用程式改進與其他因素的效果。透過將特定點新增至時間軸,可以聚焦於維度內的資料。 +</p> + +<p style="clear:both"> +</p> + +<div class="dynamic-grid"> +<div class="headerLine"> +<h2 id="related-resources">相關資源</h2> +</div> + +<div class="resource-widget resource-flow-layout col-13" + data-query="collection:distribute/googleplay/developerconsole" + data-sortOrder="-timestamp" + data-cardSizes="9x3" + data-maxResults="6"></div> + </div>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/families/about.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/families/about.jd new file mode 100644 index 0000000..b362ae9 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/families/about.jd @@ -0,0 +1,39 @@ +page.title=Designed for Families +page.metaDescription=Designed for Families 可為您提供協助,讓家庭能更輕鬆地探尋您的應用程式與遊戲。 +page.image=/distribute/images/about-dff-sm.jpg +meta.tags="families, googleplay, distribution" +page.tags="families" + +@jd:body + +<p> + 在數週之後,Google Play 將帶來面向家庭的新體驗,該體驗會提供新的方式,使用者可藉此為其家庭瀏覽、搜尋及探尋高品質應用程式與遊戲。 +</p> + +<p> + 為了支援更便利的家庭友好市集,新的 Designed for Families 計劃邀請開發人員選擇加入面向家庭的應用程式與遊戲。符合<a href="https://support.google.com/googleplay/android-developer/answer/6184502">計劃需求</a>的應用程式將顯示在新的家庭體驗中,由此父母可以更輕鬆地尋找適合、可信的高品質應用程式與遊戲。 +</p> + +<img src="{@docRoot}distribute/images/about-dff-sm.jpg"> + +<p> + 請使用目前在 Developer Console 中管理應用程式所用的工具與程序,立即選擇加入您的應用程式與遊戲。除了將既有的類別、排行及評論保留在 Google Play 市集的其他位置,計劃中的應用程式還會受益於更高的可探尋性。 +</p> + +<h2 id="elibibility">資格</h2> + +<p> + 在 Google Play 上,父母與家人 (符合應用程式的年齡段需求) 可以更輕鬆地探尋家庭友好體驗中的應用程式。Designed for Families 計劃的設計目的,是納入為兒童製作的應用程式以及可讓全家人樂在其中的應用程式。若要吸引這部分受眾,您的應用程式需要符合特定的指導方針及政策,在應用程式內容檢閱期間會對符合狀況進行評估。 +</p> + +<p> + 請確保熟悉您的應用程式必須遵循的政策。這些政策包括<a href="http://play.google.com/about/developer-content-policy.html">內容政策</a>、<a href="http://play.google.com/about/developer-distribution-agreement.html">開發人員散佈合約</a>,以及<a href="https://play.google.com/intl/ALL_us/about/families/developer-distribution-agreement-addendum.html">Designed for Families DDA 增補合約</a>。 +</p> + +<p> + 此外,您的應用程式還必須符合 Google Play 開發人員說明中心內列出的 <a href="https://support.google.com/googleplay/android-developer/answer/6184502">Designed for Families 計劃需求</a>。 +</p> + +<div class="paging-links" style="padding-top:.75em;"> + <a href="{@docRoot}distribute/googleplay/families/start.html" class="next-class-link">後續內容:選擇</a> +</div> diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/families/faq.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/families/faq.jd new file mode 100644 index 0000000..6964789 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/families/faq.jd @@ -0,0 +1,233 @@ +page.title=常見問題 +meta.tags="families", "guidelines", "quality" +page.tags="families", "addendum" +page.metaDescription=有關 Designed for Families 的問題與回答 + +@jd:body + +<style> + dt { + font-weight:bold; + } + </style> + +<div id="qv-wrapper"> +<ol id="qv"> +<h2>本文件內容</h2> +<ol> + <li><a href="#review">應用程式檢閱與選擇加入</a></li> + <li><a href="#monetization">獲利</a></li> + <li><a href="#other">其他問題</a></li> +</ol> +</div> + +<p> + 以下各節提供有關 Designed for Families 的更多資訊,並回答您可能提出的有關 Designed for Families 的常見問題。 +</p> + + +<h2 id="review">應用程式檢閱與選擇加入</h2> + +<dl> +<dt>我如何選擇加入應用程式?</dt> + +<dl> + <dd> + 在 Google Play Developer Console 中,您可以在應用程式的 [定價與散佈] 標籤上選擇加入 Designed for Families。<a href="{@docRoot}distribute/googleplay/families/start.html">逐步解說</a>如下所示。 + </dd> + + <dt> + 我在何處展示應用程式的互動功能?您為何收集該資訊? + </dt> + + <dd> + 互動功能展示包含在內容評分問卷中。在 Designed for Families 計劃選擇加入流程中,您有機會對展示進行檢閱。我們收集此資訊,以便使用者評估您的應用程式時可以做出明智的選擇。 + </dd> + + <dt> + 什麼是 COPPA? + </dt> + + <dd> + COPPA 是美國聯邦貿易委員會 (FTC) 的兒童線上隱私權保護規章。<a href="http://www.ftc.gov/tips-advice/business-center/guidance/complying-coppa-frequently-asked-questions">FTC 的 COPPA 相關常見問題</a>中提供了更多項細資料。請注意,對於如何遵守 COPPA 或其他兒童法規,Google Play 無法為開發人員提供法律指引。 + </dd> + + <dt> + 我是否需要提供最新的隱私權原則,在何處提供? + </dt> + + <dd> + 是,您需要在應用程式的市集清單上提供持續隱私權原則的連結,並在 Developer Console 內確認您遵守當地的隱私權法規。若要新增或檢閱您的隱私權原則,請在 Developer Console 中選擇您的應用程式,然後捲至<strong></strong> [市集清單] 區段的底部。 + </dd> + + <dt> + 我可以選取多少個年齡段? + </dt> + + <dd> + 您最多可以選取兩個相鄰的年齡段。年齡段包括:不超過 5 歲、6-8 歲,以及 9-12 歲。但是,若您的應用程式針對的受眾包含兒童與年齡較兒童更大的受眾,您必須選取 [一般受眾] <em></em>類別。 + </dd> + + <dt> + 在 Designed for Families 計劃中,我可以選取多少個內容類別? + </dt> + + <dd> + 在 Designed for Families 計劃中,您可以選取一個類別,對於一般 Google Play 市集,您可以選取另一個類別。 + </dd> + + <dt> + 什麼是 Designed for Families 類別? + </dt> + +<ul> +<li><strong>動作與冒險</strong>:這些是以動作為導向的應用程式/遊戲,包括諸如賽車遊戲、童話冒險等所有內容。 + </li> + + <li style="list-style: none"><strong>益智遊戲</strong>:此類別包含讓使用者思考的遊戲,包括拼圖、比對遊戲以及類似遊戲。 + </li> + + <li><strong>創意</strong>:這些是激發創意的應用程式/遊戲。此類別中應用程式/遊戲的範例類型包括繪畫、噴塗以及您可以進行創作的其他遊戲。 + </li> + + <li><strong>教育</strong>:這些是具有教育價值的應用程式/遊戲,包括數學、科學、學習字母表、學習計數,以及諸如地理與歷史等更多類型的教育內容。 + </li> + + <li><strong>音樂與影片</strong>:這些是包含音樂元素或影片元素的應用程式/遊戲,包括從彈奏鋼琴到觀看影片等所有內容。 + </li> + + <li><strong>角色扮演</strong>:這些是使用者可以扮演某種角色 (例如廚師或醫生) 的應用程式/遊戲。 + </li> +</ul> + +<dl> + <dt> + 若我選擇加入 Designed for Families 計劃,發行應用程式是否需要更長時間? + </dt> + + <dd> + 在您選擇加入 Designed for Families 後,Google Play 會檢閱您的應用程式,以確認其是否適合家庭使用。若您的應用程式符合所有計劃需求,預計發行時間不會長於一般發行時間;但是,若在 Designed for Families 檢閱期間拒絕應用程式,則該應用程式的發行可能會出現延遲。 + </dd> + + <dt> + 若我的應用程式遭 Designed for Families 計劃拒絕,會發生什麼狀況? + </dt> + + <dd> + 若您的應用程式遭 Designed for Families 計劃拒絕,我們會在 Developer Console 以及詳細的電子郵件中告訴您原因。您有機會修正問題並將應用程式重新提交至計劃,或變更選擇加入回應。請注意,若您的既有應用程式在 Google Play 上處於有效狀態,則只會拒絕您的應用程式更新 (您的應用程式在 Play 市集內仍保持有效狀態)。若您已將不符合需求的新應用程式提交至 Designed for Families 計劃,則提交的整個應用程式都會遭拒,也不會在 Play 上發行該應用程式。此後您可以解決確認的問題,並向 Designed for Families 計劃重新提交應用程式,也可以選擇退出計劃。 + </dd> + + <dt> + 若我的應用程式在發行後發現未遵循 Designed for Families 計劃的需求,會發生什麼狀況? + </dt> + + <dd> + 在 Google Play 市集 (不僅是 Designed for Families 計劃) 中,將移除或擱置您的應用程式。對於移除的應用程式,可以採用與遭拒應用程式相同的補救措施。對於擱置的應用程式,可以使用開發人員求助程序進行求助。 + </dd> + + <dt> + 若我選擇加入 Designed for Families 計劃,稍後是否能選擇退出? + </dt> + + <dd> + 是,您隨時可以選擇退出該計劃。請注意,若您選擇退出,將失去在新家庭友好體驗中的位置,且無法再享有計劃帶來的其他受益。 + </dd> + + <dt> + 若我在該計劃接受應用程式後對應用程式進行更新,會發生什麼狀況? + </dt> + + <dd> + 若應用程式已包含在 Designed for Families 計劃中,需要自始至終遵循資格需求。若您需要編輯與應用程式關聯的 Designed for Families 中繼資料,請移至 Google Play Developer Console 的 [定價與散佈] 區段以編輯該資訊。若更新您的應用程式導致目標受眾發生變更,建議您針對已安裝應用程式的使用者發出警示。 + </dd> + + <dt> + 若應用程式及遊戲使用 Google sign-in 或 Google Play Game 服務,是否能選擇加入 Designed for Families 計劃? + </dt> + + <dd> + 參加 Designed for Families 計劃的應用程式完全面向兒童,即針對以下年齡段:不超過 5 歲,6 至 8 歲或 9 至 12 歲的兒童<strong>不可</strong>使用 Google+ Sign-in 或 Google Play Game 服務作為其應用程式的登入方式。 <p> + 若參加 Designed for Families 的應用程式針對兒童與年齡較兒童更大的受眾,可將 Google+ Sign-in 或 Google Play Game 服務用作<strong>可選</strong>功能。兒童使用者必須能完整存取應用程式或遊戲,無需登入 Google+ 或 Google Play Game 服務。 + </p> + </dd> + + <dt> + 我的應用程式已選擇加入 Google Play for Education,已與 Google sign-in 整合,因此學生可以使用其學校帳戶登入。我是否需要變更 Google sign-in 在應用程式中的運作方式? + </dt> + + <dd> + 參加 Google Play for Education 的應用程式可將 Google sign-in 用於學生帳戶,只要其不要求攔截應用程式的所有使用者即可。 + </dd> +</dl> + +<h2 id="monetization"> + Designed for Families 計劃獲利 +</h2> + +<dl> + <dt> + 您是否能提供有關 Designed for Families 廣告政策的更多詳細資料? + </dt> + + <dd> + 請閱讀 <a href="https://support.google.com/googleplay/android-developer/answer/6184502#ads">Designed for Families 的廣告政策</a>。 + </dd> + + <dt> + 我的應用程式能否提供中介螢幕廣告? + </dt> + + <dd> + 中介螢幕廣告可能適用於某些應用程式。但是,在提供廣告之前,使用者必須能導覽至主要行為。 + </dd> + + <dt> + 我如何知道我的廣告網是否遵循 Designed for Families 的廣告政策? + </dt> + + <dd> + 請連絡您的廣告網,詢問其內容政策與廣告政策。若您使用 AdMob,請參閱 <a href="https://support.google.com/admob/answer/3248194">AdMob 說明中心</a>,以了解有關如何為您的應用程式或特定廣告單元建立標籤 (以便進行以兒童為導向的處理) 的詳細資料。確保整體使用者體驗 (含應用程式內廣告) 符合 <a href="https://support.google.com/googleplay/android-developer/answer/6184502">Designed for Families 計劃需求</a>是開發人員的責任。 + </dd> + + <dt> + 我的應用程式內能否具有應用程式內購買? + </dt> + + <dd> + 在參與 Designed for Families 計劃的應用程式內,除了遵循 <a href="https://play.google.com/intl/ALL_us/about/families/developer-distribution-agreement-addendum.html">Designed for Families DDA</a> 與其他適用法規需求外,關於應用程式內購買 (IAP) 沒有任何特定限制,但是 Play 會保留因商業策略過於激進而拒絕應用程式的權利。在參加 Designed for Families 計劃的所有應用程式 (主要針對兒童受眾) 中,Google Play 會強制執行 IAP 密碼保護,以確保父母 (而非兒童) 核准購買。請注意,針對一般受眾的應用程式不會採用此處理方式。 + </dd> +</dl> + +<h2 id="other"> + 其他問題 +</h2> + +<dl> + <dt> + 對於參加 Designed for Families 的應用程式,預期的目標受眾是誰? + </dt> + + <dd> + 我們的目標是在 Google Play 市集內為父母與監護人提供卓越的體驗,以探尋由受信任品牌及開發人員提供且專為兒童與家庭設計的令人愉快的應用程式。 + </dd> + + <dt> + 是否僅為特定國家/地區的開發人員提供 Designed for Families 計劃? + </dt> + + <dd> + Designed for Families 是全球計劃。 + </dd> + + <dt> + 目前家庭遊戲類別中所發行的應用程式會發生什麼狀況? + </dt> + + <dd> + 目前的家庭遊戲類別將在 2015 年 5 月過時。目前位於家庭遊戲類別中的應用程式必須選取 Play 市集內的其他類別。若應用程式未選取其他類別,會為該應用程式指定休閒遊戲類別。 + </dd> +</dl> + +<div class="paging-links" style="padding-top:.75em;"> + <a href="https://docs.google.com/forms/d/1EtvUWqlkxS6RxHJjeI-3-7uzdbIZx6n9Cocy2D369B8/viewform" class="next-class-link">後續內容:隨時了解</a> +</div>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/families/start.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/families/start.jd new file mode 100644 index 0000000..bf7a725 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/families/start.jd @@ -0,0 +1,70 @@ +page.title=選擇加入 Designed for Families +meta.tags="families", "guidelines", "quality" +page.tags="families", "addendum" +page.metaDescription=只需幾個簡易步驟即可加入 Designed for Families。 + +@jd:body + +<p> + 若您要建置專為兒童與家庭設計的應用程式,必須<em>先</em>執行以下幾項作業,然後再準備選擇加入 Designed for Families 計劃: +</p> + +<ul> + <li>完成針對您應用程式的內容評分問卷,ESRB 評級應為 Everyone 或 Everyone 10+ + </li> + + <li>將隱私權原則連結新增至您應用程式的 [市集清單]<strong></strong> 頁面。 + </li> + + <li>確保您的應用程式符合所有 <a href="https://support.google.com/googleplay/android-developer/answer/6184502">Designed for Families 計劃需求</a>。 + </li> +</ul> + +<p> + 現在您的應用程式已可供發行,您可以從<a href="https://play.google.com/apps/publish/"> Developer Console </a>直接選擇加入 Designed for Families。選擇加入意味著除了您在 Google Play 市集內已選取的類別外,您還希望您的應用程式可以在 Google Play 上用於新的家庭友好體驗。 +</p> + +<p> + 選擇加入也會確認您的應用程式遵循 <a href="http://play.google.com/about/developer-content-policy.html">Google Play 開發人員計劃政策</a>以及<a href="http://play.google.com/about/developer-distribution-agreement.html">開發人員散佈合約</a> (包括<a href="https://play.google.com/intl/ALL_us/about/families/developer-distribution-agreement-addendum.html"> Designed for Families DDA 增補合約</a>)。若您不熟悉這些政策文件或增補合約,請確保在選擇加入之前仔細閱讀。 +</p> + +<p> + 準備就緒後,針對特定應用程式,根據以下所述選擇加入 Designed for Families: +</p> + +<ol> +<li>在 Developer Console 的 [所有應用程式]<strong></strong> 頁面中,按一下您希望選擇加入的應用程式。在 [定價與散佈] 下,向下捲動以尋找 <strong>Designed for Families</strong> 及選擇加入核取方塊。<img src="/images/gp-dff-optin.png" style="border:2px solid #ddd;margin:1em 0;"> + </li> + + <li>開始選擇加入流程,確認您的應用程式符合資格需求。</li> + <li>若您的應用程式包含廣告,請確認其符合廣告政策。<img src="/images/gp-dff-appinfo.png" style="border:2px solid #ddd;margin:1em 0;"></li> + <li>從以下項目中選擇針對的年齡段:不超過 5 歲、6 至 8 歲、9 至 12 歲,或一般受眾 (若應用程式針對兒童與年齡較兒童更大的受眾)。若您的應用程式針對多個年齡段,您最多可以選擇兩個相鄰的年齡段。評級為 ESRB 10+ 的應用程式只能選擇針對 9 至 12 歲的年齡段或一般受眾。 + </li> + + <li>針對 Google Play 上面向家庭的新體驗,為您的應用程式選擇類別。此外,您的應用程式也將位於 Google Play 中的應用程式既有類別內。</li> + <li>檢閱並同意連結的文件,然後按一下 [選擇加入]<strong></strong>。最後,按一下 [定價與散佈] 頁面上的 [提交更新]<strong></strong> 以發行或更新您的應用程式。 + </li> +</ol> + +<p> + 選擇加入您的應用程式後,Designed for Families 計劃會先對應用程式進行仔細檢閱,然後才會接受該應用程式。 +</p> + +<p class="note"> + <strong>注意:</strong>Designed for Families 計劃中已發行的應用程式也可供 Google Play 上的所有使用者使用。 +</p> + +<p> + 若您選擇加入首次發行的應用程式,但該應用程式不符合 Designed for Families 計劃需求,則在 Google Play 上不會提供該應用程式,直到<strong></strong>您更新應用程式以符合計劃需求,<strong>或</strong>取消核取選擇加入方塊並通過 Google Play 的標準檢閱程序為止。 +</p> + +<p> + 若您選擇加入 Google Play 上已發行的應用程式,但該應用程式不符合計劃需求,則該應用程式仍可供所有使用者使用,但不會新增至新的家庭體驗中,直到您更新應用程式以符合計劃需求為止。 +</p> + +<p> + 若您發行應用程式的更新,並選擇該應用程式加入 Designed for Families,則應用程式更新需要先通過 Designed for Families 檢閱,然後才能供 Google Play 上的所有使用者使用。</p> + +<div class="paging-links" style="padding-top:.75em;"> + <a href="{@docRoot}distribute/googleplay/families/faq.html" class="next-class-link">後續內容:常見問題</a> +</div>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/guide.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/guide.jd new file mode 100644 index 0000000..0165279 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/guide.jd @@ -0,0 +1,57 @@ +page.title=在 Google Play 上尋找成功 +page.metaDescription=協助您在 Google Play 上的應用程式或遊戲業務中尋找成功的指南。 +meta.tags="distribute", "bestpractices" +page.tags="google play", "business", "monetize", "engagement" +page.image=distribute/images/play_dev_guide.png + +@jd:body + +<p> + 我們已建立可下載的指南,可協助您在 Google Play 上的應用程式或遊戲業務中尋找成功。該指南提供了功能、秘訣與最佳做法,以協助您建置有效的策略。 +</p> + +<p> + 該指南分為以下各節: +</p> +<ul> + <li> + <strong>在 Google Play 上發行</strong> — 使用 Google Play Developer Console 將您的應用程式散佈至全球數量超過十億的 Android 使用者。 + </li> + + <li> + <strong>品質</strong> — 建置卓越應用程式的基本原則,以及對 Google Play 指導方針與政策的深刻見解。 + </li> + + <li> + <strong>可探尋性與範圍</strong> — 最大限度提高您應用程式的可探尋性,儘量爭取可能最廣泛的受眾。 + </li> + + <li> + <strong>吸引與挽留</strong> — 將潛在客戶轉化為活躍的使用者,並提高挽留使用者的能力。 + </li> + + <li> + <strong>獲利</strong> — 用於產生持續不斷、逐級攀升的營收串流的獲利策略。 + </li> + + <li> + <strong>使用 Google Analytics 進行量測</strong> — 了解使用者並改善使用者的應用程式體驗、轉變與行銷。 + </li> + + <li> + <strong>邁向全球</strong> — 在全球各地的市場推出您的應用程式。 + </li> +</ul> + +<p> + 請按一下以下影像以下載該指南,或<a href="http://goo.gl/DFjbrS">在 Google Play 上取得該指南</a>。 +</p> + +<p> + 在未來數月中,我們將發行該指南的多種語言版本。請定期回來查看此網站,因為我們會發佈有關新功能與最佳做法的資訊,以協助您實現應用程式的散佈與獲利。 +</p> + <div class="resource-widget resource-flow-layout col-16" + data-query="collection:play_dev_guide" + data-cardSizes="9x6" + data-maxResults="1"> + </div>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/auto.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/auto.jd new file mode 100644 index 0000000..bf7b702 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/auto.jd @@ -0,0 +1,434 @@ +page.title=Auto 應用程式品質 +page.metaDescription=Auto 應用程式與車輛的輸入控制項及顯示進行整合,可最大限度減少駕駛員分心的狀況,從而提供絕佳的體驗。 +page.image=/distribute/images/gp-auto-quality.png + +@jd:body + +<div id="qv-wrapper"><div id="qv"> +<h2>品質準則</h2> + <ol> + <li><a href="#core">核心應用程式品質</a></li> + <li><a href="#ux">視覺設計與互動</a></li> + <li><a href="#fn">功能</a></li> + <li><a href="#faq">常見問題</a></li> + </ol> + + <h2>您也應閱讀</h2> + <ol> + <li><a href="{@docRoot}distribute/essentials/quality/core.html">核心應用程式品質</a></li> + <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">最佳化您的應用程式</a></li> + <li><a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">適用於音訊應用程式的 Android Auto UX 指導方針</a></li> + <li><a href="{@docRoot}shareables/auto/AndroidAuto-messaging-apps.pdf">適用於傳訊應用程式的 Android Auto UX 指導方針</a></li> + </ol> +</div> +</div> + + + <img src="{@docRoot}distribute/images/gp-auto-quality.png" style="width:480px;"> + + +<p>在您的應用程式中設計對 Android Auto 的支援時,避免駕駛員分心是高於一切的準則。若應用程式使用 Auto 使用者介面,應透過諸如語音命令或非常簡易的視覺設計等最佳做法,最大限度減少讓駕駛員分心的狀況。 +</p> + +<p> + 絕佳的 Auto 體驗應具備可預測的特性。若應用程式支援 Android Auto,應該只有在資訊具有重大意義時,才向駕駛員顯示適時資訊,並針對常見任務使用可預測的簡易樣式。 +</p> + +<p class="caution"> + <strong>重要說明:</strong>若應用程式在連接至 Android Auto 螢幕的裝置上執行,則本頁面中列出的準則適用於您應用程式的使用者介面及行為。應用程式必須符合這些準則,才能具備成為 Google Play 上 Android Auto 應用程式的資格。 +</p> + + +<div class="headerLine"> + <h2 id="core"> + 核心應用程式品質 + </h2> + +<p> + 除了以下列出的 Auto 特定準則外,Auto 應用程式還應符合適用於 Android 平台的所有相關核心應用程式品質準則 (如<a href="{@docRoot}distribute/essentials/quality/core.html">核心應用程式品質</a>準則中所詳述)。請根據這些準則對您的應用程式進行測試,以確保應用程式符合 Android 的導覽與設計標準。然後,根據所有 Auto 特定準則對應用程式進行測試,請謹記,若您的應用程式在連接至 Android Auto 的裝置上執行,必須符合本頁面列出的需求。 <div class="headerLine"> + <h2 id="ux"> + 視覺設計與使用者互動 + </h2> + +</div> + +<p> + 這些準則可確保您的應用程式遵循關鍵的設計與互動樣式,以確保在 Android Auto 上提供一致、直觀且充滿樂趣的使用者體驗。許多元素 (例如抽出式導覽面板、卡背景、字型與圖示顏色) 由系統設定並呈現。您自己的應用程式特定設計元素必須符合以下準則。 +</p> + +<table> + +<tr> + <th style="width:2px;"> + 類型 + </th> + <th style="width:54px;"> + 測試 + </th> + <th> + 描述 + </th> +</tr> + +<tr> + <td rowspan="5" id="safety"> + 駕駛員注意力 + </td> + + <td id="AU-MV"> + AU-MV + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式不會在 Auto 螢幕上顯示動畫元素 (例如以動畫顯示的圖形、遊戲、影片或進度列)。 + </p> + </td> +</tr> + +<tr> + <td id="AU-VA"> + AU-VA + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式不會在 Auto 螢幕上顯示任何形式的視覺廣告或文字廣告。只能接受音訊廣告。 + </p> + </td> +</tr> + +<tr> + <td id="AU-IM"> + AU-IM + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式元素不會在 Auto 螢幕上顯示任何影像。例外狀況包括:應用程式可能會針對消費螢幕 (例如專輯封面) 背景中的上下文內容,顯示單一靜態影像 ,應用程式可能會在內容抽出式導覽面板中顯示圖示。 + </p> + </td> +</tr> + +<tr> + <td id="AU-DS"> + AU-DS + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式不會包括導致駕駛員分心的任何功能。 + </p> + </td> +</tr> + +<tr> + <td id="AU-VI"> + AU-VI + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式在 Android Auto 中處於使用中時,永遠不會在手機螢幕上顯示任何形式的視覺資訊 (通知、快顯通知、影片、影像、廣告等)。 + </p> + </td> +</tr> + + + +<tr> + <td rowspan="3" id="layout"> + 版面配置 + </td> + + <td id="AU-SC"> + AU-SC + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式不會顯示自動捲動的文字。 + </p> + </td> +</tr> + + +<tr> + <td id="AU-FT"> + AU-FT + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式會使用預設 Roboto 字型 (以核准的兩種大小) 顯示所有字串。 + </p> + </td> +</tr> + +<tr> + <td id="AU-ST"> + AU-ST + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式不會顯示長於 120 個字元的任何個別字串。 + </p> + </td> +</tr> + +<tr> + <td rowspan="4" id="contrast"> + 視覺對比 + </td> + + <td id="AU-DM"> + AU-DM + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式支援白晝模式 (在明亮背景中顯示深色的文字與控制項)。(<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="AU-NM"> + AU-NM + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式支援黑夜模式 (在深色背景中顯示明亮的文字與控制項)。(<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="AU-WI"> + AU-WI + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式提供白色的圖示組,系統會將其設為彩色以提供自動對比補償。(<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="AU-OC"> + AU-OC + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式提供顏色,系統可以最佳化顏色以便於在車內閱讀。(<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td rowspan="2" id="interaction"> + 互動 + </td> + + <td id="AU-VC"> + AU-VC + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式必須支援語音命令。 + </p> + </td> +</tr> + +<tr> + <td id="AU-AB"> + AU-AB + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式特定按鈕回應使用者動作的延遲不超過兩秒。 + </p> + </td> +</tr> + +</table> + + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/essentials/autoqualityguidelines/visualdesign" +data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6"> +</div> + + + +<div class="headerLine"> + <h2 id="fn"> + 功能 + </h2> + + +</div> + +<p> + 這些準則可確保您的應用程式經過正確設定並提供預期的功能行為。 +</p> + + +<table> +<tr> + <th style="width:2px;"> + 類型 + </th> + <th style="width:54px;"> + 測試 + </th> + <th> + 描述 + </th> +</tr> + +<tr> + <td rowspan="5" id="general"> + 一般 + </td> + + <td id="AU-LT"> + AU-LT + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式的載入時間不超過 10 秒。 + </p> + </td> +</tr> + +<tr> + <td id="AU-FP"> + AU-FP + </td> + <td> + <p style="margin-bottom:.5em;"> + Auto 應用程式功能按預期運作,或按應用程式的 Google Play 市集清單中所述內容運作。 + </p> + </td> +</tr> + +<tr> + <td id="AU-RL"> + AU-RL + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式從主螢幕重新啟動後,可將狀態還原為盡可能接近先前的狀態。 + </p> + </td> +</tr> + +<tr> + <td id="AU-SS"> + AU-SS + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式中完成任何任務都不超過六步。 + </p> + </td> +</tr> + +<tr> + <td id="AU-GO"> + AU-GO + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式的任何非功能按鈕或已停用按鈕都必須灰顯。 + </p> + </td> +</tr> + + +<tr> + <td rowspan="2" id="media"> + 媒體 + </td> + + + <td id="AU-PA"> + AU-PA + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式最多具有四個主要動作與一個可選動作溢出開關 (若不使用動作溢出,可以有五個主要動作)。(<a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="AU-SA"> + AU-SA + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式最多具有四個可選次要動作與一個動作溢出開關。(<a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">進行了解</a>) + </p> + </td> +</tr> + + +<tr> + <td rowspan="2" id="notifications"> + 通知 + </td> + + <td id="AU-NA"> + AU-NA + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式不會透過通知顯示廣告。 + </p> + </td> +</tr> + +<tr> + <td id="AU-NT"> + AU-NT + </td> + <td> + <p style="margin-bottom:.5em;"> + 只有在通知與駕駛員的需求相關時,應用程式才顯示通知。 + </p> + <p> + 範例:<br /> 良好:通知使用者已送達新訊息。<br /> 不良:向使用者通知有關新專輯發行事宜。 + </p> + </td> +</tr> + +</table> + +<!-- +<h3 class="rel-resources clearfloat">Related resources</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/essentials/autoqualityguidelines/functionality" +data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6"> +</div> +--> + +<div class="headerLine"> + <h2 id="faq"> + 常見問題 + </h2> +</div> + +<p style="margin-top:30px;"> + <strong>提交應用程式後,如何才能知道我的應用程式不符合 Android Auto 的所有需求?</strong> +</p> +<p>若您計劃開發適用於 Auto 的應用程式,建議您立即開始啟用並測試您的應用程式。但是,此時無法發行 Auto 啟用的應用程式。請加入 <a href="http://g.co/AndroidAutoDev" class="external-link">Auto 開發人員 Google+ 社群</a>,以及時了解您何時能提交 Auto 啟用的應用程式。</p> +</p> + + +<p style="margin-top:30px;"> + <strong>我的應用程式針對的不僅是 Android Auto。若我的應用程式不符合 Auto 需求,我的新應用程式或更新後的應用程式是否仍顯示在 Google Play 中針對手機與平板電腦的位置?</strong> +</p> +<p> + 否。Google 開始核准程序時,會對您的 Auto 應用程式執行駕駛員安全檢閱,在核准該應用程式之前,不可散佈該應用程式。由於該 APK 也是適用於手機與平板電腦的 APK,因此在 Auto 核准程序完成之前,將無法使用適用於這些裝置的 Play 市集更新。 +</p> + +<p class="caution"> + <strong>重要說明:</strong>由於存在這一限制,因此您不應將生產 APK 用於 Auto 支援原型設計。 +</p>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/core.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/core.jd new file mode 100644 index 0000000..feabc20 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/core.jd @@ -0,0 +1,1014 @@ +page.title=核心應用程式品質 +page.metaDescription=應用程式品質會對應用程式的安裝、使用者評分與評論、吸引力及使用者挽留能力產生影響,因此直接影響到應用程式長期的成敗。 +page.image=/distribute/images/core-quality-guidelines.jpg + +@jd:body + +<div id="qv-wrapper"><div id="qv"> +<h2>品質準則</h2> + <ol> + <li><a href="#ux">設計與互動</a></li> + <li><a href="#fn">功能</a></li> + <li><a href="#ps">效能與穩定性</a></li> + <li><a href="#listing">Google Play</a></li> + + </ol> + + <h2>測試</h2> + <ol> + <li><a href="#test-environment">設定測試環境</a></li> + <li><a href="#tests">測試程序</a></li> + </ol> + + <h2>您也應閱讀</h2> + <ol> + <li><a href="{@docRoot}distribute/essentials/quality/tablets.html">平板電腦應用程式品質</a></li> + <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">最佳化您的應用程式</a></li> + </ol> + + +</div> +</div> + +<div class="top-right-float"> + <img src="{@docRoot}images/gp-core-quality.png" style="margin-left: 20px;"> +</div> + +<p> + Android 使用者希望取得高品質的應用程式。應用程式品質會對應用程式的安裝、使用者評分與評論、吸引力及使用者挽留能力產生影響,因此直接影響到應用程式長期的成敗。 +</p> + +<p> + 本文件將協助您透過一組精簡的核心應用程式品質準則與關聯的測試,對您應用程式品質的基本層面進行評估。所有 Android 應用程式都應符合這些準則。 +</p> + +<p> + 在發行應用程式之前,請根據這些準則對其進行測試,以確保這些應用程式在許多裝置上能良好運作、符合 Android 的導覽與設計標準,並為 Google Play 市集內的推廣商機做好準備。您的測試並不限於本文所述內容,本文件的目的在於指定所有應用程式都應呈現的基本品質特性,以便您可以將其納入您的測試規劃中。 +</p> + +<p> + 若您要建立適用於平板電腦及/或 Google Play for Education 的應用程式,應考慮其他品質準則,<a href="{@docRoot}distribute/essentials/quality/tablets.html">平板電腦應用程式品質</a>指導方針與<a href="{@docRoot}distribute/essentials/gpfe-guidelines.html">教育指導方針</a>中已定義這些準則。 +</p> + +<div class="headerLine"> + <h2 id="ux"> + 視覺設計與使用者互動 + </h2> + + +</div> + +<p> + 這些準則可確保您的應用程式提供標準的 Android 視覺設計與互動樣式 (若適用),從而提供一致且直觀的使用者體驗。 +</p> + +<table> + <tr> + <th style="width:2px;"> + 領域 + </th> + <th style="width:54px;"> + ID + </th> + + + <th> + 描述 + </th> + <th style="width:54px;"> + 測試 + </th> + </tr> + <tr id="UX-B1"> + <td>標準設計</td> + <td> + UX-B1 + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式遵循 <a href="{@docRoot}design/index.html">Android 設計</a>指導方針,並使用通用的 <a href="{@docRoot}design/patterns/index.html">UI 樣式與圖示</a>: + </p> + + <ol style="margin-bottom:.5em;list-style-type:lower-alpha"> + <li>應用程式不會重新定義系統圖示 (例如 [後退] 按鈕) 的預期功能。 + </li> + + <li>若應用程式觸發標準 UI 行為,不會使用完全不同的圖示取代系統圖示。 + </li> + + <li>若應用程式提供標準系統圖示的自訂版本,則該圖示會與系統圖示非常相似,並會觸發標準系統行為。 + </li> + + <li>應用程式不會重新定義或誤用 Android UI 樣式,從而避免導致圖示或行為對使用者產生誤導或混淆。 + </li> + </ol> + </td> + <td> + <a href="#core">CR-all</a> + </td> + </tr> + + <tr> + <td rowspan="3"> + 導覽 + </td> + <td id="UX-N1"> + UX-N1 + </td> + <td> + <p> + 應用程式支援標準系統<a href="{@docRoot}design/patterns/navigation.html">後退按鈕導覽</a>,不會使用螢幕上的任何自訂「後退按鈕」提示。 + </p> + </td> + <td> + <a href="#core">CR-3</a> + </td> + </tr> + + <tr> + <td id="UX-N2"> + UX-N2 + </td> + <td> + <p> + 使用 [後退] 按鈕可以關閉所有對話方塊。 + </p> + </td> + <td> + <a href="#core">CR-3</a> + </td> + </tr> + + <tr id="UX-N3"> + <td> + UX-N3 + </td> + <td> + 任何時候按下 [首頁] 按鈕都會導覽至裝置的主螢幕。 + </td> + <td> + <a href="#core">CR-1</a> + </td> + </tr> + + <tr id="UX-S1"> + <td rowspan="2"> + 通知 + </td> + <td> + UX-S1 + </td> + <td> + <p style="margin-bottom:.5em;"> + 通知遵循 Android 設計<a href="{@docRoot}design/patterns/notifications.html">指導方針</a>。尤其在以下方面更是如此: + </p> + + <ol style="margin-bottom:.5em;list-style-type:lower-alpha"> + <li>會將多個通知堆疊到單一通知物件中 (若可能)。 + </li> + + <li>只有在通知與執行中事件 (例如播放音樂或手機通話) 相關時,通知才持續存在。 + </li> + + <li>除非使用者選擇,否則通知不包含與應用程式核心功能不相關的廣告或內容。 + </li> + </ol> + </td> + <td> + <a href="#core">CR-11</a> + </td> + </tr> + + <tr id="UX-S2"> + <td> + UX-S2 + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式只能使用通知實現以下目標: + </p> + + <ol style="margin-bottom:.5em;list-style-type:lower-alpha"> + <li>指示與使用者個人相關的環境中發生的變更 (例如傳入的訊息),或 + </li> + + <li>展示與執行中事件 (例如播放音樂或手機通話) 相關的資訊/控制項。 + </li> + </ol> + </td> + <td> + <a href="#core">CR-11</a> + </td> + </tr> +</table> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/essentials/corequalityguidelines/visualdesign" +data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,6x3,6x3" +data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="fn"> + 功能 + </h2> + + +</div> + +<p> + 這些準則可確保您的應用程式以適當的權限層級提供預期的功能行為。 +</p> + +<table> + <tr> + <th style="width:2px;"> + 領域 + </th> + <th style="width:54px;"> + ID + </th> + <th> + 描述 + </th> + <th style="width:54px;"> + 測試 + </th> + </tr> + + <tr id="FN-P1"> + <td rowspan="2"> + 權限 + </td> + <td> + FN-P1 + </td> + <td> + 應用程式僅要求支援核心功能所需的<em>絕對最低</em>權限。 + </td> + <td rowspan="2"> + <a href="#core">CR-11</a> + </td> + </tr> + + <tr id="FN-P2"> + <td> + FN-P2 + </td> + <td> + <p style="margin-bottom:.5em;"> + 除非與應用程式的核心功能相關,否則應用程式不會要求能對敏感資料 (例如連絡人或系統日誌) 或需使用者付款的服務 (例如撥號程式或 SMS) 進行存取的權限。 + </p> + </td> + </tr> + + <tr id="FN-L1"> + <td> + 安裝位置 + </td> + <td> + FN-L1 + </td> + <td> + <p style="margin-bottom:.5em;"> + 若安裝在 SD 卡上 (在應用程式支援的狀況下),應用程式將正常運作。 + </p> + + <p style="margin-bottom:.25em;"> + 對於多數大型應用程式 (超過 10MB),建議支援在 SD 卡上進行安裝。如需有關哪些應用程式類型應支援在 SD 卡安裝的資訊,請參閱<a href="{@docRoot}guide/topics/data/install-location.html">應用程式安裝位置</a>開發人員指南。 + </p> + </td> + <td> + <a href="#SD-1">SD-1</a> + </td> + </tr> + + <tr id="FN-A1"> + <td rowspan="4"> + 音訊 + </td> + <td> + FN-A1 + </td> + <td> + 除非音訊是核心功能 (例如應用程式是音樂播放器),否則在螢幕關閉時不會播放該音訊。 + </td> + <td> + <a href="#core">CR-7</a> + </td> + </tr> + + <tr id="FN-A2"> + <td> + FN-A2 + </td> + <td> + 除非是核心功能,否則<a href="http://android-developers.blogspot.com/2011/11/making-android-games-that-play-nice.html">在螢幕鎖定後不會播放</a>音訊。 + </td> + <td> + <a href="#core">CR-8</a> + </td> + </tr> + + <tr id="FN-A3"> + <td> + FN-A3 + </td> + <td> + 除非是核心功能,否則在主螢幕或其他應用程式上不會播放音訊。 + </td> + <td> + <a href="#core">CR-1、<br> + CR-2</a> + </td> + </tr> + + <tr id="FN-A4"> + <td> + FN-A4 + </td> + <td> + 在應用程式回到前景,或向使用者指示播放處於暫停狀態時,音訊將恢復。 + </td> + <td> + <a href="#core">CR-1、CR-8</a> + </td> + </tr> + + <tr id="FN-U1"> + <td rowspan="3"> + UI 與圖形 + </td> + <td> + FN-U1 + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式支援橫向與直向 (若可能)。 + </p> + + <p style="margin-bottom:.25em;"> + 這兩個方向展示大部分相同的功能與動作,並具有同等功能。可以接受內容或檢視中的微小變更。 + </p> + </td> + <td> + <a href="#core">CR-5</a> + </td> + </tr> + + <tr id="FN-U2"> + <td> + FN-U2 + </td> + <td> + <p style="margin-bottom:.5em;"> + 在這兩個方向,應用程式都使用整個螢幕,不會因為顧及方向變更而採用上下黑邊式顯示。 + </p> + + <p style="margin-bottom:.25em;"> + 可以接受採用少量的上下黑邊式顯示來補償螢幕幾何圖形的微小變更。 + </p> + </td> + <td> + <a href="#core">CR-5</a> + </td> + </tr> + + <tr id="FN-U3"> + <td> + FN-U3 + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式可以正確處理兩個顯示方向之間的快速轉換,同時不出現顯示問題。 + </p> + </td> + <td> + <a href="#core">CR-5</a> + </td> + </tr> + + <tr id="FN-S1"> + <td rowspan="2"> + 使用者/應用程式狀態 + </td> + <td> + FN-S1 + </td> + <td> + <p style="margin-bottom:.5em;"> + 除非與應用程式的核心功能相關,否則在應用程式位於背景中時,應用程式不應讓任何服務仍處於執行中狀態。 + </p> + + <p style="margin-bottom:.25em;"> + 例如,應用程式不應讓服務處於執行中狀態以保持通知的網路連線、保持藍牙連線或保持 GPS 為開機狀態。 + </p> + </td> + <td> + <a href="#core">CR-6</a> + </td> + </tr> + + <tr id="FN-S2"> + <td> + FN-S2 + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式能正確保留並還原使用者或應用程式狀態。 + </p> + + <p style="margin-bottom:.25em;"> + 應用程式可以在離開前景時保留使用者或應用程式狀態,並防止因後退導覽及其他狀態變更而導致資料意外遺失。返回至前景時,應用程式必須還原所保留的狀態以及擱置的所有重要狀態交易,例如對可編輯欄位、遊戲進度、功能表、影片及應用程式或遊戲的其他部分進行的變更。 + </p> + + <ol style="margin-bottom:.25em;list-style-type:lower-alpha"> + <li>應用程式從最近應用程式切換器恢復後,可讓使用者返回至上次使用的確切狀態。 + </li> + + <li>在裝置從睡眠 (鎖定) 狀態喚醒後,應用程式恢復時,應用程式可讓使用者返回至上次使用的確切狀態。 + </li> + + <li>應用程式從 [首頁] 或 [所有應用程式] 重新啟動後,可將狀態還原為盡可能接近先前的狀態。 + </li> + + <li>按下 [後退] 後,應用程式會提供選項供使用者儲存應用程式或使用者狀態,否則在後退導覽後將遺失該狀態。 + </li> + </ol> + </td> + <td> + <a href="#core">CR-1、CR-3、CR-5</a> + </td> + </tr> +</table> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/essentials/corequalityguidelines/functionality" +data-sortorder="-timestamp" data-cardsizes="6x3" data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="ps"> + 效能與穩定性 + </h2> + + +</div> + +<p> + 這些準則可確保應用程式提供使用者預期的效能、穩定性與回應能力。 +</p> + +<table> + <tr> + <th style="width:2px;"> + 領域 + </th> + <th style="width:54px;"> + ID + </th> + <th> + 描述 + </th> + <th style="width:54px;"> + 測試 + </th> + </tr> + + <tr id="PS-S1"> + <td> + 穩定性 + </td> + <td> + PS-S1 + </td> + <td> + 在所針對的裝置上,應用程式不會當機、強制關閉、凍結或以其他異常方式運作。 + </td> + <td> + <a href="#core">CR-all</a>、<a href="#SD-1">SD-1</a>、<a href="#HA-1">HA-1</a> + </td> + </tr> + + <tr id="PS-P1"> + <td rowspan="2"> + 效能 + </td> + <td> + PS-P1 + </td> + <td> + 應用程式可快速載入,若應用程式的載入時間超過兩秒,會在螢幕上向使用者提供回饋 (進度指示器或類似的提示)。 + </td> + <td> + <a href="#core">CR-all</a>、<a href="#SD-1">SD-1</a> + </td> + </tr> + + <tr id="PS-P2"> + <td> + PS-P2 + </td> + <td> + 在啟用 StrictMode (請參閱以下的 <a href="#strictmode">StrictMode 測試</a>) 的狀況下,測試應用程式時 (包括執行遊戲、播放動畫、進行 UI 轉換以及執行應用程式的其他任何部分期間),紅色閃爍 (StrictMode 的效能警告) 不可見。 + </td> + <td> + <a href="#PM-1">PM-1</a> + </td> + </tr> + + <tr id="PS-M1"> + <td> + 媒體 + </td> + <td> + PS-M1 + </td> + <td> + 在應用程式的一般使用與載入期間,音樂與影片可以順暢播放,無雜音、卡頓或其他瑕疵。 + </td> + <td> + <a href="#core">CR-all</a>、<a href="#SD-1">SD-1</a>、<a href="#HA-1">HA-1</a> + </td> + </tr> + + <tr id="PS-V1"> + <td rowspan="2"> + 視覺品質 + </td> + <td> + PS-V1 + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式顯示圖形、文字、影像與其他 UI 元素時,無明顯的變形、模糊或像素化。 + </p> + + <ol style="margin-bottom:.5em;list-style-type:lower-alpha"> + <li>應用程式會為其針對的所有螢幕大小與大小規格 (包括<a href="{@docRoot}distribute/essentials/quality/tablet.html">諸如平板電腦等較大螢幕裝置</a>的大小規格) 提供高品質圖形。 + </li> + + <li>功能表、按鈕與其他 UI 元素的邊緣不出現任何鋸齒。 + </li> + </ol> + </td> + <td rowspan="2"> + <a href="#core">CR-all</a> + </td> + </tr> + + <tr id="PS-V2"> + <td> + PS-V2 + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式能以可接受的方式顯示文字及文字區塊。 + </p> + + <ol style="margin-bottom:.5em;list-style-type:lower-alpha"> + <li>在支援的所有大小規格 (包括諸如平板電腦等較大螢幕裝置的大小規格) 中可以接受複合。 + </li> + + <li>不出現任何遭截斷的字母或字彙。 + </li> + + <li>按鈕或圖示中不出現任何不正確的字彙換行。 + </li> + + <li>文字與周圍的元素之間存在充分的間距。 + </li> + </ol> + </td> + </tr> +</table> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/essentials/core/performance" data-sortorder="-timestamp" +data-cardsizes="6x3" data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="listing"> + Google Play + </h2> + + +</div> + +<p> + 這些準則可確保您的應用程式為在 Google Play 上發行而做好準備。 +</p> + +<table> + <tr> + <th style="width:2px;"> + 領域 + </th> + <th style="width:54px;"> + ID + </th> + <th> + 描述 + </th> + <th style="width:54px;"> + 測試 + </th> + </tr> + + <tr id="GP-P1"> + <td rowspan="2"> + 政策 + </td> + <td> + GP-P1 + </td> + <td> + 應用程式應嚴格遵循 <a href="http://play.google.com/about/developer-content-policy.html">Google Play 開發人員內容政策</a>的條款,不提供不適當的內容,不使用其他品牌的智慧財產,等等。 + </td> + <td> + <a href="#gp">GP-all</a> + </td> + </tr> + + <tr id="GP-P2"> + <td> + GP-P2 + </td> + <td> + <p style="margin-bottom:.5em;"> + 根據<a +href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=188189">內容評分指導方針</a>正確設定應用程式的成熟度層級。 + </p> + + <p style="margin-bottom:.25em;"> + 尤其請注意,若應用程式要求裝置位置的使用權限,則無法將其成熟度層級指定為「所有人」。 + </p> + </td> + <td> + <a href="#gp">GP-1</a> + </td> + </tr> + + <tr id="GP-D1"> + <td rowspan="3"> + 應用程式詳細資料頁面 + </td> + <td> + GP-D1 + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式功能圖形遵循此<a href="http://android-developers.blogspot.com/2011/10/android-market-featured-image.html">部落格貼文</a>中所述的指導方針。請確保: + </p> + + <ol style="margin-bottom:.5em;list-style-type:lower-alpha"> + <li>應用程式清單包括高品質的功能圖形。 + </li> + + <li>若裝置影像、螢幕擷取畫面或小文字在縮小比例以及在應用程式針對的最小螢幕大小上顯示時難以辨認,則功能圖形不包含這些項目。 + </li> + + <li>功能圖形與廣告不相似。 + </li> + </ol> + </td> + <td> + <a href="#gp">GP-1、GP-2</a> + </td> + </tr> + + <tr id="GP-D2"> + <td> + GP-D2 + </td> + <td> + 應用程式螢幕擷取畫面與影片不顯示或不參考非 Android 裝置。 + </td> + <td rowspan="2"> + <a href="#gp">GP-1</a> + </td> + </tr> + + <tr id="GP-D3"> + <td> + GP-D3 + </td> + <td> + 應用程式螢幕擷取畫面或影片不以會引發誤導的方式展示應用程式的內容與體驗。 + </td> + </tr> + + <tr id="GP-X1"> + <td> + 使用者支援 + </td> + <td> + GP-X1 + </td> + <td> + 若 Google Play 頁面上 [評論] 標籤中使用者報告的常見錯誤可重現並在許多不同裝置上出現,則對其進行修正。若錯誤僅出現在少數裝置上,如果這些裝置是備受青睞的裝置或新裝置,您也應修正錯誤。 + </td> + <td> + <a href="#gp">GP-1</a> + </td> + </tr> +</table> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/essentials/core/play" data-sortorder="-timestamp" +data-cardsizes="6x3,6x3,6x3,6x3,6x3,6x3" data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="test-environment"> + 設定測試環境 + </h2> + + +</div> + +<p> + 若要評估您應用程式的品質,需要設定適當的硬體或模擬器環境以進行測試。 +</p> + +<p> + 理想的測試環境包括少數實際硬體裝置 (代表關鍵的大小規格) 以及目前消費者可以使用的硬體/軟體組合。您無需在市場上的<em>每個</em>裝置上進行測試,而是應專注於少量的代表性裝置,甚至對每種大小規格測試一或兩個裝置即可。 +</p> + +<p> + 若您無法取得供測試的實際硬體裝置,應<a href="{@docRoot}tools/devices/index.html">設定模擬裝置 (AVD)</a> 以代表最常見的大小規格與硬體/軟體組合。 +</p> + +<p> + 若要不限於基本測試,您可以新增更多裝置、更多大小規格或新硬體/軟體組合至測試環境。此外,您也可以提高測試與品質準則的數量或複雜度。 +</p> + +<div class="headerLine"> + <h2 id="tests"> + 測試程序 + </h2> + + +</div> + +<p> + 這些測試程序可以協助您探尋應用程式內各種類型的品質問題。您可以合併這些測試,或將多組測試整合到您的測試計劃中。如需將特定準則與特定測試關聯的參考,請參閱以上諸節。 +</p> + +<table> + <tr> + <th style="width:2px;"> + 類型 + </th> + <th style="width:54px;"> + 測試 + </th> + <th> + 描述 + </th> + </tr> + + <tr> + <td rowspan="12" id="core"> + 核心套件 + </td> + <td> + CR-0 + </td> + <td> + <p style="margin-bottom:.5em;"> + 導覽至應用程式的所有部分 (所有畫面、對話方塊、設定及所有使用者流程)。 + </p> + + <ol style="margin-bottom:.5em;list-style-type:lower-alpha"> + <li>若應用程式涉及編輯或建立內容、執行遊戲或媒體播放,請確保進入這些流程以建立或修改內容。 + </li> + + <li>在測試應用程式時,請引入網路連線、電池功能、GPS 或位置可用性、系統負載等的短暫變更。 + </li> + </ol> + </td> + </tr> + + <tr id="tg2"> + <td id="core2"> + CR-1 + </td> + <td> + 在每個應用程式畫面中,按下裝置的 [首頁] 鍵,然後從 [所有應用程式] 畫面重新啟動應用程式。 + </td> + </tr> + + <tr id="CR-2"> + <td> + CR-2 + </td> + <td> + 在每個應用程式畫面中,切換至其他執行中應用程式,然後使用最近應用程式切換器返回受測試的應用程式。 + </td> + </tr> + + <tr id="CR-3"> + <td> + CR-3 + </td> + <td> + 在每個應用程式畫面 (及對話方塊) 中,按下 [後退] 按鈕。 + </td> + </tr> + + <tr id="CR-5"> + <td> + CR-5 + </td> + <td> + 在每個應用程式畫面中,旋轉裝置,使其在橫向與直向之間至少切換三次。 + </td> + </tr> + + <tr id="CR-6"> + <td> + CR-6 + </td> + <td> + 切換至其他應用程式,以便將受測試的應用程式置於背景中。移至 [設定],檢查在受測試應用程式位於背景中時,是否有服務在執行中。在 Android 4.0 及更高版本中,移至 [應用程式] 畫面,然後在 [執行中] 標籤內尋找應用程式。在更低的版本中,使用「管理應用程式」檢查執行中的服務。 + </td> + </tr> + + <tr id="CR-7"> + <td> + CR-7 + </td> + <td> + 按下電源按鈕讓裝置進入睡眠狀態,然後再次按下電源按鈕喚醒螢幕。 + </td> + </tr> + + <tr id="CR-8"> + <td> + CR-8 + </td> + <td> + 將裝置設為按下電源按鈕時進入鎖定狀態。按下電源按鈕讓裝置進入睡眠狀態,然後再次按下電源按鈕喚醒螢幕,隨後將裝置解除鎖定。 + </td> + </tr> + + <tr id="CR-9"> + <!-- Hardware features --> + + <td> + CR-9 + </td> + <td> + 對於具有滑出式鍵盤的裝置,將鍵盤滑出並滑入至少一次。對於具有鍵盤基座的裝置,將裝置連接至鍵盤基座。 + </td> + </tr> + + <tr id="CR-10"> + <td> + CR-10 + </td> + <td> + 對於具有外部顯示連接埠的裝置,插入外部顯示器。 + </td> + </tr> + + <tr id="CR-11"> + <td> + CR-11 + </td> + <td> + 在通知抽出式導覽面板中觸發並觀察應用程式能顯示的所有類型的通知。在適用時展開通知 (Android 4.1 與更高版本),並點選提供的所有動作。 + </td> + </tr> + + <tr id="CR-12"> + <td> + CR-12 + </td> + <td> + 移至 [設定] > [應用程式資訊] 檢查應用程式要求的權限。 + </td> + </tr> + + <tr id="tg3"> + <td> + 在 SD 卡上安裝 + </td> + <td> + SD-1 + </td> + <td> + <p style="margin-bottom:.5em;"> + 將應用程式安裝到<a href="{@docRoot}guide/topics/data/install-location.html">裝置 SD 卡</a>後,重複<em>核心套件</em> (若應用程式支援)。 + </p> + + <p style="margin-bottom:.25em;"> + 若要將應用程式移至 SD 卡,您可以使用 [設定] > [應用程式資訊] > [移至 SD 卡]。 + </p> + </td> + </tr> + + <tr id="tg32"> + <td> + 硬體加速 + </td> + <td> + HA-1 + </td> + <td> + <p style="margin-bottom:.5em;"> + 啟用硬體加速後,重複<em>核心套件</em>。 + </p> + + <p style="margin-bottom:.25em;"> + 若要強制啟用硬體加速 (在裝置支援的狀況下),請在應用程式宣示說明中新增 <code>hardware-accelerated="true"</code> 至 <code><application></code>,然後重新編譯。 + </p> + </td> + </tr> + + <tr id="tg33"> + <td> + 效能監控 + </td> + <td> + PM-1 + </td> + <td> + <p style="margin-bottom:.5em;"> + 在啟用 StrictMode 分析後重複<em>核心套件</em>,<a href="#strictmode">如下所述</a>。 + </p> + + <p style="margin-bottom:.25em;"> + 密切注意記憶體回收及其對使用者體驗的影響。 + </p> + </td> + </tr> + + <tr id="gp"> + <td rowspan="3"> + Google Play + </td> + <td> + GP-1 + </td> + <td> + 登入至 <a href="https://play.google.com/apps/publish/">Developer Console</a> 以檢閱您的開發人員簡介、應用程式描述、螢幕擷取畫面、功能圖形、成熟度設定及使用者回饋。 + </td> + </tr> + + <tr id="GP-2"> + <td> + GP-2 + </td> + <td> + 下載您的功能圖形與螢幕擷取畫面,然後將其縮小,以便與裝置上的顯示器大小以及您所針對的大小規格相符。 + </td> + </tr> + + <tr id="GP-3"> + <td> + GP-3 + </td> + <td> + 檢閱所有圖形資產、媒體、文字、程式碼資源庫,以及應用程式中封裝的其他內容,或擴充檔案下載。 + </td> + </tr> + + <tr id="GP-4"> + <td> + 付款 + </td> + <td> + GP-4 + </td> + <td> + 導覽至您應用程式中的所有畫面,然後進入所有應用程式內購買流程。 + </td> + </tr> +</table> + +<h3 id="strictmode"> + 使用 StrictMode 進行測試 +</h3> + +<p> + 對於效能測試,我們建議在您的應用程式中啟用 {@link android.os.StrictMode},並將其用於擷取主執行緒與其他執行緒上影響效能、網路存取、檔案讀取/寫入等項目的操作。 +</p> + +<p> + 您可以使用 {@link android.os.StrictMode.ThreadPolicy.Builder} 針對執行緒設定監控政策,並使用在 <code>ThreadPolicy</code> 中{@link android.os.StrictMode.ThreadPolicy.Builder#detectAll()}啟用支援的所有監控。 +</p> + +<p> + 請確保使用{@link android.os.StrictMode.ThreadPolicy.Builder#penaltyFlashScreen() penaltyFlashScreen()}針對 <code>ThreadPolicy</code> 啟用政策違犯的<strong>視覺通知</strong>。 +</p>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/tablets.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/tablets.jd new file mode 100644 index 0000000..3c16f9d --- /dev/null +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/tablets.jd @@ -0,0 +1,623 @@ +page.title=平板電腦應用程式品質 +page.metaDescription=安裝 Android 產品的平板電腦不斷增多,由此為您的應用程式帶來新的商機。 +page.image=/distribute/images/tablet-guidelines-color.jpg +Xnonavpage=true + +@jd:body + +<div id="qv-wrapper"><div id="qv"> +<h2>檢查清單</h2> +<ol> +<li><a href="#core-app-quality">1.測試基本平板電腦應用程式品質</a></li> +<li><a href="#optimize-layouts">2.最佳化版面配置</a></li> +<li><a href="#use-extra-space">3.使用更大的螢幕區域</a></li> +<li><a href="#use-tablet-icons">4.使用專為平板電腦設計的資產</a></li> +<li><a href="#adjust-font-sizes">5.調整字型與輕觸目標</a></li> +<li><a href="#adjust-widgets">6.調整主螢幕小工具</a></li> +<li><a href="#offer-full-feature-set">7.提供完備功能集</a></li> +<li><a href="#android-versions">8.正確針對 Android 版本</a></li> +<li><a href="#hardware-requirements">9.正確宣告相依性</a></li> +<li><a href="#support-screens">10.宣告對平板電腦螢幕的支援</a></li> +<li><a href="#google-play">11.展示您的平板電腦 UI</a></li> +<li><a href="#google-play-best-practices">12.遵循在 Google Play 中發行的最佳做法</a></li> + +</ol> +<h2>測試</h2> +<ol> +<li><a href="#test-environment">設定測試環境</a></li> +</ol> +</div></div> + +<div class="todp-right-float" style="padding-right:0;margin-bottom:1em;"> + <img src="{@docRoot}distribute/images/tablet-guidelines-color.jpg" style="width:480px;"> +</div> + +<p> + 安裝 Android 產品的平板電腦不斷增多,由此為<a href="{@docRoot}distribute/stories/tablets.html">使用者的參與及盈利</a>帶來新的機遇。本文件所述的指導方針將協助您透過引人注目的功能與良好設計的直覺式 UI,符合平板電腦使用者的預期。 +</p> + +<p> + 雖然這些指導方針已編號,但是您能以任何順序對其進行了解。對於您應用程式適用的每項指導方針,您都應了解其建議,而為了向客戶提供最優產品,您應盡可能遵循這些建議。 +</p> + +<p> + 本文件會經常提供資源連結,以協助您了解內含的每項建議。 +</p> + +<div class="headerLine"><h2 id="core-app-quality">1.測試基本平板電腦應用程式品質</h2></div> + +<p>提供平板電腦應用程式絕佳體驗的第一步,是確保其符合應用程式所針對所有裝置及尺寸規格的<em>核心應用程式品質準則</em>。如需完備資訊,請參閱<a href="{@docRoot}distribute/essentials/quality/core.html">核心應用程式品質指導方針</a>。 +</p> + +<p> +此外,在發行之前,請確保您的應用程式已通過基本技術檢查並符合推出條件,例如: +</p> + +<ul> + <li><a href="#android-versions">以相應的 Android 版本為目標</a></li> + <li><a href="#hardware-requirements">正確指定硬體相依性</a></li> + <li><a href="#support-screens">宣告對相應螢幕的支援</a></li> + <li><a href="#use-extra-space">使用提供的所有螢幕空間</a></li> + <li><a href="#google-play">將螢幕擷取畫面上傳至 Google Play</a></li> +</ul> + +<p>若已將應用程式上傳至 Google Play Developer Console,您可以造訪<a href="#google-play-optimization-tips">最佳化秘訣頁面</a>查看對應用程式執行檢查的結果。</p> + + +<div class="headerLine"> +<h2 id="optimize-layouts">2.針對較大的螢幕最佳化版面配置</h2></div> + +<p> + 藉由 Android,可以輕鬆開發針對諸多裝置螢幕大小與尺寸規格都能良好運作的應用程式。這一普遍相容性對您非常有利,因為您可以將其協助設計的單一應用程式廣泛散佈到針對的所有裝置上。但是,若要為每個螢幕組態 (尤其是平板電腦) 的使用者提供最佳體驗,對於每個所針對的螢幕組態,您需要最佳化版面配置及其他 UI 元件。在平板電腦上,透過最佳化 UI,可以充分利用提供的更大螢幕實現諸多目標,例如提供新功能、展示新內容或以其他方式改善體驗,以提高對使用者的吸引力。 +</p> + +<p> + 若您已開發適用於手機的應用程式,現在希望將其散佈到平板電腦上,可以先對版面配置、字型及間距進行微小調整。在某些狀況下 (例如對於 7 英寸平板電腦或畫布很大的遊戲),只需執行這些調整,應用程式即可擁有良好的外觀。在其他狀況下 (例如對於更大的平板電腦),您可以重新設計 UI 部分,使用高效的多窗格 UI、更輕鬆的導覽及其他內容取代「延伸的 UI」。 +</p> + + +<div style="width:500px;margin:1.5em;margin-top:-16px;"> +<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-bad.png" style="padding:4px;margin-bottom:0em;"> +<p class="img-caption"><span +style="font-weight:500;">去除「延伸」的 UI</span>:在平板電腦上,單一窗格版面配置會產生很難處理的空白,並導致行過長。請使用邊框間距縮短 UI 元素的寬度,並考慮使用多窗格版面配置。</p> +</div> + +<p>以下提供一些建議:</p> + + +<ul> + <li>視需要為 <code>large</code> 與 <code>xlarge</code> 螢幕提供自訂版面配置。此外,您還可以提供根據螢幕的<a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">最短維度</a>或<a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">可用的最小寬度與高度</a>而載入的版面配置。 + </li> + + <li>對於較大的螢幕,請至少自訂諸如字型大小、邊界、間距等維度,以改善空間使用狀況與內容可讀性。 + </li> + + <li>請調整 UI 控制項的位置,以便使用者在手持平板電腦時能輕鬆存取,例如平板電腦方向為橫向時,將 UI 控制項的位置向兩邊調整。 + </li> + + <li>平板電腦上 UI 元素的邊框間距通常應大於手機上的該間距。建議使用<a href="{@docRoot}design/style/metrics-grids.html#48dp-rhythm"> 48dp 節奏</a> (與 16dp 網格)。 + </li> + + <li>充分填補文字內容,使其並非恰好沿螢幕邊緣對齊。在螢幕邊緣附近的內容周圍使用至少為 <code>16dp</code> 的邊框間距。 + </li> +</ul> + +<p>尤其是確保您的版面配置在螢幕上不會顯示為「延伸」狀態:</p> + +<ul> +<li>文字行不應過長,應最佳化為每行最多 100 個字元,每行字元數介於 50 與 75 之間時可取得最佳效果。</li> +<li>ListView 與功能表不應使用全螢幕寬度。</li> +<li>請使用邊框間距來管理螢幕上元素的寬度,或切換至平板電腦的多窗格 UI (請參閱下一節)。</li> +</ul> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" + data-query="collection:distribute/essentials/tabletguidelines/optimize" + data-sortOrder="-timestamp" + data-cardSizes="6x3" + data-maxResults="6"></div> + + +<div class="headerLine"><h2 id="use-extra-space">3.利用更大的螢幕區域</h2></div> + +<div style="width:340px;float:right;margin:1.5em;margin-bottom:0;margin-top:0;"> +<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-good.png" style="padding:4px;margin-bottom:0em;"> +<p class="img-caption"><span +style="font-weight:500;">多窗格版面配置</span> 會在平板電腦螢幕上產生更佳的視覺平衡,同時提供更高的可用性與可讀性。</p> +</div> + +<p>平板電腦螢幕能為您的應用程式提供大得多的螢幕顯示空間,尤其在平板電腦方向為橫向時,更是如此。特別是 10 英寸的平板電腦,能提供大幅擴展的區域,而即使是 7 英寸的平板電腦也能提供較大的空間,供您顯示內容並吸引使用者。 </p> + +<p>考慮平板電腦上所執行應用程式的 UI 時,請確保 UI 完全利用平板電腦上所提供的更大螢幕區域。以下提供一些建議:</p> + +<ul> +<li>請尋求機會納入其他內容,或對既有內容使用其他處理方式。</li> +<li>在平板電腦螢幕上使用<a href="{@docRoot}design/patterns/multi-pane-layouts.html">多窗格版面配置</a>,以便將多個單一檢視合併為複合檢視。藉此,您可以更高效地使用更大的螢幕區域,並降低使用者導覽應用程式的難度。 </li> +<li>請對螢幕方向變更時,複合檢視中面板的重新排列狀況進行規劃。</li> + +<div style="width:490px;margin:1.5em auto 1.5em 0;"> +<div style=""> +<img src="{@docRoot}images/home/wear-wordmark.png"> <img src="{@docRoot}images/home/wear.png"> +<p class="image-caption" +style="padding:.5em"><span +style="font-weight:500;">複合檢視</span> 可將手機 UI 的多個單一檢視 <em>(上圖)</em> 合併為平板電腦更豐富、更高效的 UI <em>(下圖)</em>。 </p> +</div> +</div> + +<li>將單一螢幕實作為 {@link android.app.Activity} 子類別時,請考慮將個別內容面板實作為{@link android.app.Fragment}子類別。您可藉此在不同的大小規格與共用內容的螢幕之間最大限度重複使用程式碼。</li> +<li>請決定使用多窗格 UI 的螢幕大小,然後在相應的螢幕大小貯體中提供不同的版面配置 (諸如 <code>large</code>/<code>xlarge</code>) 或最小螢幕寬度 (諸如 <code>sw600dp</code>/<code>sw720</code>)。</li> +</ul> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" + data-query="collection:distribute/essentials/tabletguidelines/extrascreen" + data-sortOrder="-timestamp" + data-cardSizes="6x3,6x3,6x3" + data-maxResults="6"></div> + +<div class="headerLine"><h2 id="use-tablet-icons">4.使用專為平板電腦螢幕設計的資產</h2></div> + +<div><img src="{@docRoot}design/media/devices_displays_density@2x.png"></div> + +<p>若要確保您的應用程式具有最佳的外觀,請為平板電腦通常所支援範圍中的每個密度提供圖示與其他點陣圖資產。具體而言,您應根據<a href="{@docRoot}design/style/iconography.html">圖表</a>指導方針來設計動作列、通知與啟動器的圖示,並在多個密度中提供這些圖示,以便其以適當的大小顯示在所有螢幕上 (沒有模糊或其他顯像偽差)。</p> + +<p class="table-caption"><strong>表格 1.</strong>圖示類型的原始資產大小。<table> +<tr> +<th>密度</th> +<th>啟動器</th> +<th>動作列</th> +<th>小型/內容關聯式</th> +<th>通知</th> +</tr> +<tr> +<td><code>mdpi</code></td> +<td>48x48 px</td> +<td>32x32 px</td> +<td>16x16 px</td> +<td>24x24 px</td> +</tr> +<tr> +<td><code>hdpi</code></td> +<td>72x72 px</td> +<td>48x48 px</td> +<td>24x24 px</td> +<td>36x36 px</td> +</tr> +<tr> +<td><code>tvdpi</code></td> +<td><em>(使用 hdpi)</em></td> +<td><em>(使用 hdpi)</em></td> +<td><em>(使用 hdpi)</em></td> +<td><em>(使用 hdpi)</em></td> +</tr> +<tr> +<td><code>xhdpi</code></td> +<td>96x96 px</td> +<td>64x64 px</td> +<td>32x32 px</td> +<td>48x48 px</td> +</tr> +<tr> +<td><code>xxhdpi</code></td> +<td>144x144 px</td> +<td>96x96 px</td> +<td>48x48 px</td> +<td>72x72 px</td> +</tr> + +</table> + +<p> + 請至少提供每個圖示與點陣圖資產的一個版本 (已針對以下<strong>至少一個</strong>常用平板電腦螢幕密度進行最佳化): +</p> +<ul> + <li><code>hdpi</code></li> + <li><code>xhdpi</code></li> + <li><code>xxhdpi</code></li> +</ul> + +<p>其他秘訣:</p> + +<ul> +<li>在設計圖示時,請使用向量形狀,以便在縮放時不會遺失詳細資料或邊緣捲曲。</li> +<li>使用密度特定的<a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">資源限定詞</a>以確保為每個螢幕密度載入正確的圖示。</li> +<li>對於平板電腦與其他大螢幕裝置要求的啟動器圖示,其密度大小通常大於裝置的實際密度,因此您應提供最高密度的啟動器圖示。例如,若平板電腦使用 {@code xhdpi} 螢幕,將要求 {@code xxhdpi} 版本的啟動器圖示。</li> +</ul> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" + data-query="collection:distribute/essentials/tabletguidelines/assets" + data-sortOrder="-timestamp" + data-cardSizes="9x3" + data-maxResults="6"></div> + +<div class="headerLine"><h2 id="adjust-font-sizes">5.調整字型大小與輕觸目標</h2></div> + +<p>若要確保您的應用程式在平板電腦上易於使用,請花一些時間對您針對的所有螢幕組態,調整平板電腦 UI 的字型大小與輕觸目標。您可以透過<a href="{@docRoot}guide/topics/ui/themes.html">風格化屬性</a>或<a href="{@docRoot}guide/topics/resources/more-resources.html#Dimension">維度資源</a>來調整字型大小,透過版面配置與點陣圖可繪項目來調整輕觸目標,如上所述。 </p> + +<p>以下提供一些考慮事項:</p> +<ul> +<li>對於平板電腦螢幕的各種大小與密度,文字不應過大或過小。請確保針對標籤所對應的 UI 元素適當調整標籤大小,並確保標籤、標題與其他元素中沒有不適當的換行。</li> +<li>對於螢幕上的元素,建議採用的輕觸目標大小是 48dp (至少為 32dp),可能需要在平板電腦 UI 中進行某些調整。請閱讀<a href="{@docRoot}design/style/metrics-grids.html">計量與網格</a>了解實作策略,以便為大多數使用者提供協助。若要因應特定使用者的協助工具需求,可能需要使用更大的輕觸目標。 </li> +<li>若可能,對於較小的圖示,請使用 {@link android.view.TouchDelegate} 將可觸區域擴大至 48dp 以上,或只是將圖示置於透明按鈕的中央。</li> +</ul> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" + data-query="collection:distribute/essentials/tabletguidelines/fonts" + data-sortOrder="-timestamp" + data-cardSizes="9x3,9x3,6x3,6x3,6x3" + data-maxResults="6"></div> + +<div class="headerLine"><h2 id="adjust-widgets">6.調整主螢幕小工具的大小</h2></div> + +<p>若您的應用程式包括主螢幕小工具,請考慮以下幾點,以確保平板電腦螢幕為使用者提供絕佳的體驗: </p> + +<ul> +<li>針對平板電腦螢幕適當設定小工具的預設高度與寬度,以及重新調整高度及寬度的最大值與最小值。 +</li> +<li>應將小工具的大小重新調整為至少 420dp,以涵蓋至少 5 個主螢幕列 (若是垂直或方形小工具) 或欄 (若是水平或方形小工具)。 </li> +<li>確保 9 貼片影像能正確顯示。</li> +<li>使用預設系統邊界。</li> +<li>若可能,請將應用程式的 <code>targetSdkVersion</code> 設為至少是 14。</li> +</ul> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" + data-query="collection:distribute/essentials/tabletguidelines/widgets" + data-sortOrder="-timestamp" + data-cardSizes="6x3" + data-maxResults="6"></div> + + +<div class="headerLine"><h2 id="offer-full-feature-set">7.為平板電腦使用者提供完備功能集</h2></div> + +<div class="centered-full-image" style="width:600px;margin:1.5em"><img src="{@docRoot}images/gp-tablets-full-feature-set.png" alt="Tablet feature sets"></div> + +<p>請讓您的平板電腦使用者體驗應用程式的最佳功能。以下提供一些建議:</p> + +<ul> + <li>將應用程式設計為在平板電腦上至少提供在電話上提供的一組功能。 + </li> + + <li>在特殊狀況下,若多數平板電腦的硬體或使用狀況不支援某些功能,您的應用程式在平板電腦上可以略去或替換這些功能。範例: <ul> + <li>若手機使用電話語音功能,但目前平板電腦上不提供電話語音功能,您可以略去或替換相關功能。 + </li> + + <li>許多平板電腦具有 GPS 感應器,但是多數使用者在駕車時通常不會攜帶平板電腦。若使用者藉由您電話應用程式提供的功能,可以在攜帶電話時記錄其駕車的 GPS 路線,則應用程式不需要在平板電腦上提供該功能,因為該使用狀況不具備吸引力。 + </li> + </ul> + </li> + + <li>若您要略去平板電腦 UI 的某項功能,請確保使用者無法存取該功能,或確保為替換功能提供「優雅降級」(另請參閱以下有關硬體功能的一節)。 + </li> +</ul> + +<div class="headerLine"><h2 id="android-versions">8.正確針對 Android 版本</h2></div> + +<p> + 若要確保散佈到可能最廣泛的平板電腦,請確保您的應用程式正確針對支援平板電腦的 Android 版本。<a href="{@docRoot}about/versions/android-3.0.html">Android 3.0</a> (API 層級為 11) 中已新增對平板電腦的初始支援。<a href="{@docRoot}about/versions/android-4.0.html">Android 4.0</a> 中已引入對平板電腦、電話及其他裝置的統一 UI 架構支援。 +</p> + +<p> + 您可以在宣示說明檔案中的 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code><uses-sdk></code></a> 元素內設定應用程式所針對 Android 版本的範圍。在多數狀況下,您可以將元素的 <code>targetSdkVersion</code> 屬性設為可用的最高 API 層級,從而正確針對 Android 版本。 +</p> + +<p style="margin-bottom:.5em;"> + 請至少對 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code><uses-sdk></code></a> 元素進行檢查,以確保: +</p> + +<ol style="list-style-type:lower-alpha;margin-top:0em;"> + <li> + 所宣告 <code>targetSdkVersion</code> 的值至少為 11 (建議至少為 14),或 + </li> + + <li> + 所宣告 <code>minSdkVersion</code> 的值至少為 11。 + </li> + + <li>若宣告 <code>maxSdkVersion</code> 屬性,其值必須至少為 11。請注意,一般<em>不建議</em>使用 <code>maxSdkVersion</code>。 + </li> +</ol> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" + data-query="collection:distribute/essentials/tabletguidelines/versions" + data-sortOrder="-timestamp" + data-cardSizes="6x3" + data-maxResults="6"></div> + +<div class="headerLine"><h2 id="hardware-requirements">9.正確宣告硬體功能相依性</h2></div> + +<p> + 手機與平板電腦為感應器、相機、電話語音及其他功能提供的硬體支援通常稍有不同。例如,許多平板電腦可使用「Wi-Fi」組態,但該組態不包括電話語音支援。 +</p> + +<p> + 為了能將單一 APK 廣泛散佈到您電話與平板電腦的整個客戶群,請確保您的應用程式不會宣告需要平板電腦上通常不提供的硬體功能。您應改為在應用程式的宣示說明中將這些硬體功能正確宣告為<em>不需要</em>,如下所述。 +</p> + +<ul> +<li>在您的應用程式宣示說明中,尋找 <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code><uses-feature></code></a> 元素。尤其是尋找可能無法用於某些平板電腦的硬體功能,例如: <ul> +<li><code>android.hardware.telephony</code></li> +<li><code>android.hardware.camera</code> (請參閱後部相機),或</li> +<li><code>android.hardware.camera.front</code></li> +</ul></li> + +<li>透過納入 <code>android:required=”false”</code> 屬性,將 <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code><uses-feature></code></a> 元素宣告為<em>不需要</em>。 <p> + 例如,以下提供了 <code>android.hardware.telephony</code> 相依性的正確宣告方式,您藉此仍可以廣泛散佈應用程式,即使對於不提供電話語音功能的裝置,也是如此: +</p> + +<pre><uses-feature android:name="android.hardware.telephony" android:required="false" /></pre></li> + +<li>與此類似,請檢查宣示說明中是否存在表示對不適用於平板電腦的硬體功能有需求的 <a href="{@docRoot}guide/topics/manifest/permission-element.html"><a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions"><code><permission></code></a></a> 元素。若您發現此類許可,請確保明確宣告這些功能的對應 <code><uses-feature></code> 元素,並納入 <code>android:required=”false”</code> 屬性。</li> +</ul> + + +<p> + 將硬體功能宣告為<em>不需要</em>後,請確保在多種裝置上測試您的應用程式。應用程式在其使用的硬體功能無法提供時應正常運作,若合適,應提供「優雅降級」與替代功能。 +</p> + +<p> + 例如,若應用程式通常使用 GPS 來設定位置,但是裝置上不支援 GPS,則應用程式可以讓使用者改為手動設定位置。應用程式可以在執行階段檢查裝置硬體功能,並視需要進行處理。 +</p> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" + data-query="collection:distribute/essentials/tabletguidelines/hardware" + data-sortOrder="-timestamp" + data-cardSizes="9x3" + data-maxResults="6"></div> + +<div class="headerLine"><h2 id="support-screens">10.宣告對平板電腦螢幕的支援</h2></div> + +<p>若要確保可以將您的應用程式散佈到多種平板電腦,您的應用程式應在宣示說明檔案中宣告對多種平板電腦螢幕大小的支援,如下所示:</p> + +<ul> + <li>若已宣告 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code><supports-screens></code></a> 元素,則該元素不得指定 <code>android:largeScreens="false"</code> 或 <code>android:xlargeScreens="false"</code>。</li> + <li>對於所針對的 <code>minSdkVersion</code> 值小於 13 的應用程式,必須宣告 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code><supports-screens></code></a> 元素與 <code>android:largeScreens="true"</code> 及 <code>android:xlargeScreens="true"</code>。</li> +</ul> + +<p>若應用程式在宣示說明中宣告<a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html"><code><compatible-screens></code></a>元素,則該元素應包括對應用程式所支援<em>平板電腦螢幕的所有大小與密度的組合</em>進行指定的屬性。請注意,若可能,應避免在應用程式中使用<a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html"><code><compatible-screens></code></a>元素。</p> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" + data-query="collection:distribute/essentials/tabletguidelines/tabletscreens" + data-sortOrder="-timestamp" + data-cardSizes="9x3,6x3,6x3" + data-maxResults="6"></div> + + +<div class="headerLine"><h2 id="google-play">11.在 Google Play 中展示您的平板電腦 UI</h2></div> + +<p> + 在執行工作為平板電腦應用程式建立豐富的最佳化 UI 後,請確保讓您的客戶了解這些 UI!以下展示了在 Google Play 上將您的平板電腦應用程式向使用者推廣的一些重要方式。 +</p> + +<div><img class="border-img" src="{@docRoot}images/gp-tablet-quality-4.jpg"></div> + + +<h4> + 上傳您平板電腦 UI 的螢幕擷取畫面 +</h4> + +<p> + 平板電腦使用者希望了解您的應用程式在平板電腦裝置上 (而非在電話上) 的狀況。若您已開發平板電腦應用程式,請確保將平板電腦應用程式 UI 的螢幕擷取畫面上傳至 Google Play Developer Console。以下提供一些指導方針: + </p> + +<ul style="margin-top:0;"> + <li>請顯示您應用程式的核心功能,而非啟動或登入頁面。對於使用者花費大部分時間了解的環節,您應使用螢幕擷取畫面予以展示。 + </li> + + <li>請新增在 7 英寸與 10 英寸平板電腦上拍攝的螢幕擷取畫面。 + </li> + + <li>若可能,請新增拍攝的橫向與直向螢幕擷取畫面。 + </li> + + <li>若可能,請使用螢幕擷取功能。避免在您的螢幕擷取畫面中顯示 實際的裝置硬體。</li> + + <li>在每個方向,建議的平板電腦螢幕擷取畫面解析度為至少 <strong>1280 x 720</strong>。 + </li> + + <li>對於 7 英寸平板電腦,請上傳平板電腦 UI 的 8 個螢幕擷取畫面;對於 10 英寸平板電腦,請上傳其他 8 個螢幕擷取畫面。 + </li> +</ul> + +<h4> + 更新應用程式的描述與版本資訊 +</h4> + +<ul> + <li>在您的應用程式描述中,請確保著重說明您的應用程式能為平板電腦使用者提供平板電腦最佳化 UI 與卓越的功能。請新增某些詳細資料,以說明您的平板電腦應用程式 UI 的運作方式,以及使用者喜歡該 UI 的原因所在。 + </li> + + <li>請在應用程式的版本資訊與更新資訊中納入平板電腦支援的有關資訊。 + </li> +</ul> + +<h4> + 更新您的推廣影片 +</h4> + +<p> + 許多使用者會觀看應用程式的推廣影片,以了解應用程式的狀況以及使用者是否喜歡該應用程式。對於平板電腦使用者,請在推廣影片中著重說明您應用程式的平板電腦 UI,以充分利用這一興趣。以下提供一些秘訣與指導方針: +</p> + +<ul> + <li>新增平板電腦上所執行應用程式的一或多個螢幕擷取畫面。若要以最有效的方式吸引平板電腦使用者,建議您以與電話 UI 大致相等的比例,推廣平板電腦 UI。 + </li> + + <li>請在影片中儘早顯示平板電腦 UI。不要指望平板電腦使用者在了解電話 UI 的功能介紹時會耐心等候。最理想的狀況是,您應在前 10 秒內 (或至少在介紹電話 UI 時) 展示平板電腦 UI,以立即吸引使用者。 + </li> + + <li>若要清晰說明您正在展示平板電腦 UI,請將手持平板電腦裝置上所執行應用程式的螢幕擷取畫面包含在內。 + </li> + + <li>在影片的記述或畫外音中,請著重說明應用程式的平板電腦 UI。 + </li> +</ul> + +<h4> + 在推廣活動中介紹您的平板電腦 UI +</h4> + +<p> + 請確保透過推廣活動、網站、社交貼文、廣告及其他方式,讓平板電腦使用者了解您的平板電腦 UI。以下提供一些建議: +</p> + +<ul> + <li>規劃行銷或廣告活動,以著重說明在平板電腦上使用您的應用程式。</li> + + <li>在推廣活動中展示平板電腦應用程式的最佳特性,使用 <a href="{@docRoot}distribute/tools/promote/device-art.html">Device Art Generator</a> 可快速產生 7 英寸或 10 英寸平板電腦上所執行應用程式的高品質推廣影像,視您的選擇而定,可以具有或不具有陰影及螢幕眩光。這與擷取、拖曳及釋放一樣簡單。 + </li> + + <li>請在您的線上推廣中納入 Google Play 徽章,以便使用者藉此可以直接連結至您應用程式的市集清單。使用 <a href="{@docRoot}distribute/tools/promote/badges.html">Badge Generator</a>,您可以產生多種語言的徽章。 + </li> +</ul> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" + data-query="collection:distribute/essentials/tabletguidelines/showcase" + data-sortOrder="-timestamp" + data-cardSizes="9x3,9x3,9x3,9x3" + data-maxResults="6"></div> + +<div class="headerLine"> + <h2 id="google-play-best-practices"> + 12.遵循在 Google Play 中發行的最佳做法 + </h2> + + +</div> + +<p> + 以下展示了在 Google Play 上提供成功的平板電腦應用程式所採用的一些最佳做法。 +</p> + +<div> + <img class="border-img" src="{@docRoot}images/gp-tablet-quality-5.jpg" style="1px solid #ddd"> +</div> + +<h4 id="google-play-optimization-tips"> + 檢查您應用程式的最佳化秘訣 +</h4> + +<p>Google Play Developer Console 現在提供 [最佳化秘訣] 頁面,您可藉此根據平板電腦應用程式散佈與品質的基本指導方針,快速檢查應用程式的運作狀況。若要造訪該頁面,請登入 Developer Console,從 [所有應用程式] 載入應用程式,然後按一下左側導覽列中的 [最佳化秘訣]。</p> + +<div class="sidebox-wrapper"> +<div class="sidebox"> +<h2>如何傳送回饋</h2> + +<p>請使用以下連結傳送回饋或要求手動檢閱您的最佳化秘訣。</p> + +<p>請確保先閱讀平板電腦應用程式品質指導方針的相關各節,然後傳送回饋。</p> + +<p><strong><a href="https://support.google.com/googleplay/android-developer/contact/tabletq" target="_googleplay" style="white-space:nowrap">專為平板電腦而設計的連絡人表單»</a></strong></p> +</div> +</div> + +<p>Developer Console 會執行一系列檢查以驗證基本的品質準則,藉此建立您應用程式的 [最佳化秘訣] 頁面。若發現存在問題,會在 [最佳化秘訣] 頁面中以「待處理」項目的形式向您提出警示。</p> + +<p>若您已為應用程式開發平板電腦體驗,請確保造訪 [最佳化秘訣] 頁面,以根據基本檢查查看您應用程式的運作狀況。若列出問題,建議您先解決應用程式中的這些問題,然後上傳新的二進位檔案以供散佈 (若需要)。 </p> + +<p>對於 [最佳化秘訣] 頁面中列示的「待處理」問題,若您覺得不適用於您的應用程式或會影響在平板電腦上的品質,請使用<a href="https://support.google.com/googleplay/android-developer/contact/tabletq" target="_googleplay" style="white-space:nowrap">專為平板電腦而設計的連絡人表單»</a>通知我們。我們會檢閱您的應用程式,並視需要更新您的 [最佳化秘訣] 頁面。</p> + + +<h4>確認應用程式的篩選</h4> + +<p> + 將應用程式上傳至 <a href="https://play.google.com/apps/publish/">Developer Console</a> 後,請檢查 APK 的支援裝置清單,以確保您希望針對的平板電腦裝置中未篩除該應用程式。 +</p> + +<h4>以單一 APK 的形式散佈</h4> + +<p> + 建議您針對所有螢幕大小 (電話與平板電腦) 以單一 APK 的形式 (使用單一 Google Play 清單) 發行應用程式。此方法具有多項重要優點。 +</p> + +<ul style="margin-top:.25em;"> + <li>使用者可以更輕鬆地透過搜尋、瀏覽或推廣找到您的應用程式 + </li> + + <li>使用者取得新裝置時,可以更輕鬆地自動還原您的應用程式。 + </li> + + <li>將合併所有裝置中您的評分與下載統計資料。 + </li> + + <li>在另一個清單中發行平板電腦應用程式會降低對您品牌的評分。 + </li> +</ul> + +<p> + 雖然在多數狀況下,強烈建議您使用單一 APK 連絡所有裝置,但是若需要,您也可以改為選擇使用<a href="{@docRoot}google/play/publishing/multiple-apks.html">多 APK 支援</a>提供應用程式。 +</p> + +<h3 class="rel-resources clearfloat">相關資源</h3> +<div class="resource-widget resource-flow-layout col-13" + data-query="collection:distribute/essentials/tabletguidelines/googleplay" + data-sortOrder="-timestamp" + data-cardSizes="9x3" + data-maxResults="6"></div> + + +<div class="headerLine"> + <h2 id="test-environment"> + 設定平板電腦的測試環境 + </h2> + + +</div> + +<p> + 憑藉用於測試的適用硬體或模擬器環境,評估您的應用程式在平板電腦上的品質 (包括核心應用程式品質與平板電腦應用程式品質)。 +</p> + +<p> + 與<a href="{@docRoot}distribute/essentials/quality/core.html#test-environment">建議的測試環境</a>相較,根據核心應用程式品質準則進行測試,包括中型平板電腦以及具有更多或更少硬體/軟體功能的平板電腦。 +</p> + +<p class="table-caption"><strong>表格 1.</strong>一般平板電腦測試環境可能包括下表中每行內的一或兩項裝置,具有列示的其中一個平台版本、螢幕組態與硬體功能組態。</p> + +<table> +<tr> +<th>類型</th> +<th>大小</th> +<th>密度</th> +<th>版本</th> +<th>AVD 面板</th> +</tr> + +<tr> +<td>7 英寸平板電腦</td> +<td><span style="white-space:nowrap"><code>large</code> 或</span><br /><code>-sw600</code></td> +<td><code>hdpi</code>,<br /><code>tvdpi</code></td> +<td>Android 4.0+ (API 層級至少為 14)</td> +<td>WXGA800-7in</td> +</tr> +<tr> +<td><span style="white-space:nowrap">10 英寸</span> 平板電腦</td> +<td><span style="white-space:nowrap"><code>xlarge</code> 或</span><br /><code>-sw800</code></td> +<td><code>mdpi</code>,<br /><code>hdpi</code>,<br /><code>xhdpi</code></td> +<td>Android 3.2+ (API 層級至少為 13)</td> +<td>WXGA800</td> +</tr> +</table> + +<div class="headerLine"><h2 id="related-resources">相關資源</h2></div> + +<div class="resource-widget resource-flow-layout col-13" + data-query="collection:distribute/essentials/tabletguidelines" + data-sortOrder="-timestamp" + data-cardSizes="9x3" + data-maxResults="6"></div>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/tv.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/tv.jd new file mode 100644 index 0000000..9329606 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/tv.jd @@ -0,0 +1,448 @@ +page.title=電視應用程式品質 +page.metaDescription=在各種 Android 裝置中,電視的數量不斷攀升。為了提供絕佳的體驗,需要特別注意電視應用程式的設計與功能。 +page.image=/distribute/images/gp-tv-quality.png +@jd:body + +<div id="qv-wrapper"><div id="qv"> +<h2>品質準則</h2> + <ol> + <li><a href="#ux">設計與互動</a></li> + <li><a href="#fn">功能</a></li> + <li><a href="#faq">常見問題</a></li> + </ol> + + <h2>您也應閱讀</h2> + <ol> + <li><a href="{@docRoot}distribute/essentials/quality/core.html">核心應用程式品質</a></li> + <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">最佳化您的應用程式</a></li> + </ol> +</div> +</div> + +<div class="top-right-float" style="padding-right:0;margin-bottom:1em;"> + <img src="{@docRoot}distribute/images/gp-tv-quality.png" style="width:480px;"> +</div> + +<p> + 與使用手機及平板電腦相較,使用者觀看電視時具有不同的一組預期。通常,電視使用者與螢幕的距離大約為 10 英尺,因此微小的細節不太引人注目,而且小文字很難閱讀。由於使用者與電視之間有一段距離,因此必須使用遙控器執行導覽與選取,而非觸碰螢幕上的元素。這些不同之處導致為電視使用者提供良好體驗的構成要素具有顯著不同的需求。 +</p> + +<p> + 為電視使用者提供絕佳體驗的第一步,是檢閱並遵循 <a href="{@docRoot}design/tv/index.html">Android 電視設計指導方針</a>,這些指導方針針對如何為電視應用程式建置最優的使用者體驗提供了指示。此外,您還應檢閱<a href="{@docRoot}training/tv/start/index.html">建置電視應用程式</a>訓練,以了解電視應用程式的基本實作需求。 +</p> + +<p class="caution"> + <strong>重要說明:</strong>若要確保提供絕佳的使用者體驗,適用於電視裝置的應用程式必須符合可用性的某些特定需求。只有符合以下品質準則的應用程式,才有資格作為 Google Play 上的 Android 電視應用程式。 +</p> + +<p class="note"><strong>注意:</strong>如需有關如何在 Google Play 中發行電視應用程式的資訊,請參閱<a href="{@docRoot}distribute/googleplay/tv.html">散佈至 Android 電視</a>。</p> + + + +<div class="headerLine"> + <h2 id="ux"> + 視覺設計與使用者互動 + </h2> + + +</div> + +<p> + 這些準則可確保您的應用程式遵循關鍵的設計與互動樣式,以確保在電視裝置上提供一致、直觀且充滿樂趣的使用者體驗。 +</p> + +<table> + +<tr> + <th style="width:2px;"> + 類型 + </th> + <th style="width:54px;"> + 測試 + </th> + <th> + 描述 + </th> +</tr> + +<tr> + <td rowspan="4" id="launcher"> + 啟動器 + </td> + + <td id="TV-LM"> + TV-LM + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式在安裝後,會在 Android 電視啟動器中顯示啟動器圖示。(<a href="{@docRoot}training/tv/start/start.html#tv-activity">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="TV-LB"> + TV-LB + </td> + <td> + <p style="margin-bottom:.5em;"> + 在 Android 電視啟動器中,應用程式會顯示 320px x 180px 的完整大小橫幅作為其啟動器圖示。(<a href="{@docRoot}design/tv/patterns.html#banner">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="TV-BN"> + TV-BN + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式啟動橫幅包含應用程式的名稱。(<a href="{@docRoot}design/tv/patterns.html#banner">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="TV-LG"> + TV-LG + </td> + <td> + <p style="margin-bottom:.5em;"> + 若應用程式是遊戲,會顯示在 Android 電視啟動器的 [遊戲] 列中。<br> + (<a href="{@docRoot}training/tv/games/index.html#manifest">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td rowspan="5" id="layout"> + 版面配置 + </td> + + <td id="TV-LO"> + TV-LO + </td> + <td> + <p style="margin-bottom:.5em;"> + 所有應用程式介面都以橫向顯示。(<a href="{@docRoot}training/tv/start/layouts.html#structure">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="TV-TC"> + TV-TC + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式顯示的核心文字大小至少為 16sp。(<a href="{@docRoot}design/tv/style.html#typography">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="TV-TA"> + TV-TA + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式顯示的所有文字大小至少為 12sp。(<a href="{@docRoot}design/tv/style.html#typography">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="TV-OV"> + TV-OV + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式不會顯示部分遭螢幕邊緣截斷的任何文字或功能。(<a href="{@docRoot}training/tv/start/layouts.html#overscan">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="TV-TR"> + TV-TR + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式不會部分遮蓋其他應用程式。應用程式會填滿整個螢幕,並具有不透明的背景。 + </p> + </td> +</tr> + +<tr> + <td rowspan="3" id="navigation"> + 導覽 + </td> + + <td id="TV-DP"> + TV-DP + </td> + <td> + <p style="margin-bottom:.5em;"> + 除非應用程式如 <a href="#TV-GP">TV-GP</a> 中指定需要遊戲手把,否則可以使用 5 向 D-pad 控制裝置來導覽應用程式功能。(<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="TV-DK"> + TV-DK + </td> + <td> + <p style="margin-bottom:.5em;"> + 若應用程式如 <a href="#TV-GP">TV-GP</a> 中指定需要遊戲手把,則使用標準的 Android 遊戲手把按鍵可以導覽所有功能。(<a href="{@docRoot}training/game-controllers/controller-input.html#button">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="TV-DM"> + TV-DM + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式不依賴具有 [功能表] 按鈕的遙控器也能存取使用者介面的控制項。(<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">進行了解</a>) + </p> + </td> +</tr> + + +</table> + + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/essentials/tvqualityguidelines/visualdesign" +data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6"> +</div> + + + +<div class="headerLine"> + <h2 id="fn"> + 功能 + </h2> + + +</div> + +<p> + 這些準則可確保您的應用程式經過正確設定並提供預期的功能行為。 +</p> + + +<table> +<tr> + <th style="width:2px;"> + 類型 + </th> + <th style="width:54px;"> + 測試 + </th> + <th> + 描述 + </th> +</tr> + +<tr> + <td rowspan="2" id="manifest"> + 宣示說明 + </td> + + <td id="TV-ML"> + TV-ML + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式宣示說明使用 {@link android.content.Intent#CATEGORY_LEANBACK_LAUNCHER} 類別設定 {@link android.content.Intent#ACTION_MAIN} 意圖類型。(<a href="{@docRoot}training/tv/start/start.html#tv-activity">進行了解</a>) + </p> + </td> +</tr> + +</tr> + <td id="TV-MT"> + TV-MT + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式宣示說明將硬體功能 {@code android.hardware.touchscreen} 設為不需要。(<a href="{@docRoot}training/tv/start/hardware.html#declare-hardware-requirements">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td rowspan="2" id="game-controllers"> + 遊戲手把 + </td> + + <td id="TV-GP"> + TV-GP + </td> + <td> + <p style="margin-bottom:.5em;"> + 若應用程式將遊戲手把用作主要輸入方式,會使用 <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> 宣示說明標籤宣告相應的需求。(<a href="{@docRoot}training/tv/games/index.html#gamepad">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="TV-GC"> + TV-GC + </td> + <td> + <p style="margin-bottom:.5em;"> + 若應用程式提供使用遊戲手把的視覺指示,這些指示應不含品牌資訊,並顯示相容的按鈕版面配置。(<a href="{@docRoot}training/tv/games/index.html#ControllerHelp">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td rowspan="4" id="advertising"> + 廣告推廣 + </td> + + <td id="TV-AP"> + TV-AP + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式允許使用 D-pad 控制裝置與廣告推廣互動。(<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="TV-AD"> + TV-AD + </td> + <td> + <p style="margin-bottom:.5em;"> + 對於使用全螢幕非影片廣告的廣告推廣,應用程式允許使用者使用 D-pad 控制裝置立即關閉廣告。 + </p> + </td> +</tr> + +<tr> + <td id="TV-AU"> + TV-AU + </td> + <td> + <p style="margin-bottom:.5em;"> + 對於使用可點選、非全螢幕、非影片廣告的廣告推廣,應用程式不允許廣告連結至網頁 URL。 + </p> + </td> +</tr> + +<tr> + <td id="TV-AA"> + TV-AA + </td> + <td> + <p style="margin-bottom:.5em;"> + 對於使用可點選、非全螢幕、非影片廣告的廣告推廣,應用程式不允許廣告連結至電視裝置上不可用的其他應用程式。 + </p> + </td> +</tr> + +<tr> + <td rowspan="1" id="web"> + 網頁內容 + </td> + + <td id="TV-WB"> + TV-WB + </td> + <td> + <p style="margin-bottom:.5em;"> + 對於網頁內容,應用程式會使用 {@link android.webkit.WebView} 元件,不會嘗試啟動網頁瀏覽器應用程式。 + </p> + </td> +</tr> + +<tr> + <td rowspan="3" id="media-playback"> + 媒體播放 + </td> + + <td id="TV-NP"> + TV-NP + </td> + <td> + <p style="margin-bottom:.5em;"> + 若應用程式在使用者離開後繼續播放聲音,應用程式會在主螢幕建議列提供<em>現在播放</em>卡,因此使用者可以返回至應用程式以控制播放。(<a href="{@docRoot}training/tv/playback/now-playing.html">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="TV-PA"> + TV-PA + </td> + <td> + <p style="margin-bottom:.5em;"> + 若應用程式提供<em>現在播放</em>卡,使用者選取此卡後,會進入可暫停播放的畫面。(<a href="{@docRoot}training/tv/playback/now-playing.html">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="TV-PP"> + TV-PP + </td> + <td> + <p style="margin-bottom:.5em;"> + 若應用程式播放視訊或音樂內容,則在播放期間傳送播放或暫停關鍵事件時,應用程式會在媒體的播放與暫停之間進行切換。<br> + (<a href="{@docRoot}reference/android/view/KeyEvent.html#KEYCODE_MEDIA_PLAY_PAUSE">進行了解</a>) + </p> + </td> +</tr> + + +</table> + + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/essentials/tvqualityguidelines/functionality" +data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6"> +</div> + + +<div class="headerLine"> + <h2 id="faq"> + 常見問題 + </h2> +</div> + +<p style="margin-top:30px;"> + <strong>提交應用程式後,如何才能知道我的應用程式不符合電視裝置的所有需求?</strong> +</p> +<p> + 若您的應用程式不符合本頁面所述的可用性需求,Play 市集團隊會透過主 <a href="https://play.google.com/apps/publish/">Google Play Developer Console</a> 帳戶 (與應用程式關聯) 中指定的電子郵件地址與您連絡。 +</p> +<p class="caution"> + <strong>注意:</strong>請確保您的應用程式包括電視裝置的<a href="{@docRoot}preview/tv/start/index.html#tv-activity">所需宣示說明項目</a>,否則不會將您的應用程式視為電視應用程式,也不會針對電視可用性需求對其進行檢閱。 +</p> + + +<p style="margin-top:30px;"> + <strong>我的應用程式針對的不僅是電視裝置。若我的應用程式不符合電視裝置需求,我的新應用程式或更新後的應用程式是否仍顯示在 Google Play 中針對手機與平板電腦的位置?</strong> +</p> +<p> + 是。上述需求只會對散佈至 Google Play 市集的電視裝置進行限制。散佈至其他裝置類型 (例如手機、平板電腦及其他裝置) 不受影響。 +</p> + + +<p style="margin-top:30px;"> + <strong>若我的應用程式符合發行需求,對 Google Play 市集內的電視裝置何時才提供該應用程式?</strong> +</p> + +<p> + 在官方發行 Android 5.0 <em>後</em>,符合電視需求的應用程式將顯示在 Google Play 市集內的電視裝置上。 +</p>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/wear.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/wear.jd new file mode 100644 index 0000000..47a2d91 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/wear.jd @@ -0,0 +1,398 @@ +page.title=穿戴式裝置應用程式品質 +page.tags="wear","wearables","quality","guidelines" +page.metaDescription=穿戴式裝置是專為簡略瀏覽而建置的較小裝置,需要獨特的應用程式在正確的時間提供正確的資訊。 +page.image=/distribute/images/gp-wear-quality.png + +@jd:body + +<div id="qv-wrapper"><div id="qv"> +<h2>品質準則</h2> + <ol> + <li><a href="#ux">設計與互動</a></li> + <li><a href="#fn">功能</a></li> + <li><a href="#faq">常見問題</a></li> + </ol> + + <h2>您也應閱讀</h2> + <ol> + <li><a href="{@docRoot}distribute/essentials/quality/core.html">核心應用程式品質</a></li> + <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">最佳化您的應用程式</a></li> + <li><a href="{@docRoot}design/patterns/notifications.html">通知</a></li> + </ol> +</div> +</div> + +<img src="{@docRoot}distribute/images/gp-wear-quality.png" style="width:480px;"> + +<p> + Android Wear 旨在於正確的時間為使用者提供正確的資訊。Android Wear 自動啟動,可供簡略瀏覽,需要很少或不需要使用者介入,從而提供絕佳體驗。設計用於穿戴式裝置的應用程式與設計用於手機或平板電腦的應用程式相較有很大不同。兩者具有不同的優點與缺點、不同的使用狀況,要考慮的人體工程學也不同。 +</p> + +<p> + 為 Wear 使用者提供絕佳體驗的第一步,是閱讀 <a href="{@docRoot}design/wear/index.html">Android Wear 設計指導方針</a>,這些指導方針針對如何為 Wear 應用程式建置最優的使用者體驗提供了指示。此外,您還應檢閱<a href="{@docRoot}training/building-wearables.html">建置穿戴式裝置應用程式</a>訓練,以了解 Wear 應用程式的基本實作需求。 +</p> + +<p class="caution"> + <strong>重要說明:</strong>若要確保提供絕佳的使用者體驗,適用於穿戴式裝置的應用程式必須符合可用性的特定需求。只有符合以下品質準則的應用程式,才有資格作為 Google Play 上的 Android Wear 應用程式。透過具有作為 Wear 應用程式的資格,Android Wear 使用者可以更輕鬆地在 Google Play 上探尋您的應用程式。 +</p> + +<p class="note"> + <strong>注意:</strong>如需有關如何在 Google Play 中發行 Wear 應用程式的資訊,請參閱<a href="{@docRoot}distribute/googleplay/wear.html">散佈至 Android Wear</a>。 +</p> + +<div class="headerLine"> + <h2 id="fn"> + 功能 + </h2> + + +</div> + +<p> + 這些準則可確保您的應用程式經過正確設定並提供預期的功能行為。 +</p> + + +<table> +<tr> + <th style="width:2px;"> + 類型 + </th> + <th style="width:54px;"> + ID + </th> + <th> + 描述 + </th> +</tr> + +<tr> + <td rowspan="3" id="general"> + 一般 + </td> + + <td id="WR-GL"> + WR-GL + </td> + <td> + <p style="margin-bottom:.5em;"> + 手持式應用程式包括穿戴式裝置特定功能的通知,或直接在 Wear 裝置上執行的穿戴式裝置應用程式。(<a href="{@docRoot}training/building-wearables.html">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="WR-VF"> + WR-VF + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式具有使用者可見的 Wear 功能。 + </p> + </td> +</tr> + +<tr> + <td id="WR-BF"> + WR-BF + </td> + <td> + <p style="margin-bottom:.5em;"> + Wear 功能按預期運作,或按應用程式的 Google Play 市集清單中所述內容運作。 + </p> + </td> +</tr> + +<tr> + <td rowspan="1" id="packaging"> + 封裝 + </td> + + <td id="WR-PK"> + WR-PK + </td> + <td> + <p style="margin-bottom:.5em;"> + 若穿戴式裝置應用程式依賴手持式應用程式來發揮功能,應將穿戴式裝置應用程式封裝在手持式應用程式中。(<a href="{@docRoot}training/wearables/apps/packaging.html">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td rowspan="3" id="functional-notifications"> + 通知 + </td> + + <td id="WR-FW"> + WR-FW + </td> + <td> + <p style="margin-bottom:.5em;"> + 穿戴式裝置特定功能的通知使用 {@code RemoteInput} 或 {@code WearableExtender}。(<a href="{@docRoot}training/wearables/notifications/index.html">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="WR-FR"> + WR-FR + </td> + <td> + <p style="margin-bottom:.5em;"> + 藉由傳訊應用程式的通知,使用者可以透過語音輸入或快速回應來提供回覆。(<a href="{@docRoot}training/wearables/notifications/voice-input.html">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="WR-FG"> + WR-FG + </td> + <td> + <p style="margin-bottom:.5em;"> + 將相似的通知歸入同一堆疊中。(<a href="{@docRoot}training/wearables/notifications/stacks.html">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td rowspan="2" id="gestures"> + 手勢 + </td> + + <td id="WR-GP"> + WR-GP + </td> + <td> + <p style="margin-bottom:.5em;"> + 只有在希望提示以結束時,全螢幕動作才使用「長時間按下」手勢。 <br/> (<a href="{@docRoot}training/wearables/ui/exit.html">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="WR-GD"> + WR-GD + </td> + <td> + <p style="margin-bottom:.5em;"> + 若應用程式在全螢幕動作中停用「輕拂以關閉」手勢,則在該動作中將回應「長時間按下以關閉」手勢。(<a href="{@docRoot}training/wearables/ui/exit.html">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td rowspan="1" id="watchface"> + 錶面 + </td> + + <td id="WR-WF"> + WR-WF + </td> + <td> + <p style="margin-bottom:.5em;"> + 包含錶面的應用程式將使用正式的錶面 API。(<a href="{@docRoot}training/wearables/watch-faces/index.html">進行了解</a>) + </p> + </td> +</tr> + +</table> + + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/essentials/wearqualityguidelines/functionality" +data-sortorder="-timestamp" data-cardsizes="6x2" data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="ux"> + 視覺設計與使用者互動 + </h2> + + +</div> + +<p> + 這些準則可確保您的應用程式遵循關鍵的設計與互動樣式,以便在穿戴式裝置上提供一致、直觀且充滿樂趣的使用者體驗。 +</p> + +<table> + +<tr> + <th style="width:2px;"> + 類型 + </th> + <th style="width:54px;"> + ID + </th> + <th> + 描述 + </th> +</tr> + +<tr> + <td rowspan="3" id="layout"> + 版面配置 + </td> + + <td id="WR-LS"> + WR-LS + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式使用者介面已針對方形顯示幕正確設定格式。應用程式內容適合實體顯示區域,文字或控制項未遭螢幕邊緣截斷。 <br/> (<a href="{@docRoot}training/wearables/ui/layouts.html">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="WR-LR"> + WR-LR + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式使用者介面已針對圓形顯示幕 (包括螢幕底部具有內嵌項目 (即「下巴」) 的裝置) 正確設定格式。應用程式內容適合實體顯示區域,文字或控制項未遭螢幕邊緣截斷。 <br/> (<a href="{@docRoot}training/wearables/ui/layouts.html">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="WR-TC"> + WR-TC + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式文字較大且可供簡略瀏覽,建議最小為 16sp。(<a href="{@docRoot}design/wear/style.html#Typography">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td rowspan="1" id="launcher"> + 啟動器 + </td> + + <td id="WR-LN"> + WR-LN + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式啟動器字串是應用程式名稱,而非命令片語。(<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td rowspan="5" id="notifications"> + 通知 + </td> + + <td id="WR-NC"> + WR-NC + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式在適當時顯示確認動畫。(<a href="{@docRoot}design/wear/patterns.html#Countdown">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="WR-NR"> + WR-NR + </td> + <td> + <p style="margin-bottom:.5em;"> + 通知卡的右上邊緣顯示應用程式圖示。若通知卡具有單一動作控制項 (例如媒體播放卡),則屬例外狀況。 <br/> (<a href="{@docRoot}design/wear/style.html#Assets">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="WR-WI"> + WR-WI + </td> + <td> + <p style="margin-bottom:.5em;"> + 通知動作具有白色圖示、動作標題以及透明背景。 <br/> (<a href="{@docRoot}training/wearables/notifications/creating.html#ActionButtons">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="WR-PB"> + WR-PB + </td> + <td> + <p style="margin-bottom:.5em;"> + 通知相片背景僅用於傳遞資訊,不用於為卡建立品牌。(<a href="{@docRoot}design/wear/style.html#Branding">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td id="WR-PR"> + WR-PR + </td> + <td> + <p style="margin-bottom:.5em;"> + 通知相片背景的解析度至少為 400x400。(<a href="{@docRoot}training/wearables/notifications/creating.html#AddWearableFeatures">進行了解</a>) + </p> + </td> +</tr> + +<tr> + <td rowspan="1" id="googleplay"> + Google Play + </td> + + <td id="WR-GS"> + WR-GS + </td> + <td> + <p style="margin-bottom:.5em;"> + 應用程式在其 Play 市集清單中至少包含一個 Wear 螢幕擷取畫面。(<a +href="https://support.google.com/googleplay/android-developer/answer/1078870?hl=en">進行了解</a>) + </p> + </td> +</tr> + + +</table> + + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/essentials/wearqualityguidelines/visualdesign" +data-sortorder="-timestamp" data-cardsizes="6x2" data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="faq"> + 常見問題 + </h2> +</div> + +<p style="margin-top:30px;"> + <strong>提交應用程式供 Android Wear 檢閱後,如何才能知道我的應用程式不符合 Wear 的所有需求?</strong> +</p> +<p> + 若您的應用程式不符合本頁面所述的可用性需求,Play 市集團隊會透過 <a href="https://play.google.com/apps/publish/">Google Play Developer Console</a> 帳戶 (與應用程式關聯) 中指定的電子郵件地址與您連絡。 +</p> +<p class="caution"> + <strong>注意:</strong>請確保您的應用程式符合<a href="#fn">功能需求</a>,否則不會將您的應用程式視為 Wear 應用程式,也不會針對 Wear <a href="#ux">設計與互動</a>對其進行檢閱。 +</p> +<p class="note"> + <strong>注意:</strong>如需有關如何在 Google Play 中發行 Wear 應用程式的資訊,請參閱<a href="{@docRoot}distribute/googleplay/wear.html">散佈至 Android Wear</a>。 +</p> + + +<p style="margin-top:30px;"> + <strong>若我的應用程式不符合 Wear 需求,我的新應用程式或更新後的應用程式是否仍顯示在 Google Play 中針對手機與平板電腦的位置,並且仍會安裝在穿戴式裝置上?</strong> +</p> +<p> + 是。上述需求僅判斷在 Google Play 上是否將您的應用程式視為 Android Wear 應用程式,以及該應用程式是否可供 Android Wear 使用者更輕鬆地探尋。若未接受您的應用程式為 Wear 應用程式,仍會向其他裝置類型 (例如手機或平板電腦) 提供該應用程式,並且仍會安裝在穿戴式裝置上。 +</p>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/start.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/start.jd new file mode 100644 index 0000000..3364e49 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/start.jd @@ -0,0 +1,137 @@ +page.title=開始發行 +page.metaDescription=透過註冊開發人員帳戶,在 Google Play 上只需數分鐘即可開始發行。 +meta.tags="publishing" +page.tags="google play", "publishing", "register", "signup" +page.image=/distribute/images/getting-started.jpg + +@jd:body + +<div class="top-right-float" style="margin-right:24px;margin-top:-18px"> + <a href="https://play.google.com/apps/publish/"><img src="{@docRoot}images/gp-start-button.png"></a> +</div> + +<p> + 透過以下方式,在 Google Play 上只需數分鐘即可開始發行: +</p> + +<ul> + <li>註冊 Google Play 發行人員帳戶 + </li> + + <li>若您希望販售應用程式或應用程式內產品,請設定 Google Wallet Merchant Account (Google 電子錢包商家帳戶)。 + </li> + + <li>探索 <a href="https://play.google.com/apps/publish/">Google Play Developer Console</a> 與發行工具。 + </li> +</ul> + +<p> + 準備就緒後,請使用 [開始] 按鈕移至 Developer Console。 +</p> + +<div class="headerLine"> + <h2> + 註冊發行人員帳戶 + </h2> + + +</div> + +<div class="sidebox-wrapper" style="float:right;"> + <div class="sidebox"> + <h2> + 秘訣 + </h2> + + <ul> + <li>您需要註冊 Google 帳戶。在程序執行期間,您可以建立 Google 帳戶。 + </li> + + <li>若您是組織,請考慮註冊新的 Google 帳戶,而非使用個人帳戶。 + </li> + + <li>檢閱您可以散佈及販售應用程式的<a +href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=138294">開發人員國家/地區</a>與<a +href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=150324">商家國家/地區</a>。 + </li> + </ul> + </div> +</div> + +<ol> + <li>造訪 <a href="https://play.google.com/apps/publish/">Google Play Developer Console</a>。 + </li> + + <li>輸入有關您<strong>開發人員身分</strong>的基本資訊 (名稱、電子郵件地址等)。您可在稍後修改此資訊。 + </li> + + <li>閱讀並接受您所在國家/地區的<strong>開發人員散佈合約</strong>。請注意,您在 Google Play 上發行的應用程式與市集清單必須遵循開發人員計劃政策以及美國出口法規。 + </li> + + <li>使用 Google Wallet 支付 <strong>$25 美元的註冊費</strong>。若您沒有 Google Wallet 帳戶,可以在程序執行期間快速設定該帳戶。 + </li> + + <li>確認您的註冊後,會向註冊期間輸入的電子郵件地址傳送電子郵件以通知您。 + </li> +</ol> + +<div class="headerLine"> + <h2 id="merchant-account"> + 設定 Google Wallet Merchant Account (Google 電子錢包商家帳戶) + </h2> + + +</div> + +<div class="figure" style="width:200px;"> + <img src="{@docRoot}images/gp-start-wallet-icon.png"> +</div> + +<p> + 若您希望販售付費應用程式、應用程式內產品或訂閱,需要具有 Google Wallet Merchant Account (Google 電子錢包商家帳戶)。您隨時可以設定該帳戶,但請先檢閱<a +href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=150324">商家國家/地區</a>的清單。<br> + <br> + 設定 Google Wallet Merchant Account (Google 電子錢包商家帳戶) 的步驟:<br> + <br> +</p> + +<ol> + <li> + <strong>登入</strong>至您的 Google Play Developer Console,網址為 <a href="https://play.google.com/apps/publish/" target="_blank">https://play.google.com/apps/publish/</a>。 + </li> + + <li>開啟側面導覽列上的 [財務報告] <strong></strong><img src="{@docRoot}images/distribute/console-reports.png">。 </li> + + <li>按一下 [立即設定商家帳戶]<strong></strong>。 + </li> +</ol> + +<p> + 此操作將引導您進入 Google Wallet 網站,您需要使用有關貴企業的資訊完成此步驟。 +</p> + +<div class="headerLine"> + <h2> + 探索 Developer Console + </h2> + + +</div> + +<p> + 確認您的註冊後,您可以登入至 Developer Console,這是您的應用程式發行操作與工具在 Google Play 上的基地。 +</p> + +<div> + <img src="{@docRoot}images/gp-dc-home.png" class="border-img"> +</div> + +<div class="headerLine"> +<h2 id="related-resources">相關資源</h2><hr /> +</div> + +<div class="resource-widget resource-flow-layout col-13" + data-query="collection:distribute/googleplay/gettingstarted" + data-sortOrder="-timestamp" + data-cardSizes="9x3" + data-maxResults="6"></div>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/tv.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/tv.jd new file mode 100644 index 0000000..c4f7a7c --- /dev/null +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/tv.jd @@ -0,0 +1,210 @@ +page.title=散佈至 Android 電視 +page.image=/design/tv/images/atv-home.jpg +meta.tags="tv", "publish", "quality" +page.tags="tv", "publish", "googleplay" +page.metaDescription=將您的應用程式、遊戲與內容散佈至 Android 電視。 + +@jd:body + +<div id="qv-wrapper"><div id="qv"> +<h2>如何參加</h2> +<ol> +<li><a href="#understand_guidelines">了解指導方針</a></li> +<li><a href="#develop_app">開發適用於電視的卓越應用程式</a></li> +<li><a href="#test_app">測試電視應用程式品質</a></li> +<li><a href="#opt_in">選擇</a></li> +<li><a href="#track_review">追蹤檢閱</a></li> +</ol> + +<h2>您也應閱讀</h2> +<ol> +<li><a href="{@docRoot}distribute/essentials/quality/tv.html">電視應用程式品質</a></li> +<li><a href="{@docRoot}distribute/essentials/quality/core.html">核心應用程式品質</a></li> +</ol> + +</div></div> + +<p> + 若您開發出卓越的應用程式或遊戲,Android 電視與 Google Play 可協助您將其提供給客廳中的使用者。您可以採用針對電視進行最佳化的店面形式,來提供應用程式與遊戲。您可以延伸適用於電視的新應用程式或既有應用程式,然後在 Google Play 中使用熟悉的工具與程序發行這些應用程式。 +</p> + +<p> + 若要開始,請檢閱本文件的各節,以了解如何透過 Google Play 將您的電視應用程式散佈至使用者。如需有關您的應用程式應符合的可用性與品質標準的資訊,請務必閱讀<a href="{@docRoot}distribute/essentials/quality/tv.html">電視應用程式品質</a>。若應用程式已準備就緒,您可以選擇在 Developer Console 的 Android 電視店面中發行。 +</p> + +<h2 id="how_to_participate"> + 如何參加 +</h2> + +<p> + 藉由 Google Play,您可以向客廳中的新使用者展示您的電視應用程式。您可以使用既有的 Developer Console 帳戶以及目前的散佈與定價設定來執行開發與發行。參加方式非常簡單,以下諸節將說明參加程序。 +</p> + +<div style="float:right;margin:1em 0 1.5em 2em;"> + <img src="{@docRoot}images/gp-tv-process.png"> +</div> + +<h3 id="understand_guidelines"> + 1.了解指導方針與需求 +</h3> + +<p> + 若要準備在 Android 電視上成功推出應用程式,首先請檢閱有關在電視上營造絕佳應用程式體驗的指導方針。請參閱 <a href="{@docRoot}design/tv/index.html">Android 電視設計指導方針</a>,以了解延伸電視所適用應用程式的創意,以及有關設計與可用性的詳細資料。 +</p> + +<p> + 著手設計電視體驗時,請確保閱讀並了解電視應用程式的品質準則。適用於 Android 電視的 Google Play 體驗<strong>只會展示電視上可以使用的應用程式</strong>,若您的應用程式符合一組基本的品質準則,則可以參加。如需詳細資料,請參閱<a href="{@docRoot}distribute/essentials/quality/tv.html">電視應用程式品質</a>。 +</p> + +<h3 id="develop_app">2.開發適用於電視的卓越應用程式</h3> + +<p> + 適用於電視的卓越應用程式針對在客廳使用而設計,可利用 Android 電視的功能以及相關輸入配件 (例如遊戲手把、D-pad 及遙控器)。應用程式經過改進,以便在大螢幕上提供完美的高品質體驗,並為使用者提供引人注目的功能組。 +</p> + +<p> + 考慮電視應用程式時,請檢閱<a href="{@docRoot}training/tv/start/index.html">開發人員文件</a>以及可用性指導方針,然後對以可能的最大限度提供支援進行規劃。請確保為使用者設計絕佳的可靠體驗,並使用 SDK 中包括的可靠資源庫營造該體驗。您會希望針對電視使用狀況對應用程式的其他部分進行最佳化,在開發程序的早期確認這些部分是不錯的想法。 +</p> + +<p> + 在大多數狀況下,我們建議在提供用於手機、平板電腦及其他裝置的既有應用程式過程中,提供電視應用程式 (使用相同的套件名稱與市集清單) 的體驗。藉由此方法,使用者可以順利升級至您的電視體驗,您也可以利用在應用程式用於手機與平板電腦時所取得的評論與評分。 +</p> + +<p> + 對於支援的所有裝置,您可將電視意圖、可靠資源庫、電視特定程式碼及資源包含在單一 APK 解決方案中。若需要,您可以使用<a href="{@docRoot}google/play/publishing/multiple-apks.html">多 APK 支援</a>向 Android 電視裝置提供自訂二進位檔案 (使用用於手機與平板電腦的相同套件名稱與市集清單)。 +</p> + +<p> + 在整個設計與開發過程中,請務必採用適當的裝置執行使用者體驗的原型建立與測試。您應儘早取得一或多個 Android 電視裝置或模擬器,並設定測試環境。建議在 Android 電視環境中供測試的硬體裝置為 Nexus Player,<a href="http://www.google.com/intl/all/nexus/player/">Google Play</a> 與其他市集可提供該裝置,此外,您還應取得遊戲手把及其他電視輸入裝置。 +</p> + +<h3 id="test_app">3.測試電視應用程式品質</h3> + +<p> + 應將您的電視應用程式設計為在 Android 電視上具有良好的執行狀況與極佳的外觀,並提供可能最優的使用者體驗。Google Play 會顯示高品質的應用程式,以降低使用者在 Google Play 中的探尋難度。以下說明您如何參加並提供使用者會喜愛的 Android 電視應用程式。 +</p> + +<ul> + <li>符合核心應用程式品質指導方針 <ul> + <li>遵循 <a href="{@docRoot}design/index.html">Android 設計指導方針</a>。請格外注意在應用程式中使用<a href="http://www.google.com/design/spec/material-design/introduction.html">材料設計</a>。 + </li> + + <li>根據<a href="{@docRoot}distribute/essentials/quality/core.html">核心應用程式品質指導方針</a>測試您的應用程式。 + </li> + </ul> + </li> + <li>符合<a href="{@docRoot}distribute/essentials/quality/tv.html">電視應用程式品質</a>指導方針 <ul> + <li>遵循<a href="{@docRoot}training/tv/index.html">電視應用程式開發</a>的最佳做法</li> + <li>確保您的應用程式符合所有<a href="{@docRoot}distribute/essentials/quality/tv.html">電視應用程式品質</a>準則</li> + </ul> + </li> + <li>盡力實現簡易性與最高的可用性</li> +</ul> + +<h3 id="opt_in">4.選擇 Android 電視並發行</h3> + +<p> + 若您已建置準備發行的 APK,並已進行測試,確保其符合所有<a href="{@docRoot}distribute/essentials/quality/tv.html">電視應用程式品質</a>指導方針,請將其上傳至 Developer Console。使用電視螢幕擷取畫面與電視橫幅更新您的市集清單,然後視需要設定散佈選項。若您不熟悉如何在 Google Play 上準備推出應用程式,請參閱<a href="{@docRoot}distribute/googleplay/publish/preparing.html">推出檢查清單</a>。 +</p> + +<p> + 您需要先從 Developer Console 的 [定價與散佈]<strong></strong> 區段中選擇 Android 電視,然後才能發佈至 Android 電視使用者。該選擇意味著您希望透過 Google Play 為 Android 電視使用者提供您的應用程式,且您的應用程式符合<a href="{@docRoot}distribute/essentials/quality/tv.html">電視應用程式品質</a>指導方針。 +</p> + +<p> + 只有在您的應用程式符合上傳 APK 時會自動檢查的以下兩項初級品質準則時,才可以進行選擇: +</p> + +<ul> + <li>您的應用程式宣示說明必須包括 <a href="{@docRoot}reference/android/content/Intent.html#ACTION_MAIN"><code>ACTION_MAIN</code></a> 意圖類型,以及 <a href="{@docRoot}reference/android/content/Intent.html#CATEGORY_LEANBACK_LAUNCHER"><code>CATEGORY_LEANBACK_LAUNCHER</code></a> 類別。請在<a href="{@docRoot}training/tv/start/start.html#tv-activity">這裡</a>深入了解。 + </li> + + <li>您的應用程式必須宣告其不需要觸控螢幕。宣示說明必須使用 <code>android:required="false”</code> 宣告 <code>android.hardware.touchscreen</code> 硬體。請在<a href="{@docRoot}training/tv/start/hardware.html#declare-hardware-requirements">這裡</a>深入了解。 + </li> +</ul> + +<p> + 若您的應用程式符合上述初級準則,您將看到 Android 電視的選擇核取方塊,如下所示。若未啟用選擇核取方塊,請檢閱您的 APK,以確保其符合上述初級準則。 +</p> + +<p> + 您選擇並儲存變更後,即可照常發行應用程式。在向 Android 電視使用者提供應用程式之前,Google Play 會提交您的應用程式以根據<a href="{@docRoot}distribute/essentials/quality/tv.html">電視應用程式品質</a>準則進行檢閱,並向您通知結果。如需有關如何追蹤您應用程式核准狀態的詳細資料,請參閱下一節。 +</p> + +<p> + 若您的應用程式符合<a href="{@docRoot}distribute/essentials/quality/tv.html">電視應用程式品質</a>準則,Google Play 會向 Android 電視使用者提供該應用程式。您的應用程式也有資格成為應用程式集合與推廣中展示機會更多的精選應用程式。為了讓各地的使用者知道您的應用程式針對 Android 電視而設計,Google Play 會為應用程式的市集清單新增電視徽章。 +</p> + +<p> + 請注意,選擇與檢閱不會影響您的應用程式對 Google Play 市集內其他裝置的可用性,例如在電話或平板電腦上,您的應用程式一經發行即可使用。 +</p> + +<p> + 在 Developer Console 中選擇 Android 電視的步驟如下: +</p> + +<ol> + <li>請確保您的應用程式符合所有<a href="{@docRoot}distribute/essentials/quality/tv.html">電視應用程式品質</a>準則 + </li> + + <li>將電視螢幕擷取畫面與橫幅圖形新增至應用程式的市集清單 + </li> + + <li>在 [所有應用程式]<strong></strong> 頁面中,按一下您希望選擇的應用程式。 + </li> + + <li>在 [定價與散佈]<strong></strong> 下,向下捲動以尋找 <em>Android 電視</em>及選擇核取方塊。 + </li> + + <li>按一下 [將您的應用程式散佈至 Android 電視]<em></em> 旁的核取方塊。 + </li> + + <li>按一下 [儲存]<strong></strong> 以儲存變更。 + </li> +</ol> + +<div style="padding-top:1em"> + <img style="border:2px solid #ddd;" src="{@docRoot}images/gp-tv-opt-in.png"> + <p class="caption"> + <strong>電視選擇:</strong>從 Developer Console 中選擇 Android 電視,以便將應用程式包括在 Android 電視中。 + </p> +</div> + +<h3 id="track_review">5.追蹤您的檢閱與核准</h3> + +<p> + 若您的應用程式符合 Android 電視的技術與品質準則 (如上所述),則會向 Android 電視的使用者提供您的應用程式。若您的應用程式不符合該準則,您將收到<strong>傳送至您開發人員帳戶地址的通知電子郵件</strong>,內含需要修正的領域的摘要。若您已進行所需調整,可以將新版本的應用程式上傳至 Developer Console。 +</p> + +<p> + 在 Developer Console 中,您隨時可以在應用程式 [定價與散佈] <strong></strong> 頁面中的 [Android 電視]<em></em> 下,檢查應用程式的檢閱與核准狀態。 +</p> + +<p> + 存在三種核准狀態: +</p> + +<ul> + <li> + <em>待決</em> - 已傳送您的應用程式供檢閱,檢閱尚未完成。 + </li> + + <li> + <em>已核准</em> - 已檢閱並核准您的應用程式。會直接向 Android 電視使用者提供該應用程式。 + </li> + + <li> + <em>未核准</em> - 已檢閱但未核准您的應用程式。如需有關為何未核准應用程式的資訊,請檢查通知電子郵件。您可以解決所有問題,然後再次選擇並發行,以啟動另一次檢閱。 + </li> +</ul> + +<p>若要了解您應用程式的評估方式,請參閱<a href="{@docRoot}distribute/essentials/quality/tv.html">電視應用程式品質</a>文件。 </p> + + + <h3>相關資源</h3> + + <div class="resource-widget resource-flow-layout col-16" + data-query="collection:tvlanding" + data-cardSizes="9x6, 6x3x2" + data-maxResults="6"> + </div>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/wear.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/wear.jd new file mode 100644 index 0000000..19a48f5 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/wear.jd @@ -0,0 +1,199 @@ +page.title=散佈至 Android Wear +page.image=/design/media/wear/ContextualExample.008_2x.png +meta.tags="wear", "publish", "quality" +page.tags="wear", "publish", "googleplay" +page.metaDescription=將您的應用程式、遊戲與內容散佈至 Android Wear。 + +@jd:body + +<div id="qv-wrapper"><div id="qv"> +<h2>如何參加</h2> +<ol> +<li><a href="#understand_guidelines">了解指導方針</a></li> +<li><a href="#develop_app">開發適用於 Wear 的卓越應用程式</a></li> +<li><a href="#test_app">測試 Wear 應用程式品質</a></li> +<li><a href="#opt_in">選擇</a></li> +<li><a href="#track_review">追蹤檢閱</a></li> +</ol> + +<h2>您也應閱讀</h2> +<ol> +<li><a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 應用程式品質</a></li> +<li><a href="{@docRoot}distribute/essentials/quality/core.html">核心應用程式品質</a></li> +</ol> + +</div></div> + +<p> + 若您開發出卓越的應用程式,Android Wear 與 Google Play 可協助您將其提供給使用者。雖然所有應用程式都可將基本通知傳送至 Android Wear 裝置,但是您可以使用較此更多的功能。延伸您的應用程式以支援自訂 Wear 互動,並在所有 Wear 裝置上提供經過改進且極具吸引力的使用者體驗。若您的應用程式符合手機上核心應用程式品質指導方針,並為 Android Wear 裝置提供高品質的體驗,Google Play 會展示您的應用程式以簡化探尋。 +</p> + +<p> + 若要開始,請檢閱本文件的各節,以了解如何透過 Google Play 將您的 Wear 應用程式散佈至使用者。如需有關您的應用程式應符合的可用性與品質標準的資訊,請務必閱讀 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 應用程式品質</a>。若應用程式已準備就緒,您可以從 Developer Console 中選擇作為 Android Wear 應用程式的名稱。 +</p> + +<h2 id="how_to_participate"> + 如何參加 +</h2> + +<p> + 藉由 Google Play,您可讓 Wear 使用者更容易探尋到您的 Wear 應用程式。您可以使用既有的 Developer Console 帳戶以及目前的散佈與定價設定來執行開發與發行。參加方式非常簡單,以下諸節將說明參加程序。 +</p> + +<h3 id="understand_guidelines"> + 1.了解指導方針與需求 +</h3> + +<div style="float:right;margin:1em 0 1.5em 2em;"> + <img src="{@docRoot}images/gp-wear-process.png"> +</div> + +<p> + 若要準備在 Android Wear 上成功推出應用程式,首先請檢閱有關在 Wear 上營造絕佳應用程式體驗的指導方針。請參閱 <a href="{@docRoot}design/wear/index.html">Android Wear 設計指導方針</a>,以了解延伸 Wear 所適用應用程式的創意,以及有關設計與可用性的詳細資料。 +</p> + +<p> + 著手設計 Wear 體驗時,請確保閱讀並了解 Wear 應用程式的品質準則。在 Google Play 上,只會將可以在 Wear 上使用的應用程式指定為 Wear 應用程式,若您的應用程式符合一組基本的品質準則,則可以參加。如需詳細資料,請參閱 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 應用程式品質</a>。 +</p> + +<h3 id="develop_app">2.開發適用於 Wear 的卓越應用程式</h3> + +<p> +閱讀指導方針後,下一步是開發應用程式。以下各節將描述如何開始為 Wear 建置絕佳的應用程式體驗。 +</p> + +<h4>設計第一</h4> + +<p> + Android Wear 旨在於正確的時間為使用者提供正確的資訊。Android Wear 自動啟動,可供簡略瀏覽,需要很少或不需要使用者介入,從而提供絕佳體驗。雖然所有應用程式都能將基本通知傳送至 Wear 裝置而無需修改,但是為 Wear 建置的卓越應用程式經過改進,可提供完美的高品質體驗、使用不同的螢幕版面配置,並為使用者提供引人注目的功能組。 +</p> + +<p> + 考慮 Wear 應用程式時,請檢閱<a href="{@docRoot}training/building-wearables.html">開發人員文件</a>以及<a href="{@docRoot}design/wear/index.html">可用性指導方針</a>,然後對以可能的最大限度加以使用進行規劃。您可以使用 SDK 與支援資源庫中提供的 API 為使用者設計絕佳的通知體驗。此外,您還可以選擇建置直接在穿戴式裝置上執行的應用程式。 +</p> + +<h4>封裝您的應用程式</h4> + +<p> + 我們建議在提供用於手機、平板電腦及其他裝置的既有應用程式過程中,提供 Wear 應用程式 (使用相同的套件名稱與市集清單) 的體驗。藉由此方法,使用者可以順利升級至您的 Wear 體驗,您也可以利用在應用程式用於手機與平板電腦時所取得的評論與評分。若穿戴式裝置應用程式依賴某應用程式來發揮功能,應始終將穿戴式裝置應用程式封裝在該應用程式中。若要了解封裝方式,請參閱<a href="{@docRoot}training/wearables/apps/packaging.html">封裝穿戴式裝置應用程式</a>。 +</p> + +<h4>在多種裝置上進行測試</h4> + +<p> + 在整個設計與開發過程中,請務必採用適當的裝置執行使用者體驗的原型建立與測試。強烈建議您儘早取得一或多個 Android Wear 裝置,或使用不同的模擬器組態進行開發,並設定測試環境。請務必在方形與圓形版面配置上最佳化您的設計。 +</p> + +<h3 id="test_app">3.測試 Wear 應用程式品質</h3> + +<p> + 應將您的 Wear 應用程式設計為在 Android Wear 上具有良好的執行狀況與極佳的外觀,並應提供可能最優的使用者體驗。Google Play 會展示所選的高品質 Wear 應用程式以簡化探尋。以下說明您如何參加並提供使用者會喜愛的 Android Wear 應用程式: +</p> + +<ul> + <li>符合核心應用程式品質指導方針 <ul> + <li>遵循 <a href="{@docRoot}design/index.html">Android 設計指導方針</a>。請格外注意在應用程式中使用<a href="http://www.google.com/design/spec/material-design/introduction.html">材料設計</a>。 + </li> + + <li>根據<a href="{@docRoot}distribute/essentials/quality/core.html">核心應用程式品質指導方針</a>測試您的應用程式。 + </li> + </ul> + </li> + <li>符合 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 應用程式品質</a>準則 <ul> + <li>遵循 <a href="{@docRoot}training/building-wearables.html">Wear 應用程式開發</a>的最佳做法</li> + <li>確保您的應用程式符合所有 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 應用程式品質</a>準則</li> + </ul> + </li> +</ul> + +<h3 id="opt_in">4.選擇 Android Wear 並發行</h3> + +<p> + 若您已建置準備發行的 APK,並已進行測試,確保其符合所有 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 應用程式品質</a>準則,請將其上傳至 Developer Console。使用 Wear 螢幕擷取畫面更新您的市集清單,然後視需要設定散佈選項。若您不熟悉如何在 Google Play 上準備推出應用程式,請參閱<a href="{@docRoot}distribute/googleplay/publish/preparing.html">推出檢查清單</a>。 +</p> + +<p> + 您可以先從 Developer Console 的 [定價與散佈]<strong></strong> 區段中選擇 Android Wear,然後發佈至使用者。該選擇意味著您希望透過 Google Play 讓 Android Wear 使用者更容易探尋您的應用程式,且您的應用程式符合 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 應用程式品質</a>準則。 +</p> + +<p> + 您選擇並儲存變更後,即可照常發行應用程式。此外,Google Play 會提交您的應用程式以根據 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 應用程式品質</a>準則進行檢閱,並向您通知結果。如需有關如何追蹤您應用程式核准狀態的詳細資料,請參閱下一節。 +</p> + +<p> + 若您的應用程式符合所有 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 應用程式品質</a>準則,Google Play 會讓 Android Wear 使用者更容易探尋該應用程式。您的應用程式也有資格成為應用程式集合與推廣中展示機會更多的精選應用程式。 +</p> + +<p> + 請注意,選擇與檢閱不會影響您的應用程式在 Google Play 市集內的可用性,您的應用程式一經發行即可使用。 +</p> + +<p> + 在 Developer Console 中選擇 Android Wear 的步驟如下: +</p> + +<ol> + <li>確保您的應用程式符合所有 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 應用程式品質</a>準則 + </li> + + <li>將 Wear 螢幕擷取畫面新增至應用程式的市集清單 + </li> + + <li>在 [所有應用程式]<strong></strong> 頁面中,按一下您希望選擇的應用程式。 + </li> + + <li>在 [定價與散佈]<strong></strong> 下,向下捲動以尋找 <em>Android Wear</em> 及選擇核取方塊。 + </li> + + <li>按一下 [在 Android Wear 上散佈您的應用程式]<em></em> 旁的核取方塊。 + </li> + + <li>按一下 [儲存]<strong></strong> 以儲存 [定價與散佈] 的變更。 + </li> +</ol> + +<div style="padding-top:1em"> + <img style="border:2px solid #ddd;" src="{@docRoot}images/gp-wear-opt-in.png"> + <p class="caption"> + <strong>Wear 選擇:</strong>從 Developer Console 中選擇 Android Wear,以便將應用程式包括在 Android Wear 中。 + </p> +</div> + +<h3 id="track_review">5.追蹤您的檢閱與核准</h3> + +<p> + 若您的應用程式符合 Android Wear 的技術與品質準則 (如上所述),則 Android Wear 上的使用者能更輕鬆地探尋您的應用程式。若您的應用程式不符合該準則,您將收到<strong>傳送至您開發人員帳戶地址的通知電子郵件</strong>,內含需要修正的領域的摘要。若您已進行所需調整,可以將新版本的應用程式上傳至 Developer Console。 +</p> + +<p> + 在 Developer Console 中,您隨時可以在應用程式 [定價與散佈] <strong></strong> 頁面中的 [Android Wear]<em></em> 下,檢查應用程式的檢閱與核准狀態。 +</p> + +<p> + 存在三種核准狀態: +</p> + +<ul> + <li> + <em>待決</em> - 已傳送您的應用程式供檢閱,檢閱尚未完成。 + </li> + + <li> + <em>已核准</em> - 已檢閱並核准您的應用程式。Android Wear 使用者可以更輕鬆地探尋該應用程式。 + </li> + + <li> + <em>未核准</em> - 已檢閱但未核准您的應用程式。如需有關為何未核准應用程式的資訊,請檢查通知電子郵件。您可以解決所有問題,然後再次選擇並發行,以啟動另一次檢閱。 + </li> +</ul> + +<p>若要了解您應用程式的評估方式,請參閱 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 應用程式品質</a>文件。 </p> + + + <h3>相關資源</h3> + + <div class="resource-widget resource-flow-layout col-13" + data-query="collection:wearlanding" + data-cardSizes="6x2" + data-maxResults="3"> + </div>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/tools/launch-checklist.jd b/docs/html-intl/intl/zh-tw/distribute/tools/launch-checklist.jd new file mode 100644 index 0000000..6e97417 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/distribute/tools/launch-checklist.jd @@ -0,0 +1,792 @@ +page.title=推出檢查清單 +page.metaDescription=為使用者提供應用程式這一完整程序的基本概述。請在開發時儘早閱讀本檢查清單,以協助您為實現在 Google Play 上成功推出應用程式而進行規劃。 +meta.tags="localizing, publishing, disttools" +page.tags="launch, publishing, Google Play" +page.image=/distribute/images/launch-checklist.jpg + +@jd:body + +<div id="qv-wrapper"> + <div id="qv" style="width:280px"> + <h2>檢查清單</h2> + <ol> + <li><a href="#understand-publishing">1.了解發行程序</a></li> + <li><a href="#understand-policies">2.了解 Google Play 政策</a></li> + <li><a href="#test-quality">3.測試核心應用程式品質</a></li> + <li><a href="#determine-rating">4.判斷內容評分</a></li> + <li><a href="#determine-country">5.判斷國家/地區散佈</a></li> + <li><a href="#confirm-size">6.確認整體大小</a></li> + <li><a href="#confirm-platform">7.確認平台與螢幕範圍</a></li> + <li><a href="#decide-price">8.決定免費還是付費</a></li> + <li><a href="#consider-billing">9.使用應用程式內交易</a></li> + <li><a href="#set-prices">10.為您的產品設定價格</a></li> + <li><a href="#start-localization">11.開始當地語系化</a></li> + <li><a href="#prepare-graphics">12.準備推廣圖形、螢幕擷取畫面及影片</a></li> + <li><a href="#build-upload">13.建置準備發行的 APK</a></li> + <li><a href="#plan-beta">14.規劃 Beta 版</a></li> + <li><a href="#complete-details">15.完成市集清單</a></li> + <li><a href="#use-badges">16.使用 Google Play 徽章與連結</a></li> + <li><a href="#final-checks">17.最終檢查及發行</a></li> + <li><a href="#support-users">18.在推出後支援使用者</a></li> + </ol> + </div> +</div> + +<div class="top-right-float" style="width:194px"><img src="{@docRoot}distribute/images/launch-checklist.jpg"></div> + +<p> + 在 Google Play 上發行應用程式及將其散佈至使用者之前,您需要準備好應用程式、對其進行測試,並準備推廣材料。 +</p> + +<p> + 本頁面將協助您了解發行程序,並為在 Google Play 上成功推出產品做好準備。本頁面將概述您在 Google Play 上發行應用程式之前需要完成的某些任務,例如建立準備發行的已簽署應用程式套件 (APK)、了解應用程式的需求,以及為您的每個應用程式建立產品頁面與圖形資產。 +</p> + +<p> + 準備與發行任務會進行編號,以便您可以大致了解任務序列。但是,您可以透過適用於您的任何順序來處理任務,可以視需要略過任何步驟。 +</p> + +<p> + 為了發行應用程式而逐步完成工作時,您將取得多種支援資源。每個步驟中將提供相關連結。 +</p> + +<div class="headerLine"> + <h2 id="understand-publishing"> + 1.了解發行程序 + </h2> + + +</div> + +<p> + 您應先花一點時間閱讀並了解發行的整體工作流程,並熟悉該程序的運作方式,然後再開始執行本檢查清單中的步驟。尤其是您或您的開發團隊需要準備應用程式,以使用所有 Android 應用程式通用的程序進行發行。<a href="{@docRoot}tools/publishing/publishing_overview.html">發行工作流程文件</a>將提供有關發行如何運作以及如何準備好 APK 以執行發行的詳細資料。 +</p> + +<p> + 通常在熟悉發行之後,請繼續進行閱讀,以了解在 Google Play 上發行應用程式時應考慮的問題。 +</p> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/toolsreference/launchchecklist/understanding" +data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" +data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="understand-policies"> + 2.了解 Google Play 政策與合約 + </h2> + + +</div> + +<p> + 請確保您已了解並遵循在註冊時已接受的 Google Play 計劃政策。Google Play 會主動強制執行政策,任何違規都會導致您的應用程式擱置,若發生重複違規,會終止您的開發人員帳戶。 +</p> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/toolsreference/launchchecklist/policies" data-sortorder= +"-timestamp" data-cardsizes="6x3" data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="test-quality"> + 3.測試品質 + </h2> + + +</div> + +<p> + 在 Google Play 上發行應用程式之前,請務必確保在您針對的所有裝置上,這些應用程式都能符合對所有 Android 應用程式的基本品質預期。您可以設定測試環境,並根據<strong>適用於所有應用程式的一組簡短的品質準則</strong>對應用程式進行測試,以檢查應用程式的品質。如需完備資訊,請參閱<a href="{@docRoot}distribute/essentials/quality/core.html">核心應用程式品質</a>指導方針。 +</p> + +<p> + 若您的應用程式針對平板電腦裝置,請確保該應用程式能為平板電腦客戶提供引人注目的豐富體驗。請參閱<a href="{@docRoot}distribute/essentials/quality/tablets.html">平板電腦應用程式品質</a>指導方針,以了解針對平板電腦對您的應用程式執行最佳化所採用方式的有關建議。 +</p> + +<p> + 若計劃讓您的應用程式可供 Google Play for Education 使用,您需要確保應用程式適合 K-12 教室,並確保其能提供出眾的教育價值。如需了解您的教育應用程式應展示特性的有關資訊,請參閱<a href="{@docRoot}distribute/essentials/gpfe-guidelines.html">教育指導方針</a>。 +</p> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/toolsreference/launchchecklist/quality" data-sortorder= +"-timestamp" data-cardsizes="6x3,6x3,6x3,9x3,9x3,9x3" data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="determine-rating"> + 4.判斷您應用程式的內容評分 + </h2> + + +</div> + +<p> + Google Play 需要您設定應用程式的內容評分,該評分會向 Google Play 使用者通知應用程式的成熟度層級。發行之前,您應確認要使用的評分層級。可用的內容評分層級如下: +</p> + +<ul> + <li> + <p> + 所有人 + </p> + </li> + + <li> + <p> + 低成熟度 + </p> + </li> + + <li> + <p> + 中成熟度 + </p> + </li> + + <li> + <p> + 高成熟度 + </p> + </li> +</ul> + +<p> + 在 Android 裝置上,Android 使用者可以設定所需的成熟度層級以供瀏覽。隨後,Google Play 會根據該設定對應用程式進行篩選,因此您選取的內容評分可以影響應用程式向使用者的散佈。您可以在 Developer Console 中指派 (或變更) 應用程式的內容評分,不需要在您的二進位檔案中進行任何變更。 +</p> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/toolsreference/launchchecklist/rating" data-sortorder= +"-timestamp" data-cardsizes="9x3,6x3,6x3,9x3,9x3,9x3" data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="determine-country"> + 5.判斷國家/地區散佈 + </h2> + + +</div> + +<p> + 藉由 Google Play,您可以控制將您的應用程式散佈至哪些國家/地區。為了實現最廣泛的散佈並擁有可能最大的客戶群,通常您會希望將應用程式散佈至能力所及的所有國家/地區。但是,由於業務需求、應用程式需求或推出相依性等原因,您可能希望將一或多個國家/地區排除在散佈範圍之外。 +</p> + +<p> + 請務必儘早判斷散佈的確切國家/地區,因為這會影響以下項目: +</p> + +<ul> + <li> + <p> + 對應用程式中當地語系化資源的需求。 + </p> + </li> + + <li> + <p> + 對 Developer Console 中當地語系化應用程式描述的需求。 + </p> + </li> + + <li> + <p> + 可能特定於某些國家/地區的應用程式所遵循的法律需求。 + </p> + </li> + + <li> + <p> + 時區支援、本地定價等。 + </p> + </li> +</ul> + +<p> + 對於您要針對的國家/地區,您應評估當地語系化需求 (從您的應用程式及其 Google Play 清單詳細資料兩方面),並在您預期的推出日期之前開始當地語系化工作。 +</p> + +<p> + 如需了解當地語系化程序的關鍵步驟與考量事項,請參閱<a href="{@docRoot}distribute/tools/localization-checklist.html">當地語系化檢查清單</a>。 +</p> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/toolsreference/launchchecklist/country" data-sortorder= +"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="confirm-size"> + 6.確認應用程式的整體大小 + </h2> + + +</div> + +<p> + 應用程式的整體大小會影響其設計以及在 Google Play 上的發行方式。目前,在 Google Play 上發行的最大 APK 大小為 <strong>50 MB</strong>。若您的應用程式超出該大小,或您希望提供次要下載,可以使用 <a href="{@docRoot}google/play/expansion-files.html">APK 擴充檔案</a>,Google Play 會在其伺服器基礎架構上免費主控這些檔案,並自動處理裝置的下載。 +</p> + +<ul> + <li> + <p> + 在 Google Play 上發行的最大 APK 大小為 50 MB。 + </p> + </li> + + <li> + <p> + 對於每個 APK,您可以使用最多兩 (2) 個 APK 擴充檔案,每個最大為 2GB。 + </p> + </li> +</ul> + +<p> + 使用 APK 擴充檔案是 散佈大型應用程式的極具成本效益的便利方式。但是,使用 APK 擴充檔案需要在您的應用程式二進位檔案中進行某些變更,因此您需要先進行這些變更,然後再建立準備發行的 APK。 +</p> + +<p> + 若要最大限度降低應用程式二進位檔案的大小,請確保在建置準備發行的 APK 時,對您的程式碼執行 <a href="{@docRoot}tools/help/proguard.html">Proguard</a> 工具或類似擾亂器。 +</p> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/toolsreference/launchchecklist/size" data-sortorder= +"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="confirm-platform"> + 7.確認應用程式的平台與螢幕相容性範圍 + </h2> + + +</div> + +<p> + 在發行之前,請務必確保您的應用程式專為在您希望針對的 Android 平台版本與裝置螢幕大小上正確執行而設計。 +</p> + +<p> + 從應用程式相容性的視角看來,Android 平台版本由 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API 層級</a>定義。您應確認應用程式與 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><minSdkVersion></a> 相容的最低版本,因為這會影響應用程式在發行後向 Android 裝置的散佈。 +</p> + +<p> + 對於螢幕大小,您應確認在您希望支援的螢幕大小與像素密度範圍內,應用程式能正確執行並具有良好的外觀。您應遵循<a href="{@docRoot}guide/practices/screens_support.html">支援多個螢幕</a>中提供的建議,為多個螢幕大小提供可擴充的支援。但是,若您未能執行此操作,請使用 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><supports-screens></a> 宣告應用程式支援的最小螢幕。隨後 Google Play 會對應用程式的可用性進行相應限制,使其可供至少具有所宣告螢幕大小的裝置使用。 +</p> + +<p> + 若要更好地了解 Android 平台版本的目前裝置滲透力及所有 Android 裝置中的螢幕大小,請參閱<a href="{@docRoot}about/dashboards/index.html">裝置儀表板</a>圖表。 +</p> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/toolsreference/launchchecklist/platform" data-sortorder= +"-timestamp" data-cardsizes="6x3,6x3,6x3" data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="decide-price"> + 8.決定您的應用程式是免費還是付費 + </h2> + + +</div> + +<div class="figure"> + <img src="{@docRoot}images/gp-launch-checklist-1.png"> +</div> + +<p> + 在 Google Play 上,您可以採用免費下載或付費下載的形式發行應用程式。免費應用程式可供 Google Play 中的任何 Android 使用者下載。只有位於支援付費下載的國家/地區,並已在 Google Play 中註冊付費形式 (例如信用卡或流動電訊商帳單付款服務) 的使用者,才能下載付費應用程式。 +</p> + +<p> + 決定您的應用程式是免費還是付費非常重要,因為在 Google Play 上,<strong>免費應用程式必須始終免費</strong>。 +</p> + +<ul> + <li> + <p> + 以免費應用程式的形式發行應用程式後,您無法將其變更為付費應用程式。但是,您仍可透過 Google Play 的<a href="{@docRoot}google/play/billing/index.html">應用程式內交易</a>服務,販售<a href="{@docRoot}google/play/billing/billing_overview.html#products">應用程式內的產品</a>與<a href="{@docRoot}google/play/billing/billing_subscriptions.html">訂閱</a>。 + </p> + </li> + + <li> + <p> + 若您以付費應用程式的形式發行應用程式,<em>可以</em>隨時將其變更為免費應用程式 (<strong>但此後無法再將其變更為付費應用程式</strong>)。此外,您也可以販售應用程式內產品與訂閱。 + </p> + </li> +</ul> + +<p> + 若您的應用程式為付費,或您要販售應用程式內產品,需要先<a href="https://developers.google.com/wallet/digital/training/getting-started/merchant-setup">設定 Google Wallet Merchant Account (Google 電子錢包商家帳戶)</a>,然後才能發行。 +</p> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/toolsreference/launchchecklist/price" data-sortorder= +"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="consider-billing"> + 9.考慮使用應用程式內交易 + </h2> + + +</div> + +<p> + 藉由 Google Play <a href="{@docRoot}google/play/billing/index.html">應用程式內交易</a>,您可以販售應用程式內的數位內容。您可以使用該服務販售廣泛的內容,包括可下載的內容 (例如媒體檔案或相片) 與虛擬內容 (例如遊戲級別或藥劑)。藉由應用程式內交易服務,您可以從應用程式內販售一次性購買項目及訂閱項目。如此可協助您在應用程式的整個生命週期內,實現應用程式的獲利。 +</p> + +<p> + 若您要尋求更多方式來實現應用程式的獲利並營造吸引力,應考慮採用應用程式內交易或立即購。這些服務在使用者與開發人員中已非常普遍。若要使用應用程式內交易或立即購,需要對您的應用程式二進位檔案進行變更,因此您需要先完成並測試您的實作,然後再建立準備發行的 APK。 +</p> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/toolsreference/launchchecklist/purchasemethod" +data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" +data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="set-prices"> + 10.為您的產品設定價格 + </h2> + + +</div> + +<p> + 若您的應用程式為付費應用程式,或者您要販售應用程式內產品或實體產品,則藉由 Google Play,可為全球市場的使用者設定採用多種貨幣的產品價格。您可以個別設定採用不同貨幣的價格,因此可以根據市場狀況與匯率對價格進行靈活調整。 +</p> + +<p> + 在發行之前,請考慮如何為您的產品設定價格,以及採用各種貨幣時的價格是多少。然後,可以透過 Developer Console 設定採用所有可用貨幣的價格。 +</p> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/toolsreference/launchchecklist/setprice" data-sortorder= +"-timestamp" data-cardsizes="9x3,9x3,9x3,9x3,9x3,9x3" data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="start-localization"> + 11.開始當地語系化 + </h2> + + +</div> + +<p> + 對於您要針對的國家/地區,良好的想法是評估當地語系化需求,確保您的應用程式實現國際化,並在您預期的推出日期之前開始當地語系化工作。 +</p> + +<p> + 除了應用程式設計外,至少需要考慮當地語系化的以下三個方面: +</p> + +<ul> + <li> + <p> + 對您應用程式中的字串、影像與其他資源執行當地語系化。 + </p> + </li> + + <li> + <p> + 對您的應用程式在 Google Play 上的市集清單詳細資料執行當地語系化。 + </p> + </li> + + <li> + <p> + 對市集清單隨附的應用程式圖形資產、螢幕擷取畫面與影片執行當地語系化。 + </p> + </li> +</ul> + +<p> + 如需了解當地語系化程序的關鍵步驟與考量事項,請參閱<a href="{@docRoot}distribute/tools/localization-checklist.html">當地語系化檢查清單</a>。 +</p> + +<p> + 若要對市集清單執行當地語系化,請先建立並完成應用程式標題、描述與推廣文字。收集並傳送供當地語系化的上述所有項目。此外,您也可以選擇翻譯「最近變更」文字,以說明應用程式的更新。隨後,您可在 Developer Console 中新增執行當地語系化的清單詳細資料,或者可以選擇讓 Google Play 將您的清單詳細資料自動翻譯為您支援的語言。 +</p> + +<p> + 若要讓您的應用程式清單對全球客戶群具備吸引力,關鍵在於建立推廣圖形、螢幕擷取畫面及影片的當地語系化版本。例如,為了取得最大效益,您的應用程式功能圖形可能包括應翻譯的文字。您可以針對每種語言建立推廣圖形的不同版本,並將其上傳至 Developer Console。若您提供推廣影片,可以建立該影片的當地語系化版本,然後針對您支援的每種語言,新增正確的當地語系化影片的連結。 +</p> + +<p> + 完成翻譯後,請視需要將其移至應用程式資源中,並測試其是否能正確載入。上傳資產並設定市集清單時,請儲存應用程式的已翻譯字串詳細資料以供稍後使用。 +</p> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/toolsreference/launchchecklist/localization" +data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" +data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="prepare-graphics"> + 12.準備推廣圖形、螢幕擷取畫面及影片 + </h2> + + +</div> + +<p> + 在 Google Play 上發行時,您可以提供多種高品質圖形資產,以展示您的應用程式或品牌。在發行後,這些資產會顯示在您的市集清單頁面上、搜尋結果中以及其他位置。這些圖形資產是市集清單頁面成功吸引使用者的關鍵,因此您應考慮由專業人員來產生這些資產。螢幕擷取畫面與影片也非常重要,因為這些項目會展示應用程式的外觀、使用或播放方式,以及與眾不同之處。 +</p> + +<p> + 所有圖形資產都應經過精心設計,以易於查看,並以色彩豐富、妙趣橫生的方式著重展示您的應用程式或品牌。這些資產參考的標誌與圖示應該與使用者下載應用程式後,在所有應用程式啟動器中看到的標誌與圖示相同。此外,您的圖形資產還應非常適合您所發行所有應用程式的圖形資產,使用者在您的市集清單頁面上也將看到您的圖形資產。 +</p> + +<p> + 為了協助您以更有效的方式向全球受眾行銷您的應用程式,Google Play 可讓您建立推廣圖形、螢幕擷取畫面與影片的當地語系化版本,並將其上傳至 Developer Console。使用者造訪應用程式的市集清單時,Google Play 會顯示您針對使用者的語言而提供的推廣圖形、螢幕擷取畫面及影片。 +</p> + +<p> + 若要對您的推廣圖形執行當地語系化,您可以翻譯內嵌文字、使用不同的圖像或簡報,或者變更行銷方法以最大限度因應特定語言使用者的需求。例如,若您的功能或推廣圖形包括內嵌的產品名稱或標語,您可以翻譯該文字,並將其新增至推廣圖形的當地語系化版本中。 +</p> + +<p> + 由於當地語系化的圖形資產與影片非常重要,因此您應在預期的發行日期之前,就著手開始建立這些資產與影片,並對其執行當地語系化。 +</p> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/toolsreference/launchchecklist/graphics" data-sortorder= +"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="build-upload"> + 13.建置並上傳準備發行的 APK + </h2> + + +</div> + +<p> + 若您對應用程式因應 UI、相容性及品質需求的狀況感到滿意,可以建置準備發行的應用程式版本。您可以將準備發行的 APK 上傳至 Developer Console,然後將其向使用者散佈。 +</p> + +<p> + 對於所有應用程式而言,不論採用何種散佈方式,對準備發行的 APK 進行預備的程序都相同。一般該程序包括基本程式碼清理與最佳化、建置版本金鑰並使用版本金鑰登入,以及最終測試。 +</p> + +<p> + 如需了解有關如何建立準備發行的應用程式版本的完備詳細資料,請閱讀<a href="{@docRoot}tools/publishing/preparing.html">準備發行</a>。 +</p> + +<p> + 備妥準備發行的 APK 後,可以將其上傳至 Developer Console。若需要,可以在發行前使用更近的版本取代 APK。 +</p> +<!--<h3 class="rel-resources clearfloat">Related resources</h3> + +<div class="resource-widget resource-flow-layout col-13" + data-query="collection:distribute/toolsreference/launchchecklist/build" + data-sortOrder="-timestamp" + data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3" + data-maxResults="6"></div>--> + +<div class="headerLine"> + <h2 id="plan-beta"> + 14.規劃 Beta 版 + </h2> + + +</div> + +<div class="sidebox-wrapper" style="float:right;"> + <div class="sidebox"> + <h2> + 輕鬆的 beta 測試 + </h2> + + <p> + 藉由 Google Play,您可以在全球任何地點設定多組 alpha 與 beta 測試者。下次登入 Developer Console 時,請了解這項強大功能。 + </p> + </div> +</div> + +<p> + 在推出應用程式之前,取得真實的使用者回饋通常極具價值,在推出新應用程式時更是如此。強烈建議您向關鍵市場的使用者散佈應用程式的測試版,並提供簡易方式讓使用者提供回饋並報告錯誤。 +</p> + +<p> + Google Play 可以協助您設定應用程式的試用計劃。您登入 Developer Console 並上傳 APK 後,可以設定多組使用者對應用程式進行 alpha 與 beta 測試。您可以先設定 alpha 測試者的較小群組,然後設定 beta 測試者的較大群組。新增使用者後,使用者可以存取您應用程式的市集清單並安裝應用程式。<strong>alpha 或 beta 版本的使用者無法發佈評論或評分</strong>,因此<strong>對 Google Play 上您的評分並無風險</strong>。您需要針對要提供的測試回饋安排某種機制,例如 Google Forum 或 Google+。 +</p> + +<p> + 您收到的回饋將協助您調整 UI、翻譯與市集清單,以確保為使用者提供絕佳的體驗。 +</p> +<!-- Related resources + +<table> + <tr> + <td>Beta-testing and Staged Rollouts +See how you can facilitate testing with Google Play.</td> + </tr> +</table> --> + +<div class="headerLine"> + <h2 id="complete-details"> + 15.完成應用程式的市集清單 + </h2> + + +</div> + +<p> + 在 Google Play 上,將在使用者的市集清單頁面、使用者為詳細了解您的應用程式而造訪的頁面,以及使用者為決定在其 Android 裝置或網頁上購買或下載您的應用程式 而瀏覽的頁面上,向使用者展示您應用程式的產品資訊。 +</p> + +<p> + Google Play 會在您的市集清單頁面上,為您提供多種方式 (從色彩豐富的圖形、螢幕擷取畫面與影片,到當地語系化的描述、版本詳細資料與其他應用程式連結) 以推廣應用程式並吸引使用者。在準備發行您的應用程式時,請確保利用產品詳細資料頁面能提供的所有資訊,盡可能提高您的應用程式對使用者的吸引力。 +</p> + +<p> + 您應在預期的推出日期之前,開始規劃產品頁面,準備當地語系化的描述、高品質的圖形資產、螢幕擷取畫面與影片等。 +</p> + +<p> + 在接近預期的發行日期時,您應熟悉 Developer Console 中與市集清單組態頁面關聯的所有欄位、選項與資產。在收集頁面的資訊與資產時,請確保可將其輸入或上傳至 Developer Console,直到頁面完成且可供發行為止。 +</p> + +<p> + 在 Developer Console 中設定應用程式針對的地理位置後,請謹記針對您支援的所有語言,新增當地語系化的市集清單、推廣圖形等。 +</p> + +<p> + 若您的應用程式針對平板電腦裝置,請確保納入平板電腦上所執行應用程式的至少一個螢幕擷取畫面,並在應用程式描述、版本資訊、推廣活動及其他位置著重展示您的應用程式對平板電腦的支援。 +</p> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/toolsreference/launchchecklist/productdetails" +data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" +data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="use-badges"> + 16.在推廣活動中使用 Google Play 徽章與連結 + </h2> + + +</div> + +<p> + 擁有 Google Play 徽章,即可採用官方許可的方式向 Android 使用者推廣您的應用程式。使用 <a href="{@docRoot}distribute/tools/promote/badges.html">Google Play 徽章產生器</a>可以快速建立徽章,以便將使用者連結至透過網頁、廣告、評論等提供的產品。此外,您也可以使用特殊的<a href="{@docRoot}distribute/tools/promote/linking.html">連結格式</a>直接連結至您的市集清單頁面、產品清單或搜尋結果。 +</p> + +<p> + 若要協助您的應用程式在推出後吸引關注,強烈建議您透過盡可能多的通路,在盡可能多的國家/地區舉行宣告產品的推廣活動,以便為推出產品提供支援。例如,您可以使用廣告投放、社交網路或部落格貼文、影片與其他媒體、採訪與評論或可以採用的其他任何通路對產品的推出進行推廣。 +</p> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/toolsreference/launchchecklist/badges" data-sortorder= +"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="final-checks"> + 17.最終檢查及發行 + </h2> + + +</div> + +<p> + 若您認為發行的準備事宜已就緒,請登入 Developer Console,然後花一點時間執行最後的幾項檢查。 +</p> + +<p> + 請確保: +</p> + +<ul> + <li> + <p> + 您的開發人員簡介具有正確的資訊,並已連結至正確的 Google Wallet Merchant Account (Google 電子錢包商家帳戶) (若您要販售產品)。 + </p> + </li> + + <li> + <p> + 您上傳的應用程式版本正確無誤。 + </p> + </li> + + <li> + <p> + 市集清單的所有部分 (包括所有圖形資產、螢幕擷取畫面、影片、當地語系化的描述等) 都已準備就緒。 + </p> + </li> + + <li> + <p> + 您已將應用程式的定價設為免費或付費。 + </p> + </li> + + <li> + <p> + 您已設定所針對的國家/地區 (及電訊商),並已設定以買家貨幣表示的產品價格 (若適用) + </p> + </li> + + <li> + <p> + 「相容裝置」會顯示您的應用程式將散佈至所針對的裝置。若並非如此,您應與開發團隊核對應用程式的需求與篩選規則。 + </p> + </li> + + <li> + <p> + 您已提供正確的網站連結及正確的支援電子郵件地址。 + </p> + </li> + + <li> + <p> + 您的應用程式並未違犯內容政策指導方針。 + </p> + </li> + + <li> + <p> + 您已確認應用程式符合 Google Play 上發佈 Android 內容的指導方針,並符合美國出口法規。 + </p> + </li> +</ul> + +<p> + 您的應用程式現在即可發行! +</p> + +<p> + 若您要發行更新,請確保閱讀<a +href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=113476&topic=2365760&ctx=topic">發行更新的需求</a>。 +</p> + +<p> + 若您已準備就緒,請按一下 Developer Console 中的 [發行]<strong></strong> 按鈕。在數小時內,會向使用者提供您的應用程式,您的產品頁面會顯示在 Google Play 中,供瀏覽、搜尋或自您的推廣活動進行連結。 +</p> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/toolsreference/launchchecklist/finalchecks" +data-sortorder="-timestamp" data-cardsizes="6x3,6x3,6x3,9x3,9x3,9x3" +data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="support-users"> + 18.在推出後支援使用者 + </h2> + + +</div> + +<p> + 在發行應用程式或應用程式更新後,為您的客戶提供支援是非常關鍵的舉措。快速及時、謙恭有禮的支援會為使用者提供更優的體驗,進而為您的產品帶來更高的評分與更積極的評論。若您積極回應使用者的需求與回饋,使用者可能對您的應用程式更有興趣並推薦該應用程式。尤其是若您採用協調一致的推廣活動,在發行後更是如此。 +</p> + +<p> + 您可以採用多種方式與使用者保持連絡並為其提供支援。最基本的方式是在您的市集清單頁面上提供<em>支援電子郵件地址</em>。除此之外,您可以採用選擇的任何方式 (例如論壇、郵寄清單或 Google+ 頁面) 來提供支援。Google Play 團隊將針對下載、安裝與付費問題為使用者提供支援,但上述範圍之外的其他問題將由您負責解決。您可以支援的問題包括功能要求、應用程式的使用問題,以及相容性設定的有關問題。 +</p> + +<p> + 在發行之後,請規劃以下事宜: +</p> + +<ul> + <li> + <p> + 在應用程式的市集清單頁面上,經常檢查對您的評分與評論。尋找暗示出現錯誤或其他問題的重複主題。 + </p> + </li> + + <li> + <p> + 留心新 Android 平台版本的推出,因為您應用程式的相容性設定可能需要更新。 + </p> + </li> + + <li> + <p> + 在您的網站上放置支援資源連結,並設定諸如論壇等其他任何支援。 + </p> + </li> + + <li> + <p> + 在您的市集清單頁面上提供適當的支援電子郵件地址,並在使用者花時間向您傳送電子郵件時予以回應。 + </p> + </li> + + <li> + <p> + 在 Google Play 所提供自動退款時段的基礎上,您自己的退款政策應慷慨大方,因為滿意的使用者更有可能在將來進行購買。 + </p> + </li> + + <li> + <p> + 確認並修正應用程式中的問題。這有助於讓您的應用程式清晰易懂,並有助於您在市集清單頁面上主動列出已知問題。 + </p> + </li> + + <li> + <p> + 盡可能地經常發行更新,同時避免因過於頻繁的更新而導致品質受損或讓使用者感到不快。 + </p> + </li> + + <li> + <p> + 在每次更新時,請確保提供所變更內容的摘要。您可以在 Developer Console 中輸入該資訊。使用者將閱讀該資訊,並會體會到您對提高應用程式的品質非常注重。 + </p> + </li> +</ul> +</ul> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" + data-query="collection:distribute/toolsreference/launchchecklist/afterlaunch" + data-sortOrder="-timestamp" + data-cardSizes="9x3,9x3,9x3,9x3,9x3,9x3" + data-maxResults="6"></div>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/distribute/tools/localization-checklist.jd b/docs/html-intl/intl/zh-tw/distribute/tools/localization-checklist.jd new file mode 100644 index 0000000..1b95d0b --- /dev/null +++ b/docs/html-intl/intl/zh-tw/distribute/tools/localization-checklist.jd @@ -0,0 +1,716 @@ +page.title=當地語系化檢查清單 +page.metaDescription=利用 Android 與 Google Play 提供的全球受眾。請閱讀本檢查清單,以大致了解如何為全球市場提供您的產品。 +meta.tags="localizing, publishing, disttools" +page.tags="local, l10n, translation, language" +page.image=/distribute/images/localization-checklist.jpg + +@jd:body + +<div id="qv-wrapper"> + <div id="qv" style="width:280px"> + <h2>檢查清單</h2> + <ol> + <li><a href="#identify-languages">1.確定目標語言與地區設定</a></li> + <li><a href="#design">2.針對當地語系化進行設計</a></li> + <li><a href="#manage-strings">3.管理進行當地語系化的字串</a></li> + <li><a href="#translate-strings">4.翻譯 UI 字串與其他資源</a></li> + <li><a href="#test">5.對您的當地語系化應用程式進行測試</a></li> + <li><a href="#prepare-launch">6.準備面向全球推出產品</a></li> + <li><a href="#support-users">7.在推出後支援全球使用者</a></li> + </ol> + </div> +</div> + +<div class="top-right-float" style="width:194px"> + <img src="{@docRoot}distribute/images/localization-checklist.jpg"> +</div> + +<p> + Android 與 Google Play 可為您的應用程式提供遍佈全球的受眾,以及在諸如日本、韓國、印度、巴西與俄羅斯等國家/地區內快速擴充且可以連絡的使用者群體。我們強烈建議您執行當地語系化,因為這會最大限度提高您應用程式的散佈潛能,吸引全球的使用者進行評分。 +</p> + +<p> + 當地語系化包含應用程式開發週期內的多項任務,預先的規劃不可或缺。本文件將協助您了解當地語系化的關鍵層面,讓您在 Google Play 上為面向全球成功推出應用程式而做好準備。 +</p> + +<div class="headerLine"> + <h2 id="identify-languages"> + 1.確定目標語言與地區設定 + </h2> + + +</div> + +<p> + 確定將應用程式散佈至哪些國家/地區以及當地使用者使用何種語言,這是當地語系化準備過程中基本但重要的一步。在市場商機巨大,但並未廣泛使用英語或其他國際語言的國家/地區,對應用程式進行當地語系化尤其重要。 +</p> + +<p> + 對於全球使用者,您可以在以下三個主要方面管理應用程式:國家/地區、地區設定及語言。其中,語言是當地語系化的關鍵考量事項 (由於日期、時間、貨幣及類似資訊的格式存在不同,因此地區設定也非常重要)。使用者會控制其 Android 裝置上使用的語言與地區設定,這兩項轉而會影響應用程式的顯示方式。 +</p> + +<p> + 通常,您會根據整體市場規模與商機、應用程式類別、競爭環境、當地定價及商業因素等,決定首先將哪些國家/地區作為目標。然後根據您針對的國家/地區,判斷應用程式中需要支援的語言。 +</p> + +<p> + 隨後,您可以決定當地語系化為所針對國家/地區的部分或全部語言。首先當地語系化為主要地區語言,然後隨使用者群體的擴充新增更多語言,這可能是合理的舉措。 +</p> + +<p> + 確定目標語言之後,您可以專注於針對這些市場的開發、翻譯、測試及行銷活動。 +</p> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/toolsreference/localizationchecklist/identifylocales" +data-sortorder="-timestamp" data-cardsizes="9x3," data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="design"> + 2.針對當地語系化進行設計 + </h2> + + +</div> + +<p> + 在確定進行當地語系化的目標語言後,請評估為了在應用程式中支援這些語言而需要完成的工作,並及早開始規劃工作。請考慮每種語言中的字彙擴充、書寫體需求、字元間距及換行限制、從左向右及從右向左行文順序的支援以及可能存在的其他因素。 +</p> + +<h4> + <strong>設計一組彈性版面配置</strong> +</h4> + +<p> + 建立版面配置時,請確保將具有文字的 UI 元素設計為具有較大空間。良好的做法是,提供較您的語言通常所需空間更多 (正常狀況下多 30%) 的空間 ,以容納其他語言。 +</p> + +<p> + 此外,元素應該能在水平或垂直方向擴充,以顧及 UI 字串或輸入文字寬度與高度的變化。在任何目標語言中,您的文字字串都不應與邊框或螢幕邊緣重疊。 +</p> + +<p> + 若您仔細設計 UI,通常可以將一組版面配置用於您支援的所有語言。如需詳細資訊,請參閱<a href="{@docRoot}training/basics/fragments/fragment-ui.html">建置彈性 UI</a>。 +</p> + +<h4> + <strong>在需要時使用備用版面配置</strong> +</h4> + +<p> + 若您的 UI 無法容納其中一種目標語言的文字,可以僅針對該語言建立<a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">備用版面配置</a>。藉由 Android,可以輕鬆宣告針對特定語言、地區設定、螢幕大小等而載入的多組版面配置與其他資源,只需以適當的資源識別碼為這些版面配置與資源建立標籤即可。雖然備用版面配置具備彈性,但是也會導致應用程式的維護難度隨時間演進而不斷升高。通常,使用彈性更優的單一版面配置是更穩妥的作法。 +</p> + +<h4> + <strong>支援 RTL 版面配置與文字</strong> +</h4> + +<p> + 若您要散佈至使用從右向左 (RTL) 行文順序的國家/地區,應考慮在可能的範圍內,實作對 RTL 版面配置與文字顯示及編輯的支援。 +</p> + +<p> + Android 4.1 已引入對雙向文字的有限支援,應用程式可藉此以從左向右 (LTR) 及從右向左 (RTL) 的行文順序顯示及編輯文字。Android 4.2 已新增<a href="http://android-developers.blogspot.fr/2013/03/native-rtl-support-in-android-42.html">對 RTL 版面配置的完備原生支援</a> (包括版面配置鏡像),因此您可為所有使用者提供相同的絕佳應用程式體驗。 +</p> + +<p> + 對於 Android 4.2 使用者,至少可以輕鬆地新增基本 RTL 版面配置鏡射,這對因應 RTL 使用者的需求大有幫助。 +</p> + +<h4> + <strong>使用系統提供的日期、時間、數字與貨幣的格式</strong> +</h4> + +<p> + 在您的應用程式指定因地區設定而異的日期、時間、數字、貨幣及其他實體時,請確保使用系統提供的格式,而非應用程式特定的格式。請謹記,並非所有地區設定都使用相同的千位分隔符號、小數分隔符號或百分比符號。 +</p> + +<p> + Android 提供多種公用程式,以設定格式及轉換不同地區設定中所用的模式,例如對日期使用 <a href="{@docRoot}reference/android/text/format/DateUtils.html">DateUtils</a> 與 <a href="{@docRoot}reference/java/text/DateFormat.html">DateFormat</a>;對數字與貨幣使用 <a href="{@docRoot}reference/java/lang/String.html#format(java.lang.String,%20java.lang.Object...)">String.format()</a> 或 <a href="{@docRoot}reference/java/text/DecimalFormat.html">DecimalFormat</a>;對電話號碼使用 <a href="{@docRoot}reference/android/telephony/PhoneNumberUtils.html">PhoneNumberUtils</a>;等等。 +</p> + +<p> + 若根據使用者地區設定的有關假設將格式設為固定值,則在使用者變更為其他地區設定時會引發問題。強烈建議您使用系統提供的格式與公用程式。 +</p> + +<h4> + <strong>納入完備的一組預設資源</strong> +</h4> + +<p> + 請透過提供完備的一組預設資源,確保不論採用何種語言或地區設定,您的應用程式都能正確執行。應用程式的預設資源是<em>並未以任何語言或地區設定識別碼予以標記</em>的資源,例如 res/drawable/ 與 res/values/ 中儲存的資源。若您的應用程式嘗試載入的資源不可用於目前語言或不在預設資源組內,則應用程式將當機。 +</p> + +<p> + 不論您在應用程式內使用何種預設語言,都請確保將關聯的版面配置、可繪項目及字串儲存在預設資源目錄中 (無語言或地區設定識別碼)。 +</p> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/tools/loc/designforloc" data-sortorder="-timestamp" +data-cardsizes="9x3" data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="manage-strings"> + 3.管理進行當地語系化的字串 + </h2> + + +</div> + +<p> + 請務必正確管理應用程式的 UI 字串,以便能為使用者提供出眾的體驗,並能直接執行當地語系化。 +</p> + +<h4> + <strong>將所有字串移至 strings.xml 中</strong> +</h4> + +<p> + 建置應用程式時,請謹記不要將任何字串設為固定程式碼,而是將<em>所有</em>字串宣告為預設 strings.xml 檔案中的資源,藉此可輕鬆執行更新與當地語系化。可以擷取、翻譯 strings.xml 檔案中的字串,然後將其重新整合至您的應用程式中 (包含適當的識別碼),而無需對編譯的程式碼進行任何變更。 +</p> + +<p> + 若您產生含文字的影像,也請將這些字串置於 strings.xml 中,在翻譯後重新產生影像。 +</p> + +<h4> + <strong>遵循針對 UI 字串的 Android 指導方針</strong> +</h4> + +<p> + 在設計並開發 UI 時,請確保密切注意與使用者談話的<em>方式</em>。通常,請使用<a href="{@docRoot}design/style/writing.html">簡明扼要</a>、友好但簡潔的談話風格,並在所有 UI 中使用一致的風格。 +</p> + +<p> + 請確保您閱讀並遵循 Android 對於<a href="{@docRoot}design/style/writing.html">書寫風格及用字選詞</a>的設計建議。如此可提高您的應用程式對使用者的吸引力,並協助使用者更快了解您的 UI。 +</p> + +<p> + 此外若可能,請始終使用 Android 標準術語,例如使用「動作列」、「選項功能表」、「系統列」、「通知」等表示 UI 元素。以正確無誤、前後一致的方式使用 Android 詞彙可降低翻譯難度,並為使用者提供更優的最終產品。 +</p> + +<h4> + <strong>為宣告的字串提供充分的背景資訊</strong> +</h4> + +<p> + 宣告 strings.xml 檔案中的字串時,請確保描述該字串的使用背景資訊。該資訊對翻譯者而言極具價值,可產生品質更優的翻譯,並能協助您隨時間演進以更有效的方式管理字串。 +</p> + +<p> + 範例如下: +</p> + +<pre class="prettyprint"> +<!-- The action for submitting a form. This text is on a button that can fit 30 chars --> +<string name="login_submit_button">Sign in</string> +</pre> +<p> + 請考慮提供可說明以下問題的背景資訊: +</p> + +<ul> + <li> + <p> + 該字串用於哪個項目?何時/何地向使用者顯示該字串? + </p> + </li> + + <li> + <p> + 該字串位於版面配置中的哪個位置?例如,翻譯按鈕時,其彈性低於對文字方塊的翻譯。 + </p> + </li> +</ul> + +<h4> + <strong>標記訊息中不應翻譯的部分</strong> +</h4> + +<p> + 通常,字串會包含不應翻譯為其他語言的文字。程式碼片段、值的預留位置、特殊符號或名稱都是此類文字的常見範例。在準備供翻譯的字串時,請尋找並標記應保持原狀不翻譯的文字,以便翻譯者不做變更。 +</p> + +<p> + 若要標記不應翻譯的文字,請使用 <code><xliff:g></code> 預留位置標籤。以下所示的範例標籤將確保在翻譯時不會變更文字「%1$s」(否則會中斷訊息): +</p> + +<pre class="prettyprint"> +<string name="countdown"> + <xliff:g id="time" example="5 days>%1$s</xliff:g>until holiday +</string> +</pre> +<p> + 宣告預留位置標籤時,請一律新增對預留位置所針對項目進行說明的 id 屬性。若應用程式會在後來替換預留位置的值,請確保提供範例屬性以明確展示預期的用法。 +</p> + +<p> + 以下提供了預留位置標籤的其他一些範例: +</p> + +<pre> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + +<!-- Example placeholder for a special unicode symbol --> + +<string name="star_rating">Check out our 5 + + <xliff:g id="star">\u2605</xliff:g> + +</string> + +<!-- Example placeholder for a for a URL --> + +<string name="app_homeurl"> + + Visit us at <xliff:g id="application_homepage">http://my/app/home.html</xliff:g> + +</string> + +<!-- Example placeholder for a name --> + +<string name="prod_name"> + + Learn more at <xliff:g id="prod_gamegroup">Game Group</xliff:g> + +</string> + +<!-- Example placeholder for a literal --> + +<string name="promo_message"> + + Please use the "<xliff:g id="promotion_code">ABCDEFG</xliff:g>” to get a discount. + +</string> + +... + +</resources> +</pre> +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/toolsreference/localizationchecklist/managestrings" +data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="translate-strings"> + 4.翻譯 UI 字串與其他資源 + </h2> + + +</div> + +<p> + 將應用程式的 UI 字串與資源翻譯為您的目標語言是當地語系化的關鍵階段,也是需要操作最小心、規劃最周密的環節。 +</p> + +<p> + 建議您與專業的翻譯者合作 (請參閱<a href="#gp-trans">購買專業翻譯</a>),以確保取得能提高應用程式價值的高品質翻譯,雖然可以選擇機器翻譯,但是機器翻譯可能不會為使用者提供良好的體驗。 +</p> + +<h4> + <strong>準備翻譯</strong> +</h4> + +<p> + 翻譯輸出的品質一部分取決於輸入,因此請確保您的 strings.xml 檔案井然有序、註解充分且準確無誤。 +</p> + +<p> + 可以採用以下方式準備供翻譯的字串: +</p> + +<ul> + <li> + <p> + 請確保您的字串格式正確,前後一致。 + </p> + </li> + + <li> + <p> + 請遵循上述<a href="#manage-strings">管理進行當地語系化的字串</a>中列示的字串建議。 + </p> + </li> + + <li> + <p> + 清理 strings.xml 檔案,移除未使用的字串。 + </p> + </li> + + <li> + <p> + 在檔案中放置註解 (以確定檔案的所有者、原始來源與版本) 以及對翻譯者的所有特殊指示。 + </p> + </li> + + <li> + <p> + 確定既有的翻譯 (若有),並將其包括在向翻譯者傳送的 zip 檔案或其他套件中。 + </p> + </li> + + <li> + <p> + 確定需要翻譯的可繪項目或其他資源,並將其包括在翻譯者的套件中。 + </p> + </li> + + <li> + <p> + 此外,請考慮翻譯應用程式的市集清單詳細資料 (應用程式標題與描述、版本資訊等) 以及其他國際行銷材料。 + </p> + </li> + + <li> + <p> + 請建立術語清單,以說明產品、市場或基本技術中關鍵詞彙的含意與用法。將清單新增至翻譯者的套件。 + </p> + </li> +</ul> + +<h4> + <strong>傳送供翻譯的字串</strong> +</h4> + +<p> + 在開發週期的早期,請連絡專業翻譯廠商,以了解成本與返回時間。請確保在成本中包括多次重複。您可以在網路上尋找翻譯廠商,也可以直接使用 Google Play Developer Console 提供的翻譯服務 (請參閱<a href="#gp-trans">購買專業翻譯</a>)。 +</p> + +<p> + 翻譯完成後,請對翻譯進行初步檢查。請檢查是否所有檔案都已翻譯、是否存在潛在編碼問題,並確保宣告格式原封不動。 +</p> + +<p> + 若一切毫無問題,請小心地將當地語系化的目錄與檔案重新移至應用程式的資源中。請確保以適當的語言及地區設定識別碼為目錄建立標籤,以便可以在後來正確載入這些目錄。 +</p> + +<p> + 將翻譯重新整合至應用程式後,請開始<a href="#test">測試已當地語系化的應用程式</a>。 +</p> + +<h4 id="gp-trans"> + <strong>透過 Google Play 購買專業翻譯</strong> +</h4> + +<p> + Google Play 應用程式翻譯服務可以協助您快速尋找並購買應用程式的翻譯。在 Developer Console 中,您可以瀏覽第三方廠商的清單,這些廠商已預先具備 Google 授予的資格,能以極具競爭性的價格提供高品質的翻譯。您可以上傳希望翻譯的字串、選取希望翻譯的目標語言,並根據時間與價格選取翻譯廠商。 +</p> + +<p> + 購買翻譯後,您將收到廠商傳送的電子郵件。您將針對翻譯與廠商直接簽署業務合約;您需要直接與廠商合作來管理翻譯程序及交付項目,並解決所有支援問題。 +</p> + +<div> + <img src="{@docRoot}images/gp-localization-trans-0.png" class="border-img"> +</div> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/toolsreference/localizationchecklist/translatestrings" +data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="test"> + 5.對您的當地語系化應用程式進行測試 + </h2> + + +</div> + +<p> + 收到已翻譯的字串與資源並將其重新移至應用程式後,您需要對應用程式進行測試,以確保為向全球使用者散佈應用程式做好準備。 +</p> + +<p> + 手動測試可以協助您探尋版面配置與字串中會影響使用者滿意度 (最終影響您應用程式的使用者評分) 的當地語系化問題。 +</p> + +<h4> + <strong>設定測試環境</strong> +</h4> + +<p> + 若要對已當地語系化的應用程式進行測試,您需要根據您針對的市場與大小規格,設定包含多個裝置 (或虛擬裝置) 與螢幕大小的環境。請注意,特定地區的裝置範圍可能有所不同。若可能,請確保您的測試裝置與使用者可能使用的實際裝置相符。 +</p> + +<h4> + <strong>尋找常見的當地語系化問題</strong> +</h4> + +<p> + 在每個測試裝置上,於 [設定] 中設定語言或地區設定。安裝並啟動應用程式,然後在所有 UI 流程、對話方塊及使用者互動中進行導覽。在需要輸入的位置輸入文字。要尋找的問題包括: +</p> + +<ul> + <li> + <p> + 遭剪裁的文字,或者與 UI 元素或螢幕的邊緣重疊的文字 + </p> + </li> + + <li> + <p> + 不良的換行 + </p> + </li> + + <li> + <p> + 不正確的字彙中斷或標點 + </p> + </li> + + <li> + <p> + 不正確的字母順序排序 + </p> + </li> + + <li> + <p> + 不正確的版面配置方向或文字方向 + </p> + </li> + + <li> + <p> + 未翻譯的文字 (若顯示預設字串而非已翻譯的字串,可能是因為您忽略了要翻譯的字串,或者標記資源目錄時使用了不正確的語言識別碼)。 + </p> + </li> +</ul> + +<p> + 若譯文中的字串較原文更長,導致版面配置無法容納,建議您嘗試簡化預設文字、簡化翻譯後的文字,或調整預設的版面配置。若上述舉措都無法解決該問題,您可以針對該語言建立自訂版面配置。 +</p> + +<h4> + <strong>對預設資源進行測試</strong> +</h4> + +<p> + 在採用支援的所有語言與地區設定對應用程式進行測試後,請確保採用<em>不支援的語言</em>與地區設定再次對應用程式進行測試。這可協助您確保應用程式包括一組完備的預設字串與資源,如此您的應用程式可供所有使用者使用,不論使用者偏好何種語言,都是如此。 +</p> + +<h4> + <strong>與以當地語系為母語者一起檢閱</strong> +</h4> + +<p> + 在測試期間或測試之後,建議您讓以當地語系為母語的人員檢閱當地語系化的應用程式。執行此作業的一種方式是讓該地區的使用者執行 beta 測試 (Google Play 可以協助您實現此目標)。 <!-- </p> + +<h3 class="rel-resources clearfloat">Related resources</h3> + +<div class="resource-widget resource-flow-layout col-13" + data-query="collection:distribute/toolsreference/localizationchecklist/test" + data-sortOrder="-timestamp" + data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3" + data-maxResults="6"></div> --> +</p> + +<div class="headerLine"> + <h2 id="prepare-launch"> + 6.準備面向全球推出產品 + </h2> + + +</div> + +<p> + 翻譯應用程式是當地語系化的關鍵環節,但是若要協助您的產品吸引使用者並贏得關注,您應準備在針對的國家/地區舉行推出活動,並針對全球使用者制定更廣泛的產品推出與行銷計劃。 +</p> + +<h4> + <strong>對您的 Google Play 清單執行當地語系化</strong> +</h4> + +<div class="sidebox-wrapper" style="float:right;"> + <div class="sidebox"> + <h2> + 對您的 Google Play 清單執行當地語系化 + </h2> + + <p> + Google Play 市集清單是全球使用者對您應用程式的第一印象,您應向所有使用者著重展示應用程式的卓越之處!請在 Developer Console 中對您的清單進行當地語系化,包括: + </p> + + <ul> + <li>應用程式標題與描述 + </li> + + <li>手機與平板電腦上所用應用程式的螢幕擷取畫面 + </li> + + <li>推廣圖形與影片。 + </li> + </ul> + </div> +</div> + +<p> + 若您希望應用程式在國際市場取得成功,需要對 Google Play 市集清單進行當地語系化。您可以在 Developer Console 中管理當地語系化的清單。 +</p> + +<p> + 在推出之前,請決定應用程式標題、描述、推廣文字、行銷名稱與計劃,以及其他文字與影像。請及早傳送供翻譯的清單文字與影像,以便在開始 beta 測試時,可將這些文字與影像準備就緒。翻譯後的文字可用時,您可以透過 Developer Console 新增該文字。 +</p> + +<div class="sidebox-wrapper" style="float:right;"> + <div class="sidebox"> + <h2> + Google Play 中的市集清單翻譯 + </h2> + + <p> + 您可以使用 Google Play 上的應用程式翻譯服務翻譯您的市集清單。請備妥包含您市集清單資訊的 XML 檔案,並在上傳 strings.xml 檔案時上傳該檔案 (請參閱<a href="#gp-trans">購買專業翻譯</a>) + </p> + </div> +</div> + +<p> + 此外,既然您已努力建立卓越的當地語系化應用程式,就讓使用者進行了解!請針對手機與 7 英寸及 10 英寸平板電腦,製作每種語言的 UI 螢幕擷取畫面。您可將所支援每種語言的螢幕擷取畫面上傳至 Developer Console。對於以其他語言瀏覽您應用程式清單的使用者而言,這些螢幕擷取畫面極具價值。 +</p> + +<p> + 此外,還需要建立推廣圖形與影片的當地語系化版本。例如,您的應用程式功能圖形可能包括應翻譯的文字以取得最佳效果,或者您可能希望對於不同的國家/地區採用不同的視覺方法。您可以針對每種語言建立推廣圖形的不同版本,並將其上傳至 Developer Console。若您提供推廣影片,可以建立該影片的當地語系化版本,然後針對您支援的每種語言,新增正確的當地語系化影片的連結。 +</p> + +<h4> + <strong>在重要的國家/地區規劃 beta 版</strong> +</h4> + +<div class="sidebox-wrapper" style="float:right;"> + <div class="sidebox"> + <h2> + 輕鬆的 beta 測試 + </h2> + + <p> + 現在藉由 Google Play,您可以在全球任何地點設定多組 alpha 與 beta 測試者。下次登入 Developer Console 時,請了解這項強大功能。 + </p> + </div> +</div> + +<p> + 在推出應用程式之前,取得真實的使用者回饋通常極具價值,採用新的語言在新的國家/地區推出應用程式時更是如此。在這些情況下,強烈建議您向關鍵市場的使用者散佈應用程式的測試版,並提供簡易方式讓使用者提供回饋並報告錯誤。 +</p> + +<p> + Google Play 可以協助您設定應用程式的試用計劃。您登入 Developer Console 並上傳 APK 後,可以設定多組使用者對應用程式進行 alpha 與 beta 測試。您可以先設定 alpha 測試者的較小群組,然後設定 beta 測試者的較大群組。 +</p> + +<p> + 新增使用者後,使用者可以存取您應用程式的市集清單並安裝應用程式。<strong>alpha 或 beta 版本的使用者無法發佈評論或評分</strong>,因此<strong>對 Google Play 上您的評分並無風險</strong>。但是,這意味著您需要設定某種機制供測試者為您提供回饋:請考慮建立 <a href="http://www.google.com/+/business/">Google+</a> 頁面或 <a href="https://groups.google.com/forum/#!overview">Google 群組</a>。 +</p> + +<p> + 您收到的回饋將協助您調整 UI、翻譯與市集清單,以確保為使用者提供絕佳的體驗。 +</p> + +<h4> + <strong>規劃國際行銷</strong> +</h4> + +<p> + 若要在各個國家/地區贏得最多關注,請考慮舉辦國際行銷或廣告推廣活動。活動的範圍視您能承受的預算而異,但是對於產品推出期間及推出之後執行國家/地區特定的行銷而言,通常該活動都是符合成本效益並富有成效的舉措。 +</p> + +<h4> + <strong>建立當地語系化的 Google Play 徽章</strong> +</h4> + +<p> + 若您準備執行國際行銷,請確保將<a href="{@docRoot}distribute/tools/promote/badges.html">當地語系化的 Google Play 徽章</a>包括在內,以便告訴使用者您在 Google Play 上。您可以使用徽章產生器快速建置能在網站或行銷材料中使用的當地語系化徽章。此外,也可以使用高解析度資產。 +</p> + +<h4> + <strong>建立當地語系化的 Device Art</strong> +</h4> + +<p> + 若您提供 Android 裝置上所執行應用程式的產品螢幕擷取畫面,請確保這些螢幕擷取畫面具有良好的視覺效果並反映 Android 裝置的最新功能。為了協助您建立高品質的行銷材料,請您使用拖放式 <a href="{@docRoot}distribute/tools/promote/device-art.html">Device Art Generator</a> 在 Nexus 裝置上快速產生螢幕擷取畫面。 +</p> + +<h4> + <strong>檢查您的最佳化秘訣</strong> +</h4> + +<p> + 為推出產品進行準備時,請確保登入 Developer Console 並檢查應用程式的最佳化秘訣。最佳化秘訣可讓您了解遺失部分當地語系化市集清單的時間,並提供其他有用的提醒以成功推出當地語系化的產品。 +</p> + +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" data-query= +"collection:distribute/toolsreference/localizationchecklist/preplaunch" +data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" +data-maxresults="6"> +</div> + +<div class="headerLine"> + <h2 id="support-users"> + 7.在推出後支援全球使用者 + </h2> + + +</div> + +<p> + 面向全球推出應用程式後,您應準備支援使用各種語言、位於各個時區的使用者。提供全球使用者支援的程度取決於您的預算,但至少您應在推出產品後細心查看評分、評論並下載統計資料。 +</p> + +<p> + 以下提供一些建議: +</p> + +<ul> + <li> + <p> + 在 Developer Console 中使用應用程式統計資料比較各語言、各國家/地區的下載、安裝、解除安裝及評分狀況,若無法保持特定語言或國家/地區的下載次數或評分,請考慮採用某些選項來改善產品或變更行銷方法。 + </p> + </li> + + <li> + <p> + 請定期檢查評論,Google Play 會為您翻譯所有使用者評論,因此您可以隨時了解全球使用者對您應用程式的感覺、他們最喜歡的功能以及對其有影響的問題。透過觀看評論,您可以確認可能對特定國家/地區的使用者有影響的技術問題,然後修正問題並更新應用程式。 + </p> + </li> + + <li> + <p> + 若可能,請回應評論,以使用者的語言或通用語言 (若可能) 與全球使用者交流會產生良好效果。若無法使用上述語言,您可以嘗試使用翻譯工具,但是結果可能無法預測。若您的應用程式在某種語言中備受青睞,請考慮從以該語言為母語者處取得支援協助。 + </p> + </li> + + <li> + <p> + 請確保網站上提供所有支援資源的連結。請考慮建立特定語言使用者群組、Google+ 社群或其他支援論壇。 + </p> + </li> +</ul> + +<p> + 依據以上做法對應用程式進行當地語系化、向全球使用者推廣及行銷應用程式,並提供持續不斷的支援,您可藉此吸引許多新使用者使用您的應用程式,並保持其忠誠度。 +</p> + +<p> + 請確保閱讀<a href="{@docRoot}distribute/tools/launch-checklist.html">推出檢查清單</a>,以詳細了解如何在 Google Play 上規劃、建置並推出應用程式。 +</p> +<h3 class="rel-resources clearfloat">相關資源</h3> + +<div class="resource-widget resource-flow-layout col-13" + data-query="collection:distribute/toolsreference/localizationchecklist/supportlaunch" + data-sortOrder="-timestamp" + data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3" + data-maxResults="6"></div>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/google/play/filters.jd b/docs/html-intl/intl/zh-tw/google/play/filters.jd new file mode 100644 index 0000000..8cfd59a --- /dev/null +++ b/docs/html-intl/intl/zh-tw/google/play/filters.jd @@ -0,0 +1,266 @@ +page.title=Google Play 上的篩選器 + +@jd:body + +<div id="qv-wrapper"> +<div id="qv"> + +<h2>快速檢視</h2> +<ul> +<li>Google Play 可套用篩選器以控制哪些 Android 裝置可以從市集下載您的應用程式。</li> +<li>透過篩選,可確保只有裝置與您應用程式的相容性需求相符的使用者才能使用您的應用程式。 <li>篩選由您在應用程式的宣示說明檔案中宣告的組態需求及其他因素來確定。</li> +</ul> + +<h2>本文件內容</h2> + +<ol> + <li><a href="#how-filters-work">Google Play 上篩選器的運作方式</a></li> + <li><a href="#manifest-filters">根據宣示說明元素進行篩選</a> + </li> + <li><a href="#other-filters">其他篩選器</a></li> + <li><a href="#MultiApks">使用不同篩選器發行多個 APK</a></li> +</ol> + +<h2>另請參閱</h2> + <ol> +<li><a href="{@docRoot}guide/practices/compatibility.html">Android +相容性</a></li> +<li><code><a +href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html"><supports-gl-texture></a></code></li> +<li><code><a +href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><supports-screens></a></code></li> +<li><code><a +href="{@docRoot}guide/topics/manifest/uses-configuration-element.html"><uses-configuration></a></code></li> +<li><code><a +href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><uses-feature></a></code></li> +<li><code><a +href="{@docRoot}guide/topics/manifest/uses-library-element.html"><uses-library></a></code></li> +<li><code><a +href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code></li> +<li><code><a +href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><uses-sdk></code></a></li> +</ol> + +</div> +</div> + +<p>若使用者在 Google Play 上搜尋或瀏覽尋找要下載的應用程式,會根據與裝置相容的條件對應用程式結果進行篩選。例如,若使用者需要相機,Google Play 不會顯示無相機的裝置所適用的應用程式。此<em>篩選</em>功能可協助開發人員對應用程式的散佈進行管理,有助於確保為使用者提供可能最優的體驗。</p> + +<p>Google Play 中篩選的基礎是多種類型的應用程式中繼資料與組態設定 (包括宣示說明宣告、所需的資源庫、架構相依性,以及 Google Play Developer Console 中設定的諸如所針對地理位置、定價等散佈控制項)。</p> + +<p>Google Play 篩選在一定程度上以宣示說明宣告及 Android 架構的其他方面為基礎,但實際篩選行為與該架構截然不同,且不受特定 API 層級的影響。本文件將指定 Google Play 使用的目前篩選規則。</p> + + +<h2 id="how-filters-work">Google Play 上篩選器的運作方式</h2> + +<p>對於在 Google Play 應用程式中瀏覽尋找或搜尋應用程式的使用者,Google Play 會使用以下所述的篩選限制來判斷是否向其顯示您的應用程式。</p> + +<p>判斷是否顯示您的應用程式時,Google Play 會檢查裝置的硬體與軟體需求,以及裝置的電訊商、位置與其他特性。隨後,會將檢查結果與應用程式的宣示說明檔案及發行詳細資料所述限制與相依性進行比較。 </p> + +<p>根據篩選規則,若應用程式與裝置相容,Google Play 會向使用者顯示該應用程式。否則,Google Play 會在搜尋結果與類別瀏覽中隱藏您的應用程式,即使使用者在 Google Play 中按一下直接指向該應用程式 ID 的深度連結以明確要求該應用程式,也是如此。</p> + +<p>您可以針對應用程式使用可用篩選器的任意組合。例如,您可以設定 <code>minSdkVersion</code> 需求為 <code>"4"</code>,並在應用程式中設定 <code>smallScreens="false"</code>,則將應用程式上傳至 Google Play 時,您可以僅針對歐洲國家/地區 (電訊商)。因此 Google Play 的篩選器可防止在不符合上述所有三項需求的裝置上提供該應用程式。 </p> + +<p>所有篩選限制都與應用程式的版本關聯,對於不同版本的應用程式,篩選限制可以不同。例如,若使用者已安裝您的應用程式,隨後您發行的更新會導致該應用程式對使用者不可見,則使用者不會看到該更新可用。</p> + +<h4>在 Google Play 網站上進行篩選</h4> + +<p>若使用者瀏覽 <a href="http://play.google.com/apps">Google Play 網站</a>,可以看到發行的所有應用程式。但是,Google Play 網站會對應用程式需求與使用者註冊的每個裝置進行比較以了解相容性,只允許使用者安裝與其裝置相容的應用程式。</p> + +<h2 id="manifest-filters">根據應用程式宣示說明進行篩選</h2> + +<p>大多數篩選器都由應用程式宣示說明檔案 <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a> 中的元素觸發 (但並非宣示說明檔案中的所有元素都能觸發篩選)。表 1 列出您應該用於觸發篩選的宣示說明元素,並說明針對每個元素的篩選如何運作。</p> + +<p id="table1" class="table-caption"><strong>表格 1.</strong>在 Google Play 上觸發篩選的宣示說明元素。</p> +<table> + <tr> + <th>宣示說明元素</th> + <th>篩選器名稱</th> + <th>運作方式</th> + </tr> + <tr> + <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><supports-screens></a></code> + <!-- ##api level 4## --></td> + <td valign="top">螢幕大小</td> + <td valign="top"> + +<p>應用程式透過設定 <code><supports-screens></code> 元素的屬性,會指示能支援的螢幕大小。發行應用程式時,Google Play 會根據裝置的螢幕大小,使用這些屬性來判斷是否向使用者顯示應用程式。 </p> + +<p>作為一般規則,Google Play 會假設裝置上的平台可將較小的版面配置放置到較大的螢幕中,但無法將較大的版面配置放置到較小的螢幕中。因此,若應用程式宣告僅支援「一般」螢幕大小,Google Play 會為一般螢幕大小的裝置與大螢幕裝置提供該應用程式,同時對應用程式進行篩選,以便不會向小螢幕裝置提供該應用程式。</p> + +<p>若應用程式並未宣告 <code><supports-screens></code> 的屬性,Google Play 會使用這些屬性的預設值 (這些值視 API 層級而不同)。具體說明如下: </p> + +<ul> +<li><p>對於將 <code><a +href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android: +minSdkVersion</a></code> 或 <code><a +href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android: +targetSdkVersion</a></code> 設為不超過 3 的應用程式,<code><supports-screens></code> 元素本身未定義,不提供任何屬性。在此狀況下,Google Play 會假設應用程式為一般螢幕大小的裝置而設計,並會向一般螢幕大小的裝置或大螢幕裝置顯示該應用程式。 </p> + +<li>若 <code><a +href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android: +minSdkVersion</a></code> 或 <code><a +href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android: +targetSdkVersion</a></code> 設為至少為 4,所有屬性的預設值為 <code>"true"</code>。如此,依預設,會將應用程式視為支援所有螢幕大小。</li> +</ul> + + <p><strong>範例 1</strong><br /> 宣示說明宣告 <code><uses-sdk android:minSdkVersion="3"></code>,且不包括 <code><supports-screens></code> 元素。<strong>結果</strong>:除非套用其他篩選器,否則 Google Play 不會向小螢幕裝置的使用者顯示該應用程式,但是會向一般螢幕大小或大螢幕裝置的使用者顯示該應用程式。 </p> + <p><strong>範例 2<br /> + </strong>宣示說明宣告 <code><uses-sdk android:minSdkVersion="3" + android:targetSdkVersion="4"></code>,且不包括 <code><supports-screens></code> 元素。<strong>結果</strong>:除非套用其他篩選器,否則 Google Play 會向所有裝置的使用者顯示該應用程式。 </p> + <p><strong>範例 3<br /> + </strong>宣示說明宣告 <code><uses-sdk android:minSdkVersion="4"></code>,且不包括 <code><supports-screens></code> 元素。<strong>結果</strong>:除非套用其他篩選器,否則 Google Play 會向所有使用者顯示該應用程式。 </p> + <p>如需有關如何在您的應用程式中宣告螢幕大小支援的詳細資訊,請參閱 <code><a + href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><supports-screens></a></code> 與<a href="{@docRoot}guide/practices/screens_support.html">支援多個螢幕</a>。</p> +</td> + </tr> + + <tr> + <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html"><uses-configuration></a></code> + <!-- ##api level 3## --></td> + <td valign="top">裝置組態: <br /> 鍵盤、導覽、觸控螢幕</td> + <td valign="top"><p>應用程式可以要求特定硬體功能,Google Play 會僅在具有所需硬體的裝置上顯示應用程式。</p> + <p><strong>範例 1<br /> + </strong>宣示說明包括 <code><uses-configuration android:reqFiveWayNav="true" /></code>,且使用者正在沒有五向導覽控制器的裝置上搜尋應用程式。<strong>結果</strong>:Google Play 不會向該使用者顯示該應用程式。 </p> + <p><strong>範例 2<br /> + </strong>宣示說明不包括 <code><uses-configuration></code> 元素。<strong>結果</strong>:除非套用其他篩選器,否則 Google Play 會向所有使用者顯示該應用程式。</p> +<p>如需更多詳細資料,請參閱 <a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html"><code><uses-configuration></code></a>。</p></td> + </tr> + + <tr> + <td rowspan="2" valign="top" style="white-space:nowrap;"><code><a +href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><uses-feature></a> +</code> + <!-- ##api level 4## --></td> + <td valign="top">裝置功能<br /> (<code>name</code>)</td> + <td valign="top"><p>應用程式可以要求裝置上顯示特定裝置功能。Android 2.0 (API 層級為 5) 中已引入此功能。</p> + <p><strong>範例 1<br /> + </strong>宣示說明包括 <code><uses-feature +android:name="android.hardware.sensor.light" /></code>,且使用者正在沒有光感應器的裝置上搜尋應用程式。<strong>結果</strong>:Google Play 不會向該使用者顯示該應用程式。 </p> + <p><strong>範例 2<br /> + </strong>宣示說明不包括 <code><uses-feature></code> 元素。<strong>結果</strong>:除非套用其他篩選器,否則 Google Play 會向所有使用者顯示該應用程式。</p> + <p>如需完備資訊,請參閱 <code><a +href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><uses-feature></a> +</code>。</p> + <p><em>根據暗示的功能進行篩選:</em>在某些狀況下,Google Play 會將透過 <code><uses-permission></code> 元素要求的許可,解譯為功能需求 (等同於 <code><uses-feature></code> 元素中宣告的功能需求)。另請參閱以下的 <a href="#uses-permission-filtering"><code><uses-permission></code></a>。</p> +</td> + </tr> + + <tr> + <td valign="top">OpenGL-ES 版本<br /> (<code>openGlEsVersion</code>)</td> + <td valign="top"><p>應用程式可以使用 <code><uses-feature + android:openGlEsVersion="int"></code> 屬性要求裝置支援特定 OpenGL-ES 版本。</p> + <p><strong>範例 1<br /> + </strong>應用程式透過在宣示說明中多次指定 <code>openGlEsVersion</code>,要求多個 OpenGL-ES 版本。<strong>結果</strong>:Google Play 會視為應用程式要求所指示的最高版本。</p> +<p><strong>範例 2<br /> +</strong>應用程式要求 OpenGL-ES 1.1 版,使用者在支援 OpenGL-ES 2.0 版的裝置上搜尋應用程式。<strong>結果</strong>:除非套用其他篩選器,否則 Google Play 會向該使用者顯示該應用程式。若裝置報告其支援 OpenGL-ES 版本 <em>X</em>,Google Play 會視為該裝置也支援低於 <em>X</em> 的所有版本。 +</p> +<p><strong>範例 3<br /> +</strong>使用者在未報告 OpenGL-ES 版本的裝置 (例如執行 Android 1.5 或更低版本的裝置) 上搜尋應用程式。<strong>結果</strong>:Google Play 會視為該裝置僅支援 OpenGL-ES 1.0。Google Play 會向使用者僅顯示未指定 <code>openGlEsVersion</code> 的應用程式,或未指定高於 1.0 的 OpenGL-ES 版本的應用程式。 </p> + <p><strong>範例 4<br /> + </strong>宣示說明未指定 <code>openGlEsVersion</code>。<strong>結果</strong>:除非套用其他篩選器,否則 Google Play 會向所有使用者顯示該應用程式。 </p> +<p>如需更多詳細資料,請參閱 <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code><uses-feature></code></a>。</p></td> + </tr> + + <tr> + <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><uses-library></a></code></td> + <td valign="top">軟體資源庫</td> + <td valign="top"><p>應用程式可以要求裝置上顯示特定的共用資源庫。 </p> + <p><strong>範例 1<br /> + </strong>應用程式要求 <code>com.google.android.maps</code> 資源庫,且使用者正在沒有 <code>com.google.android.maps</code> 資源庫的裝置上搜尋應用程式。<strong>結果</strong>:Google Play 不會向該使用者顯示該應用程式。 </p> + <p><strong>範例 2</strong><br /> 宣示說明不包括 <code><uses-library></code> 元素。<strong>結果</strong>:除非套用其他篩選器,否則 Google Play 會向所有使用者顯示該應用程式。</p> +<p>如需更多詳細資料,請參閱 <a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><code><uses-library></code></a>。</p></td> + </tr> + <tr id="uses-permission-filtering"> + <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code></td> + <td valign="top"> </td> + <td valign="top">嚴格來說,Google Play 不會根據 <code><uses-permission></code> 元素進行篩選。但是,Google Play 會讀取這些元素,以判斷應用程式是否具有可能並未在 <code><uses-feature></code> 元素中正確宣告的硬體功能需求。例如,若應用程式要求 <code>CAMERA</code> 許可,但未針對 <code>android.hardware.camera</code> 宣告 <code><uses-feature></code> 元素,則 Google Play 會視為應用程式要求相機,不應向裝置未提供相機的使用者顯示。</p> + <p>一般而言,若應用程式要求硬體相關許可,Google Play 會視為應用程式要求基本硬體功能,即使可能並非對應於 <code><uses-feature></code> 宣告,也是如此。隨後,Google Play 會根據 <code><uses-feature></code> 宣告暗示的功能設定篩選。</p> + <p>如需暗示硬體功能的許可清單,請參閱 <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions-features"><code><uses-feature></code></a> 元素的文件。</p> +</td> + </tr> + + <tr> + <td rowspan="2" valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><uses-sdk></a></code></td> + <td valign="top">最低架構版本 (<code>minSdkVersion</code>)</td> + <td valign="top"><p>應用程式可以要求最低 API 層級。 </p> + <p><strong>範例 1</strong><br /> 宣示說明包括 <code><uses-sdk + android:minSdkVersion="3"></code>,應用程式使用 API 層級 3 中引入的 API。使用者在 API 層級為 2 的裝置上搜尋應用程式。<strong>結果</strong>:Google Play 不會向該使用者顯示該應用程式。 </p> + <p><strong>範例 2</strong><br /> 宣示說明不包括 <code>minSdkVersion</code>,應用程式使用 API 層級 3 中引入的 API。使用者在 API 層級為 2 的裝置上搜尋應用程式。<strong>結果</strong>:Google Play 會將 <code>minSdkVersion</code> 視為「1」,並將應用程式視為與所有 Android 版本相容。Google Play 會向該使用者顯示該應用程式,並允許該使用者下載該應用程式。該應用程式在執行階段將當機。 </p> + <p>由於您希望避免第二種狀況,我們建議您始終宣告 <code>minSdkVersion</code>。如需詳細資料,請參閱 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min"><code>android:minSdkVersion</code></a>。</p></td> + </tr> + <tr> + <td valign="top">最高架構版本 (<code>maxSdkVersion</code>)</td> + <td valign="top"><p><em>已失效。</em>若在應用程式的宣示說明中設定 <code>maxSdkVersion</code>,Android 2.1 及更高版本不會檢查或強制使用 <code>maxSdkVersion</code> 屬性,也不會編譯 SDK。對於已使用 <code>maxSdkVersion</code> 編譯的裝置,Google Play 會保留該裝置並將其用於篩選。</p> +<p> <em>不</em>建議宣告 <code>maxSdkVersion</code>。如需詳細資料,請參閱 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#max"><code>android:maxSdkVersion</code></a>。</p></td> + </tr> +</table> + + + +<h3 id="advanced-filters">進階宣示說明篩選器</h3> + +<p>除了<a href="#table1">表 1</a> 中的宣示說明元素外,Google Play 還可以根據表 2 中的進階宣示說明元素對應用程式進行篩選。</p> + +<p>這些進階宣示說明元素及其觸發的篩選僅用於例外使用狀況,專為特定類型的高效能遊戲與類似應用程式 (需要對應用程式的散佈進行嚴格控制) 而設計。<strong>多數應用程式應永遠不使用此類篩選器</strong>。</p> + +<p id="table2" class="table-caption"><strong>表 2.</strong>用於 Google Play 篩選的進階宣示說明元素。</p> +<table> + <tr><th>宣示說明元素</th><th>摘要</th></tr> + <tr> + <td><nobr><a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code <compatible-screens>}</a></nobr></td> + <td> + <p>若裝置螢幕大小與密度不符合元素中的{@code <compatible-screens>}任何螢幕組態 (由 {@code <screen>} 元素宣告),Google Play 會對應用程式進行篩選。</p> + <p class="caution"><strong>注意:</strong>通常,<strong>您不應使用此宣示說明元素</strong>。若使用此元素,會將您未列出的螢幕大小與密度的所有組合排除在外,從而大幅減少您應用程式可能擁有的使用者。您應改為針對未使用替代資源說明的螢幕組態,使用 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code <supports-screens>}</a> 宣示說明元素 (如<a href="#table1">表 1</a> 所述) 啟用螢幕相容性模式。</p> + </td> + </tr> + <tr> + <td><nobr><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code <supports-gl-texture>}</a></nobr></td> + <td> + <p>除非裝置支援應用程式所支援的一或多個 GL 材質壓縮格式,否則 Google Play 會對應用程式進行篩選。 </p> + </td> + </tr> +</table> + + + +<h2 id="other-filters">其他篩選器</h2> + +<p>Google Play 可使用其他應用程式特性來判斷對於指定裝置上的特定使用者是顯示還是隱藏應用程式,如下表所述。 </p> + +<p id="table3" class="table-caption"><strong>表格 3</strong>。對 Google Play 上的篩選有影響的應用程式及發行特性。</p> +<table> <tr> + <th>篩選器名稱</th> <th>運作方式</th> </tr> + + <tr> + <td valign="top">發行狀態</td> <td valign="top"><p>在 Google Play 中,只有已發行的應用程式才會顯示在搜尋與瀏覽結果內。</p> <p>若使用者可以在其已購買、已安裝或最近已解除安裝應用程式的 [下載] 區域內看到某應用程式,則即使該應用程式並未發行,使用者也可以安裝。</p> <p>若應用程式已擱置,使用者將無法重新安裝或更新,即使該應用程式顯示在 [下載] 區域內,也是如此。</p> </td></tr> + <tr> + <td valign="top">付費狀態</td> <td valign="top"><p>並非所有使用者都能看到付費的應用程式。若要顯示付費的應用程式,裝置必須具有 SIM 卡,必須執行 Android 1.1 或更高版本,且必須位於可以使用付費應用程式的國家/地區 (由 SIM 電訊商確定) 內。</p></td> +</tr> <tr> + <td valign="top">針對的國家/地區</td> <td valign="top"> <p>將應用程式上傳至 Google Play 時,您可以根據<strong>定價與散佈</strong>,選取要將應用程式散佈至哪些國家/地區。此後,會僅為您所選國家/地區的使用者提供該應用程式。</p> +</td> </tr> <tr> + <td valign="top" style="white-space:nowrap;">CPU 架構 (ABI)</td> + <td valign="top"><p>若應用程式包括的原生資源庫針對特定的 CPU 架構 (例如 ARM EABI v7 或 x86),則該應用程式只有在支援該架構的裝置上才可見。如需有關 NDK 及使用原生資源庫的詳細資料,請參閱<a href="{@docRoot}tools/sdk/ndk/index.html#overview">什麼是 Android NDK?</a></p> </tr> <tr> + <td valign="top">防複製應用程式</td> <td valign="top"><p class="caution">Google Play 不再支援 Developer Console 中的防複製功能,也不再根據該功能對應用程式進行篩選。若要保護您的應用程式,請改用<a href="{@docRoot}google/play/licensing/index.html">應用程式授權</a>。如需詳細資訊,請參閱<a href="{@docRoot}google/play/licensing/overview.html#CopyProtection">替換防複製功能</a>。</p></td> </tr> </table> + +<h2 id="MultiApks">使用不同篩選器發行多個 APK</h2> + +<p>藉由某些特定的 Google Play 篩選器,您可以針對同一應用程式發行多個 APK,以便為不同的裝置組態提供不同的 APK。例如,若您建立使用高逼真度圖形資產的視訊遊戲,可能希望建立兩個 APK,以分別支援不同的材質壓縮格式。由此,您可以僅納入每個裝置組態所需的材質,從而降低 APK 檔案的大小。視每個裝置對材質壓縮格式的支援而定,Google Play 會為裝置提供您已宣告支援該裝置的 APK。</p> + +<p>目前,只有在每個 APK 根據以下組態提供不同的篩選器時,Google Play 才允許您針對同一應用程式發行多個 APK:</p> +<ul> + <li>OpenGL 材質壓縮格式 <p>透過使用 <a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code <supports-gl-texture>}</a>元素。</p> + </li> + <li>螢幕大小 (以及可選的螢幕密度) <p>透過使用 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code <supports-screens>}</a>或<a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code <compatible-screens>}</a> 元素。</p> + </li> + <li>API 層級 <p>透過使用 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a>元素。</p> + </li> + <li>CPU 架構 (ABI) <p>透過納入使用 <a href="{@docRoot}tools/sdk/ndk/index.html">Android NDK</a> (針對諸如 ARM EABI v7 或 x86 等特定 CPU 架構) 而建置的原生資源庫。</p> + </li> +</ul> + +<p>其他所有篩選器仍照常運作,但只有這四個篩選器能區分 Google Play 上同一應用程式清單中的不同 APK。例如,若各 APK 僅因裝置是否具備相機而有所不同,則您<em>無法</em>針對同一應用程式發行多個 APK。</p> + +<p class="caution"><strong>注意:</strong>針對同一應用程式發行多個 APK 是進階功能,<strong>多數應用程式應僅發行為諸多裝置組態提供支援的單一 APK</strong>。發行多個 APK 需要您遵循篩選器中的特定規則,並格外注意每個 APK 的版本代碼,以確保每個組態使用正確的更新路徑。</p> + +<p>若您需要有關如何在 Google Play 上發行多個 APK 的詳細資訊,請參閱<a href="{@docRoot}google/play/publishing/multiple-apks.html">多 APK 支援</a>。</p>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/index.jd b/docs/html-intl/intl/zh-tw/index.jd index 56ae4cf..53bbd8d 100644 --- a/docs/html-intl/intl/zh-tw/index.jd +++ b/docs/html-intl/intl/zh-tw/index.jd @@ -1,92 +1,92 @@ fullpage=true -page.viewport_width=970excludeFromSuggestions=true -page.metaDescription=適用於 Android 開發人員的官方網站。提供適用於應用程式開發人員與設計師的 Android SDK 與文件。 -page.customHeadTag=<meta name="google-site-verification" content="sa-bIAI6GKvct3f61-WpRguHq-aNjtF7xJjMTSi79as" /> +excludeFromSuggestions=true +page.metaDescription=The official site for Android developers. Provides the Android SDK and documentation for app developers and designers. +page.customHeadTag=<meta name="google-site-verification" content="sa-bIAI6GKvct3f61-WpRguHq-aNjtF7xJjMTSi79as" /> @jd:body -<div class="home-new-carousel-1"> - <div class="fullscreen-carousel-content"> - <div class="vcenter"> - <div class="wrap clearfix"> +<!-- <div class="dac-hero-carousel" data-carousel-query="collection:index/carousel"> +</div> --> +<section class="dac-hero-carousel"> - <div class="static resource-flow-layout wrap col-16"> - <div class="resource resource-card resource-card-18x6"> +<!-- <article class="dac-expand dac-hero dac-invert active" style="background-color: rgb(38, 50, 56);"> --> +<article class="dac-expand dac-hero dac-invert active" style="background-color: #455A64;"> +<a href="/preview/index.html"> + <div class="wrap" style="max-width:1100px;"> + <div class="cols dac-hero-content"> + <div class="col-10of16 col-push-6of16 dac-hero-figure"> + <img class="dac-hero-image" src="{@docRoot}images/home/devices-hero_620px_2x.png" + srcset="{@docRoot}images/home/devices-hero_620px.png 1x, + {@docRoot}images/home/devices-hero_620px_2x.png 2x"> + </div> + <div class="col-6of16 col-pull-10of16"> + <div class="dac-hero-tag"></div> + + <h1 class="dac-hero-title">Android M Developer Preview</h1> + <p class="dac-hero-description">準備使用新版 Android。在 Nexus 5、6、9 和 + Player 上測試您的應用程式。 </p> - <div class="landing-section-header"> - <div class="col-10"><img src="{@docRoot}images/home/l-hero_2x.png" srcset="{@docRoot}images/home/l-hero.png 1x, {@docRoot}images/home/l-hero_2x.png 2x" width="510" style="margin:20px 30px 0 30px"></div> - <div class="col-5" style=" margin-top:70px "> - <h3 stye="font-weight:300;">Android 5.0 棒棒糖</h3> - <p>Android 5.0 更新新增了許多新功能到您的應用程式,例如鎖定螢幕上的通知、全新的相機 API、OpenGL ES 3.1、新的材料設計介面,還有更多其他功能。</p> - <a href="{@docRoot}about/versions/lollipop.html" class="landing-button landing-primary">深入了解</a> - </div> - </div> - </div> - </div> - <h2> </h2> - <div style="margin-top:20px;height:115px" class="resource-widget resource-flow-layout wrap col-16 - no-section" data-query="collection:index/primary" data-resourcestyle="card" - data-sortorder="-timestamp" data-maxresults="3" data-cardsizes="6x2,6x2,6x2"></div> <!-- end .resource-widget --> - </div> <!-- end .wrap --> - </div> <!-- end .vcenter --> - </div> <!-- end .fullscreen-carousel-content --> -</div> <!-- end .fullscreen-carousel --> + <a class="dac-hero-cta" href="{@docRoot}preview/index.html"> + <span class="dac-sprite dac-auto-chevron"></span> + 開始使用! + </a><br> + <a class="dac-hero-cta" href="{@docRoot}preview/support.html"> + <span class="dac-sprite dac-auto-chevron"></span> + Developer Preview 2</a> + </div> + </div> + </div> +</a> +</article></section> -<div class="actions-bar" style="margin-top:20px"> - <div class="wrap"> +<div class="actions-bar dac-expand dac-invert"> + <div class="wrap dac-offset-parent"> + <a class="dac-fab dac-scroll-button" data-scroll-button href="#build-apps"> + <i class="dac-sprite dac-arrow-down-gray"></i> + </a> <div class="actions"> - <div><a href="{@docRoot}sdk/index.html">取得 SDK</a></div> - <div><a href="{@docRoot}samples/index.html">瀏覽範例</a></div> - <div><a href="//www.youtube.com/user/androiddevelopers">觀賞影片</a></div> - <div><a href="{@docRoot}distribute/googleplay/developer-console.html">管理您的應用程式</a></div> + <div><a href="{@docRoot}sdk/index.html"> + <span class="dac-sprite dac-auto-chevron-large"></span> + Get the SDK + </a></div> + <div><a href="{@docRoot}samples/index.html"> + <span class="dac-sprite dac-auto-chevron-large"></span> + Browse Samples + </a></div> + <div><a href="//www.youtube.com/user/androiddevelopers"> + <span class="dac-sprite dac-auto-chevron-large"></span> + Watch Videos + </a></div> </div><!-- end .actions --> </div><!-- end .wrap --> </div><!-- end .actions-bar --> -<div class="landing-rest-of-page"> - <div class="landing-section"> - <div class="wrap"> - <div class="landing-section-header"> +<section class="dac-section dac-section-light" id="build-apps"><div class="wrap"> + <h1 class="dac-section-title">Build Beautiful Apps</h1> + <div class="dac-section-subtitle"> + Resources to get you started with designing and developing for Android. + </div> + <div class="resource-widget resource-flow-layout col-16" + data-query="collection:index/primary" + data-cardSizes="6x6" + data-maxResults="3"></div> +</div></section> - <div class="landing-h1" style="margin-top:0px">針對多螢幕世界建置</div> - <div class="landing-subhead" style="margin-top: 20px;"> - Android 在全球數百萬部手持式裝置上執行, <br> - 而且它現在支援這些令人興奮、各種尺寸的裝置。 - </div> - </div> - <div class="landing-body" style="margin-top: 50px;"> - <div class="landing-breakout cols"> - <div class="col-3-wide"> - <img src="{@docRoot}images/home/wear-wordmark.png"> <img src="{@docRoot}images/home/wear.png"> - <p class="landing-small"> - 為您的使用者提供可隨時隨地存取的資訊。 - </p> - <p class="landing-small"> - <a href="{@docRoot}wear/index.html">了解 Android Wear</a> - </p> - </div> - <div class="col-3-wide"> - <img src="{@docRoot}images/home/tv-wordmark.png"> <img src="{@docRoot}images/home/tv.png"> - <p class="landing-small"> - 為大螢幕建置您的應用程式,並將您的內容帶到生活中。 - </p> - <p class="landing-small"> - <a href="{@docRoot}tv/index.html">了解 Android TV</a> +<div class="dac-hero-carousel" data-carousel-query="collection:index/secondary/carousel"> +</div> - </p> - </div> - <div class="col-3-wide"> - <img src="{@docRoot}images/home/auto-wordmark.png"> <img src="{@docRoot}images/home/auto.png"> - <p class="landing-small"> - 將您的音樂應用程式延伸到車用娛樂系統。 - </p> - <p class="landing-small"> - <a href="{@docRoot}auto/index.html">了解 Android Auto</a> - </p> - </div> - </div> - </div> - </div> <!-- end .wrap --> - </div> <!-- end .landing-section -->
\ No newline at end of file +<section class="dac-section dac-gray"><div class="wrap"> + <div class="cols"><div class="col-10of12 col-push-1of12"> + <h1 class="dac-section-title">針對多螢幕世界建置</h1> + <div class="dac-section-subtitle"> + Android 在全球數百萬部手持式裝置上執行, <br> + 而且它現在支援這些令人興奮、各種尺寸的裝置。 + </div> + </div></div> + <div class="resource-widget resource-flow-layout col-16" + data-query="collection:index/multiscreen" + data-cardSizes="6x6" + data-maxResults="3"></div> +</div></section> diff --git a/docs/html-intl/intl/zh-tw/preview/api-overview.jd b/docs/html-intl/intl/zh-tw/preview/api-overview.jd new file mode 100644 index 0000000..f6c5696 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/api-overview.jd @@ -0,0 +1,521 @@ +page.title=API 總覽 +page.keywords=預覽,sdk,相容性 +page.tags=previewresources, androidm +sdk。platform.apiLevel=22-mnc +page.image=images/cards/card-api-overview_16-9_2x.png +@jd:body + + +<div id="qv-wrapper"> +<div id="qv"> + +<h2>本文件內容 +<a href="#" onclick="hideNestedItems('#toc44',this);return false;" class="header-toggle"> + <span class="more">顯示更多內容</span> + <span class="less" style="display:none">顯示較少內容</span></a></h2> + +<ol id="toc44" class="hide-nested"> + <li><a href="#app-linking">應用程式連結</a></li> + <li><a href="#backup">針對應用程式進行自動備份</a></li> + <li><a href="#authentication">驗證</a> + <ol> + <li><a href="#fingerprint-authentication">指紋驗證</a></li> + <li><a href="#confirm-credential">確認認證</a></li> + </ol> + </li> + <li><a href="#direct-share">直接分享</a></li> + <li><a href="#voice-interactions">語音互動</a></li> + <li><a href="#assist">協助 API</a></li> + <li><a href="#notifications">通知</a></li> + <li><a href="#bluetooth-stylus">藍牙手寫筆支援</a></li> + <li><a href="#ble-scanning">已改進藍牙低電量掃描</a></li> + <li><a href="#hotspot">無線基地台 2.0 版本 1 支援</a></li> + <li><a href="#4K-display">4K 顯示模式</a></li> + <li><a href="#behavior-themeable-colorstatelists">具備設計風格的 ColorStateList</a></li> + <li><a href="#audio">音訊功能</a></li> + <li><a href="#video">影片功能</a></li> + <li><a href="#camera">相機功能</a> + <ol> + <li><a href="#flashlight">閃光燈 API</a></li> + <li><a href="#reprocessing">相機重新處理</a></li> + </ol> + </li> + <li><a href="#afw">Android for Work 功能</a></li> +</ol> + +<h2>API 差異</h2> +<ol> +<li><a href="{@docRoot}preview/download.html">API 級別 22 到 M 預覽版»</a> </li> +</ol> + +</div> +</div> + +<p>M 開發人員預覽版讓您能夠搶先查看即將發行的 Android 平台版本,這個版本將提供可供使用者和應用程式開發人員使用的新功能。 + +本文件提供最值得受到矚目的 API 簡介。</p> + +<p>M 開發人員預覽版的適用對象是<strong>早期採用的開發人員</strong>和<strong>測試者</strong>。 +如果您對於如何影響 Android 架構方向深感興趣,請<a href="{@docRoot}preview/setup-sdk.html">嘗試使用 M 開發人員預覽版</a>,然後將您的意見反應傳送給我們! + + +</p> + +<p class="caution"><strong>注意:</strong>請勿將使用 M 開發人員預覽版的應用程式發行到 Google Play 商店。 +</p> + +<p class="note"><strong>注意:</strong>本文件通常會參考 <a href="{@docRoot}">developer.android.com</a> 上尚未提供可用參考資料的類別和方法。 +這些 API 元素在本文件中的格式是 {@code code style} (不含超連結)。 +如需這些元素的 API 初稿文件,請下載<a href="{@docRoot}preview/download.html#docs">預覽版參考資料</a>。 +</p> + +<h3>重要行為變更</h3> + +<p>如果您先前曾發行過適用於 Android 的應用程式,請注意,您的應用程式會受到平台中的變更所影響。 +</p> + +<p>如需完整資訊,請參閱<a href="behavior-changes.html">行為變更</a>。</p> + +<h2 id="app-linking">應用程式連結</h2> +<p>這個預覽版提供功能更強大的應用程式連結來增強 Android 的意圖系統。此功能讓您能夠將應用程式關聯到您自己的 Web 網域。 +根據這個關聯,平台可以判斷要用來處理特定 Web 連結的預設應用程式,並略過提示使用者選取應用程式的程序。如要深入瞭解如何實作此功能,請參閱<a href="{@docRoot}preview/features/app-linking.html">應用程式連結</a>。 + + + + +<h2 id="backup">針對應用程式進行自動備份</h2> +<p>系統現在會針對應用程式執行自動完整資料備份與還原。預設會針對目標為 M 預覽版的應用程式啟用這個行為;您不需要新增任何其他的程式碼。 +如果使用者刪除他們的 Google 帳戶,也會同時刪除他們的備份資料。 +如要深入瞭解此功能的運作方式以及如何在檔案系統上設定要備份的內容,請參閱<a href="{@docRoot}preview/backup/index.html">針對應用程式進行自動備份</a>。 + +</p> + +<h2 id="authentication">驗證</h2> +<p>這個預覽版提供新的 API,讓您能夠在支援的裝置上利用使用者的指紋掃描來驗證他們,並使用裝置解鎖機制 (例如鎖定螢幕密碼) 來檢查距離最後一次驗證該使用者的時間有多接近。 + +將這些 API 與 <a href="{@docRoot}training/articles/keystore.html">Android 金鑰存放區系統</a>搭配使用。 +</p> + +<h3 id="fingerprint-authentication">指紋驗證</h3> + +<p>如要透過指紋掃描驗證使用者,請取得新的 +{@code android.hardware.fingerprint.FingerprintManager} 類別的執行個體,然後呼叫 +{@code FingerprintManager.authenticate()} 方法。您的應用程式必須在配備指紋感應器的相容裝置上執行。 +您必須在應用程式上實作適用於指紋驗證流程的使用者介面,並在您的 UI 中使用標準的 Android 指紋圖示。Android 指紋圖示 ({@code c_fp_40px.png}) 隨附於<a href="https://github.com/googlesamples/android-FingerprintDialog" class="external-link">範例應用程式</a>中。如果您正在開發多個使用指紋驗證的應用程式,請注意,每個應用程式都必須個別驗證使用者的指紋。 + + + + +</p> + +<p>如要在您的應用程式中使用此功能,請先在您的宣示說明中新增 {@code USE_FINGERPRINT} 權限。 +</p> + +<pre> +<uses-permission + android:name="android.permission.USE_FINGERPRINT" /> +</pre> + +<img src="{@docRoot}preview/images/fingerprint-screen.png" srcset="{@docRoot}preview/images/fingerprint-screen.png 1x, {@docRoot}preview/images/fingerprint-screen_2x.png 2x" style="float:right; margin:0 0 10px 20px" width="282" height="476" /> + +<p>如要查看指紋驗證的應用程式實作,請參閱<a href="https://github.com/googlesamples/android-FingerprintDialog" class="external-link">指紋對話方塊範例</a>。 + +</p> + +<p>如果您正在測試此功能,請依照下列步驟執行:</p> +<ol> +<li>安裝 Android SDK 工具修訂版 24.3 (如果您尚未安裝)。</li> +<li>前往 [設定] > [安全性] > [指紋]<strong></strong>,然後依照註冊指示,在模擬器中註冊新的指紋。 +</li> +<li>使用模擬器,利用下列命令來模擬指紋輕觸事件。 +使用同一個命令,在鎖定螢幕上或您的應用程式中模擬指紋輕觸事件。 + +<pre class="no-prettyprint"> +adb -e emu finger touch <finger_id> +</pre> +<p>在 Windows 上,您可能必須執行 {@code telnet 127.0.0.1 <emulator-id>},後面接著 +{@code finger touch <finger_id>}。 +</p> +</li> +</ol> + +<h3 id="confirm-credential">確認認證</h3> +<p>您的應用程式可以根據使用者最近一次將裝置解鎖的時間有多接近來驗證他們。此功能讓使用者不需記住其他應用程式特定的密碼,並且讓您不需要實作自己的驗證使用者介面。 + +您的應用程式應該將此功能與公用或秘密金鑰實作搭配使用,來進行使用者驗證。 +</p> + +<p>如要設定在成功驗證使用者之後,同一個金鑰可重複使用的逾時時間長度,可在您設定 {@link javax.crypto.KeyGenerator} 或 +{@link java.security.KeyPairGenerator} 時,呼叫新的 +{@code android.security.keystore.KeyGenParameterSpec.setUserAuthenticationValidityDurationSeconds()} +方法。 +此功能目前適用於對稱式密碼編譯操作。 +</p> + +<p>避免過度顯示重新驗證對話方塊 -- 您的應用程式應該先嘗試使用密碼編譯物件,如果逾時過期,才使用 +{@link android.app.KeyguardManager#createConfirmDeviceCredentialIntent(java.lang.CharSequence, java.lang.CharSequence) createConfirmDeviceCredentialIntent()} +方法在您的應用程式內重新驗證使用者。 + +</p> + +<p>如要查看此功能的應用程式實作,請參閱<a href="https://github.com/googlesamples/android-ConfirmCredential" class="external-link">確認認證範例</a>。 + +</p> + +<h2 id="direct-share">直接分享</h2> + +<img src="{@docRoot}preview/images/direct-share-screen.png" srcset="{@docRoot}preview/images/direct-share-screen.png 1x, {@docRoot}preview/images/direct-share-screen_2x.png 2x" style="float:right; margin:0 0 20px 30px" width="312" height="329" /> + +<p>這個預覽版提供 API,讓使用者能夠以直覺且快速的方式進行分享。您現在可以定義「直接分享目標」<em></em>,在您的應用程式中啟動特定的行為。這些直接分享目標是透過 [分享]<em></em> 選單來向使用者公開。 + +此功能讓使用者能夠將內容分享到其他應用程式內的目標,例如聯絡人。 +例如,直接分享目標可以在其他社交網路應用程式中啟動某個活動,讓使用者能夠在該應用程式中,直接與特定的朋友或社群分享內容。 + +</p> + +<p>如要啟用直接分享目標,您必須定義一個類別來擴充 +{@code android.service.} <br> +{@code chooser.ChooserTargetService} 類別。在宣示說明中宣告您的 +{@code ChooserTargetService}。在該宣告中,指定 +{@code BIND_CHOOSER_TARGET_SERVICE} 權限以及含有 +{@code SERVICE_INTERFACE} 動作的意圖篩選條件。</p> +<p>下列範例示範如何在您的宣示說明中宣告 {@code ChooserTargetService}。 +</p> +<pre> +<service android:name=".ChooserTargetService" + android:label="@string/service_name" + android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"> + <intent-filter> + <action android:name="android.service.chooser.ChooserTargetService" /> + </intent-filter> +</service> +</pre> + +<p>針對您要向 {@code ChooserTargetService} 公開的每個活動,在您的應用程式宣示說明中,新增名稱為 +{@code "android.service.chooser.chooser_target_service"} 的 +{@code <meta-data>} 元素。 +</p> + +<pre> +<activity android:name=".MyShareActivity” + android:label="@string/share_activity_label"> + <intent-filter> + <action android:name="android.intent.action.SEND" /> + </intent-filter> +<meta-data + android:name="android.service.chooser.chooser_target_service" + android:value=".ChooserTargetService" /> +</activity> +</pre> + +<h2 id="voice-interactions">語音互動</h2> +<p> +這個預覽版提供新的語音互動 API,可與<a href="https://developers.google.com/voice-actions/" class="external-link">語音操作</a>搭配使用,讓您能夠在應用程式內建置交談式語音體驗。 + +呼叫 +{@code android.app.Activity.isVoiceInteraction()} 方法,來判斷是否已啟動您的活動來回應語音操作。 +如果是,則您的應用程式可以使用 +{@code android.app.VoiceInteractor} 類別,來要求使用者進行語音確認、從選項清單中選取,以及其他更多動作。 +如要深入瞭解如何實作語音操作,請參閱<a href="https://developers.google.com/voice-actions/interaction/" class="external-link">語音操作開發人員網站</a>。 + +</p> + +<h2 id="assist">協助 API</h2> +<p> +這個預覽版提供一種新方式,可透過小幫手吸引使用者來使用您的應用程式。如要使用此功能,使用者必須啟用小幫手來使用目前的內容。 +啟用之後,使用者就能夠在所有應用程式內,按住 <strong>Home</strong> 按鈕不放來啟用小幫手。 +</p> +<p>您的應用程式可以設定 +{@link android.view.WindowManager.LayoutParams#FLAG_SECURE} 旗標,選擇不要與小幫手分享目前的內容。除了平台傳遞給小幫手的一組標準資訊之外,您的應用程式也可以使用新的 {@code android.app.Activity.AssistContent} 類別來分享其他資訊。 + +</p> + +<p>如要將您應用程式的其他內容提供給小幫手,請依照下列步驟執行:</p> + +<ol> +<li>實作 {@link android.app.Application.OnProvideAssistDataListener} 介面。</li> +<li>使用 +{@link android.app.Application#registerOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener) registerOnProvideAssistDataListener()} 來註冊這個監聽器。</li> +<li>如要提供特定活動的內容資訊,請覆寫 + {@link android.app.Activity#onProvideAssistData(android.os.Bundle) onProvideAssistData()} +回呼,然後選擇性地覆寫新的 {@code Activity.onProvideAssistContent()} 回呼。 +</ol> + +<h2 id="notifications">通知</h2> +<p>這個預覽版新增了下列適用於通知的 API 變更:</p> +<ul> + <li>新的 {@code NotificationListenerService.INTERRUPTION_FILTER_ALARMS} 篩選條件級別,會對應至新的「僅允許鬧鐘」<em></em>的請勿打擾模式。 +</li> + <li>新的 {@code Notification.CATEGORY_REMINDER} 類別值,可用來分辨來自其他事件 ({@link android.app.Notification#CATEGORY_EVENT}) 與鬧鐘 ({@link android.app.Notification#CATEGORY_ALARM}) 的使用者排程提醒。 + + +</li> + <li>新的 {@code android.graphics.drawable.Icon} 類別,可以透過 {@code Notification.Builder.setSmallIcon(Icon)} 和 +{@code Notification.Builder.setLargeIcon(Icon)} 方法來附加您的通知。 +</li> + <li>新的 {@code NotificationManager.getActiveNotifications()} 方法,讓您的應用程式能夠找出它們目前有哪些通知仍處於有效狀態。 +如要查看使用此功能的應用程式實作,請參閱<a href="https://github.com/googlesamples/android-ActiveNotifications" class="external-link">使用中通知範例</a>。 +</li> +</ul> + +<h2 id="bluetooth-stylus">藍牙手寫筆支援</h2> +<p>這個預覽版提供對於使用者使用藍牙手寫筆進行輸入的改良支援。使用者可以將相容的藍芽手寫筆與他們的手機或平板電腦配對並連線。 +連線之後,來自觸控螢幕的位置資訊會與來自手寫筆的壓力和按鈕資訊結合,比起單獨使用觸控螢幕,這樣能夠提供更大範圍的表達方式。 + +您的應用程式可以藉由在您的活動中註冊新的 +{@code View.onStylusButtonPressListener} 和 {@code GestureDetector.OnStylusButtonPressListener} +回呼,來監聽手寫筆按鈕的按下動作,並執行次要動作。 +</p> + +<p>使用 {@link android.view.MotionEvent} 方法和常數來偵測手寫筆按鈕互動: +</p> +<ul> +<li>如果使用者使用具有一個按鈕的手寫筆輕觸應用程式的螢幕,則 +{@link android.view.MotionEvent#getToolType(int) getTooltype()} 方法會傳回 +{@link android.view.MotionEvent#TOOL_TYPE_STYLUS}。</li> +<li>針對目標為 M 預覽版的應用程式, +{@link android.view.MotionEvent#getButtonState() getButtonState()} +方法會在使用者按下主要手寫筆按鈕時傳回 {@code MotionEvent.STYLUS_BUTTON_PRIMARY}。 +如果手寫筆有第二個按鈕,則當使用者按下該按鈕時,同一個方法會傳回 +{@code MotionEvent.STYLUS_BUTTON_SECONDARY}。如果使用者同時按下這兩個按鈕,此方法即會使用 OR 連結,一併傳回這兩個值 ({@code STYLUS_BUTTON_PRIMARY|STYLUS_BUTTON_SECONDARY})。 + +</li> +<li> +針對目標為較低平台版本的應用程式, +{@link android.view.MotionEvent#getButtonState() getButtonState()} 方法會傳回 +{@link android.view.MotionEvent#BUTTON_SECONDARY} (針對主要手寫筆按鈕的按下動作)、 +{@link android.view.MotionEvent#BUTTON_TERTIARY} (針對次要手寫筆按鈕的按下動作),或兩者。 +</li> +</ul> + +<h2 id="ble-scanning">已改進藍牙低電量掃描</h2> +<p> +如果您的應用程式會執行藍芽低電量掃描,就可以使用新的 +{@code android.bluetooth.le.ScanSettings.Builder.setCallbackType()} 方法,來指定如果先找到符合 +{@link android.bluetooth.le.ScanFilter} 組合的廣告封包,以及在某個時段中找不到它時,只需通知回呼。 + +比起先前平台版本中所提供的功能,這個掃描方法功能更強大且更有效率。 + +</p> + +<h2 id="hotspot">無線基地台 2.0 版本 1 支援</h2> +<p> +這個預覽版在 Nexus 6 和 Nexus 9 裝置上新增對於無線基地台 2.0 版本 1 規格的支援。如要在您的應用程式中佈建無線基地台 2.0 認證,請使用 +{@link android.net.wifi.WifiEnterpriseConfig} 類別的新方法,例如 {@code setPlmn()} 和 +{@code setRealm()}。 +在 {@link android.net.wifi.WifiConfiguration} 物件中,您可以設定 +{@link android.net.wifi.WifiConfiguration#FQDN} 和 {@code providerFriendlyName} 欄位。新的 {@code ScanResult.PasspointNetwork} 屬性指出偵測到的網路是否代表無線基地台 2.0 存取點。 + + +</p> + +<h2 id="4K-display">4K 顯示模式</h2> +<p>此平台現在允許應用程式能夠要求將在相容硬體中呈現的顯示解析度升級到 4K。 +如要查詢目前的實際解析度,請使用新的 +{@code android.view.Display.Mode} API。如果 UI 是使用較低的邏輯解析度來繪製,並向上升級為較高的實際解析度,請注意, +{@code Display.Mode.getPhysicalWidth()} 方法傳回的實際解析度可能會與 {@link android.view.Display#getSize(android.graphics.Point) getSize()} 報告的邏輯解析度不同。 + +</p> + +<p>您可以在應用程式執行時,藉由設定應用程式視窗的 {@code WindowManager.LayoutParams.preferredDisplayModeId} 屬性,來要求系統變更該應用程式中的實際解析度。 +如果您想要切換為 4K 顯示解析度,這個功能非常實用。 +儘管在 4K 顯示模式中,UI 會持續使用原始解析度 (例如 1080p) 來呈現並向上升級為 4K,但是 +{@link android.view.SurfaceView} 物件可能會以原生解析度來顯示內容。 +</p> + +<h2 id="behavior-themeable-colorstatelists">具備設計風格的 ColorStateList</h2> +<p>針對執行 M 預覽版的裝置, +{@link android.content.res.ColorStateList} 中目前支援設計風格屬性。 +{@link android.content.res.Resources#getColorStateList(int) getColorStateList()} 和 +{@link android.content.res.Resources#getColor(int) getColor()} 方法已過時。如果您正在呼叫這些 API,請改為呼叫新的 {@code Context.getColorStateList()} 或 +{@code Context.getColor()} 方法。 +您也可以透過 {@link android.support.v4.content.ContextCompat},在 v4 appcompat 程式庫中取得這些方法。 +</p> + +<h2 id="audio">音訊功能</h2> + +<p>這個預覽版在 Android 上新增了音訊處理的增強功能,包括: </p> +<ul> + <li>利用新的 {@code android.media.midi} API,來支援 <a href="http://en.wikipedia.org/wiki/MIDI" class="external-link">MIDI</a> 通訊協定。 +使用這些 API 來傳送與接收 MIDI 事件。 +</li> + <li>新的 {@code android.media.AudioRecord.Builder} 和 {@code android.media.AudioTrack.Builder} +類別,可分別建立數位音訊擷取和播放物件,並設定音訊來源和接收屬性來覆寫系統預設值。 +</li> + <li>API 勾點,適合用來關聯音訊與輸入裝置。如果您的應用程式允許使用者從連接到 Android TV 的遊戲控制器或遙控器啟動音訊搜尋,則這特別有用。系統會在使用者啟動搜尋時,叫用新的 {@code android.app.Activity.onSearchRequested()} 回呼。 + + +如要判斷使用者的輸入裝置是否有內建的麥克風,請從該回呼中擷取 {@link android.view.InputDevice} 物件,然後呼叫新的 +{@code InputDevice.hasMic()} 方法。 +</li> + <li>新的 {@code android.media.AudioDevicesManager} 類別,讓您能夠擷取所有已連接的來源與接收音訊裝置的清單。 +如果您想要讓應用程式在連接或中斷連接音訊裝置時收到通知,也可以指定 +{@code android.media.OnAudioDeviceConnectionListener} 物件。 +</li> +</ul> + +<h2 id="video">影片功能</h2> +<p>這個預覽版在影片處理 API 中增加了新功能,包括:</p> +<ul> +<li>新的 {@code android.media.MediaSync} 類別,可協助應用程式同步轉譯音訊和影片串流。 +音訊緩衝區是利用非封鎖的方式來提交,並透過回呼來傳回。 +它也支援動態播放速率。 +</li> +<li>新的 {@code MediaDrm.EVENT_SESSION_RECLAIMED} 事件,指出應用程式開啟的工作階段已由資源管理員所回收。 +如果您的應用程式使用 DRM 工作階段,就應該處理這個事件,並確定不會使用回收的工作階段。 + +</li> +<li>新的 {@code MediaCodec.CodecException.ERROR_RECLAIMED} 錯誤碼,表示資源管理員已回收轉碼器所使用的媒體資源。 +如果發生這個例外狀況,就必須釋放轉碼器,就如同它已進入終止狀態。 + +</li> +<li>新的 {@code MediaCodecInfo.CodecCapabilities.getMaxSupportedInstances()} 介面,可取得支援並行轉碼器執行個體數目上限的提示。 + +</li> +<li>新的 {@code MediaPlayer.setPlaybackParams()} 方法,可將媒體播放速率設定為快速或慢速播放。 +這也可以和影片一起自動延伸或加速音訊播放。 +</li> +</ul> + +<h2 id="camera">相機功能</h2> +<p>這個預覽版包含下列可用來存取相機閃光燈和相機重新處理影像的 API: +</p> + +<h3 id="flashlight">閃光燈 API</h3> +<p>如果相機裝置具有閃光裝置,則您可以呼叫 {@code CameraManager.setTorchMode()} +方法,在不開啟相機裝置的情況下,開啟或關閉閃光裝置的閃光模式。應用程式不具備閃光裝置或相機裝置的獨佔擁有權。 +每當相機裝置變成無法使用時,或者,當其他相機資源讓閃光變成無法使用時,閃光模式也會關閉且變成無法使用。 + +其他應用程式也會呼叫 {@code setTorchMode()} +來關閉閃光模式。關閉最後一個開啟閃光模式的應用程式時,閃光模式即會關閉。 +</p> + +<p>您可以呼叫 +{@code CameraManager.registerTorchCallback()} 方法,來註冊回呼要收到有關閃光模式狀態的通知。第一次註冊回呼時,會立即使用所有目前已知具有閃光裝置之相機裝置的閃光模式來呼叫它。 + +如果成功開啟或關閉閃光模式,即會叫用 +{@code CameraManager.TorchCallback.onTorchModeChanged()} 方法。</p> + +<h3 id="reprocessing">重新處理 API</h3> +<p>{@link android.hardware.camera2 Camera2} API 已擴充,支援重新處理 YUV 和私人不透明格式的影像。 +您的應用程式會判斷是否可透過 {@code CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES} 使用重新處理功能。 +如果裝置支援重新處理,您就可以呼叫 +{@code CameraDevice.createReprocessableCaptureSession()} 來建立可重新處理的相機拍攝工作階段,然後建立適用於重新處理輸入緩衝區的要求。 + +</p> + +<p>使用 {@code ImageWriter} 類別,將輸入緩衝區流程連接到相機重新處理輸入。 +如要取得空的緩衝區,請依照這個程式設計模型執行:</p> + +<ol> +<li>呼叫 {@code ImageWriter.dequeueInputImage()} 方法。</li> +<li>在輸入緩衝區中填入資料。</li> +<li>呼叫 {@code ImageWriter.queueInputImage()} 方法,將緩衝區傳送到相機。</li> +</ol> + +<p>如果您將 {@code ImageWriter} 物件和 +{@code android.graphics.ImageFormat.PRIVATE} 影像一起使用,您的應用程式就無法直接存取影像資料。 +請改為呼叫 {@code ImageWriter.queueInputImage()} 方法但不含任何緩衝區複本,直接將 {@code ImageFormat.PRIVATE} 影像傳遞到 +{@code ImageWriter}。 +</p> + +<p>{@code ImageReader} 類別現在支援 {@code android.graphics.ImageFormat.PRIVATE} 格式的影像串流。 +這個支援讓您的應用程式能夠保留 +{@code ImageReader} 輸出影像的循環影像佇列、選取一或多個影像,然後將它們傳送到 +{@code ImageWriter} 以進行相機重新處理。</p> + +<h2 id="afw">Android for Work 功能</h2> +<p>這個預覽版包含下列適用於 Android for Work 功能的新 API:</p> +<ul> + <li><strong>已增強適用於公司擁有、單一用途裝置的控制項:</strong>裝置擁有者現在可以控制下列設定,來改進公司擁有、單一用途 (COSU) 裝置的管理: + + + <ul> + <li>使用 +{@code DevicePolicyManager.setKeyguardEnabledState()} 方法來停用或重新啟用滑動解鎖。</li> + <li>使用 +{@code DevicePolicyManager.setStatusBarEnabledState()} 方法,來停用或重新啟用狀態列 (包括快速設定、通知,以及啟動 Google 即時資訊的導覽向上滑動手勢)。 +</li> + <li>使用 {@link android.os.UserManager} 常數 +{@code DISALLOW_SAFE_BOOT} 來停用或重新啟用安全開機。</li> + <li>使用 + {@link android.provider.Settings.Global} 常數 {@code STAY_ON_WHILE_PLUGGED_IN},防止螢幕在使用者為裝置連接電源時關閉。</li> + </ul> + </li> + <li><strong>透過裝置擁有者自動安裝與解除安裝應用程式:</strong>裝置擁有者現在可以使用 {@link android.content.pm.PackageInstaller} +API (與 Google Play for Work 無關) 自動安裝與解除安裝應用程式。 +您現在可以透過裝置擁有者佈建裝置,該裝置擁有者可在不與使用者互動的情況下擷取並安裝應用程式。 +如要在不啟用 Google 帳戶的情況下輕觸一次就能佈建 Kiosk 或其他這類裝置,這個功能非常有用。 +</li> +<li><strong>自動存取企業憑證:</strong>當應用程式呼叫 +{@link android.security.KeyChain#choosePrivateKeyAlias(android.app.Activity,android.security.KeyChainAliasCallback,java.lang.String[],java.security.Principal[],java.lang.String,int,java.lang.String) choosePrivateKeyAlias()} 時,在系統提示使用者選取憑證之前,設定檔或裝置擁有者現在會呼叫 {@code DeviceAdminReceiver.onChoosePrivateKeyAlias()} 方法,為提出要求的應用程式自動提供別名。 + + +這個功能讓您能夠在不與使用者互動的情況下,為受管理的應用程式授與存取憑證的權限。 +</li> +<li><strong>自動接受系統更新。</strong>藉由使用 +{@code DevicePolicyManager.setSystemUpdatePolicy()} 來設定系統更新原則,裝置擁有者現在可以自動接受系統更新 (例如,在 Kiosk 裝置的案例中),或者延後更新,並防止使用者進行更新,最多 30 天。 + +因此,系統管理員可以設定必須取得更新的每日時間範圍 ,例如,在 Kiosk 裝置處於未使用狀態時。 +在系統更新可供使用時,系統就會檢查工作原則控制器應用程式是否已設定系統更新原則,並據以運作。 + + +</li> +<li> +<strong>委派的憑證安裝:</strong>設定檔或裝置擁有者現在可以授與第三方廠商的應用程式呼叫這些 {@link android.app.admin.DevicePolicyManager} 憑證管理 API 的能力: + + +<ul> + <li>{@link android.app.admin.DevicePolicyManager#getInstalledCaCerts(android.content.ComponentName) +getInstalledCaCerts()}</li> + <li>{@link android.app.admin.DevicePolicyManager#hasCaCertInstalled(android.content.ComponentName,byte[]) +hasCaCertInstalled()}</li> + <li>{@link android.app.admin.DevicePolicyManager#installCaCert(android.content.ComponentName,byte[]) +installCaCert()}</li> + <li>{@link android.app.admin.DevicePolicyManager#uninstallCaCert(android.content.ComponentName,byte[]) +uninstallCaCert()}</li> + <li>{@link android.app.admin.DevicePolicyManager#uninstallAllUserCaCerts(android.content.ComponentName) +uninstallAllUserCaCerts()}</li> + <li>{@link android.app.admin.DevicePolicyManager#installKeyPair(android.content.ComponentName,java.security.PrivateKey,java.security.cert.Certificate,java.lang.String) +installKeyPair()}</li> +</ul> +</li> +<li><strong>企業原廠重設保護:</strong>佈建裝置擁有者時,您現在可以藉由設定 +{@code DeviceManagerPolicy.EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS} 套件組合,來設定參數以解除鎖定原廠重設保護 (FRP)。 +NFC 程式設計人員應用程式可以在已重設裝置來解除鎖定 FRP 並佈建裝置之後提供這些參數,而不需使用先前設定的 Google 帳戶。 + +如果您並未修改這些參數,FRP 會就地保留,並防止裝置在沒有先前啟用的 Google 認證的情況下啟用。 + + +<p>此外,裝置擁有者可以在 Google Play 服務上設定應用程式限制,來指定可用來解除鎖定 FRP 的替代 Google 帳戶,以取代已在裝置上啟用的帳戶。 +</p> +</li> +<img src="{@docRoot}preview/images/work-profile-screen.png" srcset="{@docRoot}preview/images/work-profile-screen.png 1x, {@docRoot}preview/images/work-profile-screen_2x.png 2x" style="float:right; margin:0 0 10px 20px" width="282" height="476" /> +<li><strong>資料使用量追蹤。</strong>設定檔或裝置擁有者現在可以使用新的 +{@code android.app.usage.NetworkStatsManager} 方法,針對可在 [設定] > [資料]<strong></strong> 使用量中看見的資料使用量統計資料進行查詢。 +系統會自動授與設定檔擁有者權限來查詢他們所管理之設定檔上的資料,在此同時,裝置擁有者會取得受管理的主要使用者之使用量資料的存取權限。 + +</li> +<li><strong>執行階段權限管理:</strong> +<p>設定檔或裝置擁有者可以使用 +{@code DevicePolicyManager.setPermissionPolicy()},針對所有應用程式的所有執行階段要求設定權限原則,以提示使用者授與一般權限,或者以無訊息方式自動授與或拒絕該權限。 + +如果設定了後項原則,使用者就無法在應用程式權限畫面的 [設定]<strong></strong> 中,修改設定檔或裝置擁有者所做的選項。 + +</p></li> +<li><strong>設定中的 VPN:</strong>VPN 應用程式現在可以在 [設定] > [更多] > [VPN]<strong></strong> 中看見。此外,伴隨 VPN 使用量出現的通知是該 VPN 設定方式的特定通知。 + + +針對設定檔擁有者,通知是專門用來通知是否已針對受管理的設定檔、個人設定檔或兩者設定了 VPN。 +針對裝置擁有者,通知是專門用來通知是否已針對整個裝置設定了 VPN。 +</li> +<li><strong>工作狀態通知:</strong>每當來自受管理設定檔的應用程式在前景中有活動時,狀態列上就會出現公事包圖示。 +因此,如果直接將裝置解除鎖定至受管理設定檔中應用程式的活動,即會顯示一個快顯通知,通知使用者他們正處於工作設定檔內。 + + +</li> +</ul> + +<p class="note"> + 如需 M 開發人員預覽版中所有 API 變更的詳細檢視,請參閱 <a href="{@docRoot}preview/download.html">API 差異報告</a>。 +</p> diff --git a/docs/html-intl/intl/zh-tw/preview/backup/index.jd b/docs/html-intl/intl/zh-tw/preview/backup/index.jd new file mode 100644 index 0000000..edb8b98 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/backup/index.jd @@ -0,0 +1,327 @@ +page.title=針對應用程式進行自動備份 +page.tags=backup, previewresources, androidm +page.keywords=backup, autobackup, preview +page.image=images/cards/card-auto-backup_2x.png +@jd:body + +<div id="qv-wrapper"> + <div id="qv"> + <h2>本文件內容</h2> + <ol> + <li><a href="#overview">總覽</a></li> + <li><a href="#configuring">設定資料備份</a></li> + <li><a href="#testing">測試備份設定</a></li> + <li><a href="#issues">已知問題</a></li> + </ol> + </div> +</div> + +<p> + 使用者通常會在應用程式中花費很多時間精力建立資料和設定偏好設定。 +如果使用者換掉壞掉的裝置或升級到新的裝置時,能夠保存裝置上的資料,就能夠讓使用者獲得良好的體驗。 +執行 Android M 預覽版系統的裝置可以協助在上述情況自動將應用程式資料備份到 Google 雲端硬碟,讓使用者獲得良好的體驗。 + +如果使用者變更或升級裝置,應用程式資料會自動儲存。 + +</p> + +<p> + 在執行 Android M 預覽版的裝置上安裝的所有應用程式,預設都會啟用自動備份。不需要任何額外的應用程式程式碼。 +系統則提供使用者不進行自動備份資料的選項。 +您也可以選擇限制要備份應用程式的哪些資料。 +</p> + +<p> + 本文件說明新的系統行為,以及如何指定備份應用程式的哪些資料。 + +</p> + +<h2 id="overview">總覽</h2> + +<p> + 自動備份功能保存應用程式資料的方法,是將使用者裝置上建立的資料上傳到使用者的 Google 雲端硬碟帳戶,然後將資料加密。 +儲存資料不會向您或使用者收費,儲存的資料也不會計入使用者個人雲端硬碟的容量配額。 +在 M 預覽版期間,使用者最多可以為每個 Android 應用程式儲存 25 MB 的資料。 + +</p> + +<p> + 當裝置閒置、正在充電且連線到 Wi-Fi 網路時,每 24 小時會執行一次自動備份。 +當符合上述情況時,備份管理員服務就會將所有可用的備份資料上傳到雲端。 +當使用者轉換到新的裝置,或者解除安裝又重新安裝已備份的應用程式時,系統會進行一項還原作業,將備份的資料複製到新安裝之應用程式的資料目錄。 + + +</p> + +<p class="note"> + <strong>注意:</strong>如果您的應用程式使用舊版 + <a href="{@docRoot}google/backup/index.html">Android 備份服務</a>,這個新的行為就不適用,現有的備份行為還是如往常運作。 + +</p> + + +<h3 id="auto-exclude">自動排除的資料檔案</h3> + +<p> + 並非所有應用程式資料都需要備份,例如暫存檔案和快取,因此自動備份服務預設會排除某些資料檔案: + +</p> + +<ul> + <li>{@link android.content.Context#getCacheDir +getCacheDir()} 和 {@link android.content.ContextWrapper#getCodeCacheDir getCodeCacheDir()} +方法所參考目錄中的檔案。 + </li> + + <li>位於外部儲存空間的檔案,除非這些檔案位於 +{@link android.content.Context#getExternalFilesDir getExternalFilesDir()} +方法所參考的目錄中。 + </li> + + <li>{@link android.content.Context#getNoBackupFilesDir getNoBackupFilesDir()} 方法所參考目錄中的檔案。 + + </li> +</ul> + +<h2 id="configuring">設定資料備份</h2> + +<p> + 除了上一節所列自動排除的檔案之外,其餘由 M 預覽版裝置上安裝的任何應用程式所建立的資料一律都會備份。 +您可以使用應用程式宣示說明中的設定,進一步限制和設定要備份應用程式的哪些資料。 + +</p> + +<h3 id="include-exclude">納入或排除資料</h3> + +<p> + 根據您的應用程式需要的資料和您儲存資料的方式,您可能需要設定特定的規則來納入或排除某些檔案或目錄。 +自動備份服務支援使用 XML 設定檔和應用程式宣示說明來設定這些備份規則。 + +在應用程式宣示說明中,您可以依照下列範例指定備份配置設定檔: + +</p> + +<pre> +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + package="com.my.appexample"> + <uses-sdk android:minSdkVersion="MNC"/> + <uses-sdk android:targetSdkVersion="MNC"/> + <app ... +<strong> android:fullBackupContent="@xml/mybackupscheme"></strong> + </app> + ... +</manifest> +</pre> + +<p> + 在此範例程式碼中,<code>android:fullBackupContent</code> 屬性指定應用程式開發專案的 <code>res/xml/</code> 目錄中,名為 +<code>mybackupscheme.xml</code> 的 XML 檔案。 +此設定檔包含要備份哪些檔案的規則。 +下列範例程式碼顯示排除特定檔案不要進行備份的設定檔: + +</p> + +<pre> +<?xml version="1.0" encoding="utf-8"?> +<full-backup-content> + <exclude domain="database" path="device_info.db"/> +</full-backup-content> +</pre> + +<p> + 此範例備份設定只排除特定資料庫檔案不要進行備份。 + 其他所有檔案都會備份。 +</p> + +<h4>備份設定語法</h4> + +<p> + 您可以使用備份服務設定指定要將哪些檔案納入或排除備份。 +資料備份設定 XML 檔案的語法如下所示: +</p> + +<pre> +<full-backup-content> + <include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /> + <exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /> +</full-backup-content> +</pre> + +<p> + 您可以使用下列元素和屬性指定要將哪些檔案納入備份或從備份排除: + +</p> + +<ul> + <li> + <code><include></code>。如果您想要指定備份一組資源,請使用此元素,而不要讓系統預設備份應用程式的所有資料。 +當您指定 +<code><include></code> 標籤時,系統只會備份此元素「指定的資源」<em></em>。 + + </li> + + <li> + <code><exclude></code>。如果您想要指定一組資源不要進行備份,請使用此元素。 +系統會備份應用程式中除了此元素指定之資源以外的其他所有資料。 + + </li> + + <li> + <code>domain.</code> 您想要納入或排除備份的資源類型。此屬性可以指定的有效值包括: + + </li> + + <li style="list-style: none"> + <ul> + <li> + <code>root</code>。指定資源位於應用程式的根目錄。 + </li> + + <li> + <code>file</code>。位於 +{@link android.content.Context#getFilesDir getFilesDir()} 方法傳回的目錄中的資源。 + </li> + + <li> + <code>database</code>。{@link android.content.Context#getDatabasePath getDatabasePath()} 方法或使用 +{@link android.database.sqlite.SQLiteOpenHelper} 類別傳回的資料庫。 + + </li> + + <li> + <code>sharedpref</code>。{@link android.content.Context#getSharedPreferences getSharedPreferences()} +方法傳回的 {@link android.content.SharedPreferences} 物件。 + + </li> + + <li> + <code>external</code>。指定資源位於外部儲存空間,並且位於 +{@link android.content.Context#getExternalFilesDir getExternalFilesDir()} 方法傳回的目錄中的檔案。 + + </li> + + <li> + <code>path</code>。您想要納入或排除備份的資源檔案路徑。 + + </li> + </ul> + </li> +</ul> + + +<h3 id="prohibit">禁止資料備份</h3> + +<p> + 您可以在應用程式的宣示說明元素中將 +<code>android:allowBackup</code> 屬性設定為 <code>false</code>,選擇不要對任何應用程式資料進行自動備份。 +此設定如下列範例程式碼所示: +</p> + +<pre> +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + package="com.my.appexample"> + <uses-sdk android:minSdkVersion="MNC"/> + <uses-sdk android:targetSdkVersion="MNC"/> + <app ... +<strong> android:allowBackup="false"></strong> + </app> + ... +</manifest> +</pre> + + +<h2 id="testing">測試備份設定</h2> + +<p> + 如果您建立了備份設定,就要進行測試,以確保您的應用程式能正確儲存和還原資料。 + +</p> + + +<h4>啟用備份記錄</h4> + +<p> + 如要協助判斷備份功能如何剖析您的 XML 檔案,請在執行測試備份之前先啟用記錄功能: + +</p> + +<pre class="noprettyprint"> +$ adb shell setprop log.tag.BackupXmlParserLogging VERBOSE +</pre> + +<h4>測試備份</h4> + +<p>如要手動執行備份,首先您必須呼叫下列命令以初始化備份管理員: + +</p> + +<pre class="noprettyprint"> +$ adb shell bmgr run +</pre> + +<p> + 接著,您要使用下列命令,將 <code><PACKAGE></code> 參數指定為您應用程式的套件名稱,手動備份您的應用程式: + +</p> + +<pre class="noprettyprint"> +$ adb shell bmgr fullbackup <PACKAGE></pre> + + +<h4>測試還原</h4> + +<p> + 如要在應用程式資料備份之後手動啟動還原,請呼叫下列命令,將 <code><PACKAGE></code> 參數指定為您應用程式的套件名稱: + +</p> + +<pre class="noprettyprint"> +$ adb shell bmgr restore <PACKAGE> +</pre> + +<p class="warning"> + <b>警告:</b>這個動作在執行還原作業之前會先停止您的應用程式,然後清除其中的資料。 + +</p> + +<p> + 如果解除安裝又重新安裝應用程式,就會針對應用程式啟動還原程序。應用程式安裝完成之後,就會自動從雲端還原應用程式資料。 + +</p> + + +<h4>疑難排解備份</h4> + +<p> + 如果您遇到問題,可以在 [設定] > [備份]<strong></strong> 中關閉備份再開啟、將裝置重設為出廠值,或是呼叫下列命令,清除備份資料及相關的中繼資料: + + +</p> + +<pre>$ adb shell bmgr wipe <TRANSPORT> <PACKAGE></pre> + +<p> + <code><TRANSPORT></code> 值前面必須加上 <code>com.google.android.gms</code>。 + 如要取得傳輸清單,請呼叫下列命令: +</p> + +<pre>$ adb shell bmgr list transports</pre> + +<h2 id="issues">已知問題</h2> + +<p>以下是自動備份服務的已知問題:</p> + +<ul> + <li><strong>Google 雲端通訊</strong> - 使用「Google 雲端通訊」推送通知的應用程式有一個已知問題,亦即備份由「Google 雲端通訊」註冊程序傳回的註冊 ID,會讓還原後的應用程式無法傳送推送通知。在新裝置安裝 API 之後,需要向 API 查詢新的註冊 ID,因此如果之前備份了舊的註冊 ID,就會發生問題。 + + + + +如要避免發生這個情況,請不要備份包含註冊 ID 的檔案。 + + </li> +</ul> diff --git a/docs/html-intl/intl/zh-tw/preview/behavior-changes.jd b/docs/html-intl/intl/zh-tw/preview/behavior-changes.jd new file mode 100644 index 0000000..405aea1 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/behavior-changes.jd @@ -0,0 +1,402 @@ +page.title=行為變更 +page.keywords=預覽版,sdk,相容性 +sdk.platform.apiLevel=MNC +@jd:body + +<div id="qv-wrapper"> +<div id="qv"> + +<h2>本文件內容</h2> + +<ol id="toc44" class="hide-nested"> + <li><a href="#behavior-runtime-permissions">執行階段權限</a></li> + <li><a href="#behavior-power">省電最佳化</a> + <ol> + <li><a href="#behavior-doze">休眠</a></li> + <li><a href="#behavior-app-standby">應用程式待命</a></li> + </ol> + </li> + <li><a href="#behavior-adoptable-storage">可採用的儲存裝置</a></li> + <li><a href="#behavior-apache-http-client">移除 Apache HTTP 用戶端</a></li> + <li><a href="#behavior-audiomanager-Changes">AudioManager 變更</a></li> + <li><a href="#behavior-test-selection">文字選取</a></li> + <li><a href="#behavior-keystore">Android 金鑰存放區變更</a></li> + <li><a href="#behavior-network">Wi-Fi 和網路變更</a></li> + <li><a href="#behavior-camera">相機服務變更</a></li> + <li><a href="#behavior-art-runtime">ART 執行階段</a></li> + <li><a href="#behavior-apk-validation">APK 驗證</a></li> + <li><a href="#behavior-afw">Android for Work 變更</a></li> +</ol> + +<h2>API 差異</h2> +<ol> +<li><a href="{@docRoot}preview/download.html">API 級別 22 到 M 預覽版»</a> </li> +</ol> + + +<h2>另請參閱</h2> +<ol> +<li><a href="{@docRoot}preview/api-overview.html">M 開發人員預覽版 API 總覽</a> </li> +</ol> + +</div> +</div> + +<p>除了新特性和功能以外,M 開發人員預覽版還包含各種不同的系統變更和 API 行為變更。 +本文件將強調說明一些您應該知道且在您的應用程式中加以考量的重要變更。 +</p> + +<p>如果您先前曾發行過適用於 Android 的應用程式,請注意,您的應用程式可能會受到平台中的這類變更所影響。 +</p> + +<h2 id="behavior-runtime-permissions">執行階段權限</h1> +<p>這個預覽版引進了新的權限模型,使用者現在可以在執行階段直接管理應用程式權限。 +這個模型為使用者提供了改良的能見度並使其可完全控制權限,同時為應用程式開發人員提供更流暢的安裝和自動更新程序。使用者可以針對安裝的應用程式個別授與或撤銷權限。 + + </p> + +<p>在目標為 M 預覽版的應用程式中,請務必在執行階段檢查並要求權限。 +如要判斷您的應用程式是否已獲授與權限,請呼叫新的 {@code Context.checkSelfPermission()} 方法。 +如要要求權限,請呼叫新的 +{@code Activity.requestPermission()} 方法。即使您的應用程式目標不是 M,還是應該在新的權限模型下測試您的應用程式。 +</p> + +<p>如需在您的應用程式中支援新權限模型的詳細資訊,請參閱<a href="{@docRoot}preview/features/runtime-permissions.html">權限</a>開發人員預覽版頁面。 + +如需評估對您應用程式的影響的祕訣,請參閱<a href="{@docRoot}preview/testing/guide.html#runtime-permissions">測試指南</a>。 +</p> + +<h2 id="behavior-power">省電最佳化</h2> +<p>這個預覽版針對閒置的裝置和應用程式引進了新的省電最佳化功能。</p> + +<h3 id="behavior-doze">休眠</h3> +<p>如果拔除裝置電源並關閉螢幕使其保持靜止狀態一段時間,該裝置即會進入「休眠」<em></em>模式,它會嘗試讓系統保持睡眠狀態。 +在此模式中,裝置會在短期間內定期繼續執行正常操作,因此,會進行應用程式同步處理,而系統可以執行任何待處理的操作。 + +</p> + +<p>處於休眠狀態時,下列限制會套用到您的應用程式:</p> +<ul> +<li>除非您的應用程式接收到高優先順序的 Google 雲端通訊活動訊號 (Tickle),否則會停用網路存取。 +</li> +<li><a href="{@docRoot}reference/android/os/PowerManager.WakeLock.html">喚醒鎖定</a>會被忽略。</li> +<li>使用 {@link android.app.AlarmManager} 類別排定的鬧鐘會被停用,但使用 {@link android.app.AlarmManager#setAlarmClock setAlarmClock()}方法和 {@code AlarmManager.setAndAllowWhileIdle()} 設定的鬧鐘則不會被停用。 + +</li> +<li>WiFi 掃描不會執行。</li> +<li>不容許執行您同步配接器的同步處理和工作以及 {@link android.app.job.JobScheduler}。 +</li> +</ul> +</p> +<p>當裝置離開休眠狀態時,就會執行所有待處理的工作和同步處理。</p> +<p>您可以測試此功能,方法是將執行 M 預覽版的裝置連接到您的開發電腦並呼叫下列命令: + +</p> +<pre class="no-prettyprint"> +$ adb shell dumpsys battery unplug +$ adb shell dumpsys deviceidle step +$ adb shell dumpsys deviceidle -h +</pre> +<p class="note"><strong>注意:</strong>即將發行的 <a href="https://developers.google.com/cloud-messaging/" class="external-link">Google 雲端通訊</a>版本讓您能夠指定高優先順序的訊息。 + + +如果您的應用程式收到高優先順序的 GCM 訊息,即使裝置處於休眠狀態,系統還是會授與它短暫的網路存取權限。 + +</p> + +<p>如需如何在您的應用程式中測試休眠的祕訣,請參閱<a href="{@docRoot}preview/testing/guide.html#doze-standby">測試指南</a>。 + + </p> + +<h3 id="behavior-app-standby">應用程式待命</h3> +<p>使用這個預覽版時,系統可在應用程式處於未使用狀態時,判斷它們是否處於閒置狀態。 +除非系統偵測到以下任一個訊號,否則會在一段時間之後將應用程式視為閒置: +</p> + +<ul> +<li>使用者明確啟動應用程式。</li> +<li>應用程式目前在前景中有一個處理程序 (可能是做為活動或前景服務,也可能正由其他活動或前景服務所使用)。 +</li> +<li>應用程式產生使用者可以在鎖定螢幕或通知匣中看見的通知。 +</li> +<li>使用者透過 [設定]<strong></strong> 明確要求應用程式不需進行最佳化。 +</li> +</ul> + +<p>如果拔除了裝置電源,即會停用被視為閒置之應用程式的網路存取,並擱置它們的同步處理和工作。 +為裝置插上電源時,就允許這些應用程式進行網路存取,且可執行所有已擱置的工作和同步處理。 +如果裝置長時間處於閒置狀態,則允許閒置的應用程式進行網路存取,大約是一天一次。 +</p> + +<p>您可以測試此功能,方法是將執行 M 預覽版的裝置連接到您的開發電腦並呼叫下列命令: + +</p> +<pre class="no-prettyprint"> +$ adb shell dumpsys battery unplug +$ adb shell am set-idle <packageName> true +$ adb shell am set-idle <packageName> false +$ adb shell am get-idle <packageName> +</pre> + +<p class="note"><strong>注意:</strong>即將發行的 <a href="https://developers.google.com/cloud-messaging/" class="external-link">Google 雲端通訊</a> (GCM) 版本讓您能夠指定高優先順序的訊息。 + + +如果您的應用程式收到高優先順序的 GCM 訊息,即使應用程式處於閒置狀態,系統還是會授與它短暫的網路存取權限。 + +</p> + +<p>如需如何在您的應用程式中測試應用程式待命的祕訣,請參閱<a href="{@docRoot}preview/testing/guide.html#doze-standby">測試指南</a>。 + + </p> + +<h2 id="behavior-adoptable-storage">可採用的儲存裝置</h2> +<p> +使用這個預覽版時,使用者可以採用<em></em>像是 SD 卡的外部儲存裝置。採用外部儲存裝置會加密並格式化裝置,使其可如內部儲存空間般運作。 +此功能讓使用者能夠在儲存裝置之間移動應用程式和這些應用程式的私人資料。 +移動應用程式時,系統會採用宣示說明中的 <a href="{@docRoot}guide/topics/manifest/manifest-element.html#install">{@code android:installLocation}</a> 偏好設定。 + + +</p> + +<p>如果您的應用程式會存取下列 API 或欄位,請注意,在內部和外部儲存裝置之間移動應用程式時,它們傳回的檔案路徑將會動態變更。建置檔案路徑時,強烈建議您一律動態呼叫這些 API。請勿使用硬式編碼的檔案路徑或保留先前建置的完整檔案路徑。 + + +</p> + +<ul> +<li>{@link android.content.Context} 方法: + <ul> + <li>{@link android.content.Context#getFilesDir() getFilesDir()}</li> + <li>{@link android.content.Context#getCacheDir() getCacheDir()}</li> + <li>{@link android.content.Context#getCodeCacheDir() getCodeCacheDir()}</li> + <li>{@link android.content.Context#getDatabasePath(java.lang.String) getDatabasePath()}</li> + <li>{@link android.content.Context#getDir(java.lang.String,int) getDir()}</li> + <li>{@link android.content.Context#getNoBackupFilesDir() getNoBackupFilesDir()}</li> + <li>{@link android.content.Context#getFileStreamPath(java.lang.String) getFileStreamPath()}</li> + <li>{@link android.content.Context#getPackageCodePath() getPackageCodePath()}</li> + <li>{@link android.content.Context#getPackageResourcePath() getPackageResourcePath()}</li> + </ul> +</li> +<li>{@link android.content.pm.ApplicationInfo} 欄位: + <ul> + <li>{@link android.content.pm.ApplicationInfo#dataDir dataDir}</li> + <li>{@link android.content.pm.ApplicationInfo#sourceDir sourceDir}</li> + <li>{@link android.content.pm.ApplicationInfo#nativeLibraryDir nativeLibraryDir}</li> + <li>{@link android.content.pm.ApplicationInfo#publicSourceDir publicSourceDir}</li> + <li>{@link android.content.pm.ApplicationInfo#splitSourceDirs splitSourceDirs}</li> + <li>{@link android.content.pm.ApplicationInfo#splitPublicSourceDirs splitPublicSourceDirs}</li> + </ul> +</li> +</ul> + +<p>如要在開發人員預覽版中對此功能進行偵錯,您可以執行下列命令來採用 USB 磁碟機 (這個磁碟機是透過 USB On-The-Go (OTG) 纜線連接到 Android 裝置): +</p> + +<pre class="no-prettyprint"> +$ adb shell sm set-force-adoptable true +</pre> + +<h2 id="behavior-apache-http-client">移除 Apache HTTP 用戶端</h2> +<p>這個預覽版已移除對於 Apache HTTP 用戶端的支援。如果您的應用程式正在使用這個用戶端且目標為 Android 2.3 (API 級別 9) 或更高版本,請改為使用 {@link java.net.HttpURLConnection} 類別。 + +這個 API 的效率更高,因為它能透過透明的壓縮和回應快取來降低網路使用量,並將電源耗用量降至最低。 +如要繼續使用 Apache HTTP API,您必須先在 {@code build.gradle} 檔案中宣告下列編譯時期的相依性: + +</p> +<pre> +android { + useLibrary 'org.apache.http.legacy' +} +</pre> +<p>Android 正從 OpenSSL 移至 <a href="https://boringssl.googlesource.com/boringssl/" class="external-link">BoringSSL</a> 程式庫。 + +如果您正在應用程式中使用 Android NDK,請勿連結不屬於 NDK API 一部分的密碼編譯程式庫,例如 {@code libcrypto.so} 和 {@code libssl.so}。 +這些程式庫不是公用 API,而且可能在沒有通知的情況下,在新的版本和裝置上變更或終止支援。此外,您可能會讓自己暴露於安全性弱點中。 + +因此,請改為修改您的原生程式碼,透過 JNI 來呼叫 Java 密碼編譯 API,或以靜態方式連結您選擇的密碼編譯程式庫。 + +</p> + +<h2 id="behavior-audiomanager-Changes">AudioManager 變更</h2> +<p>不再支援透過 {@link android.media.AudioManager} 類別直接設定音量或將特定串流設定為靜音。 +{@link android.media.AudioManager#setStreamSolo(int,boolean) +setStreamSolo()} 方法已過時,您應該改為呼叫 +{@code AudioManager.requestAudioFocus()} 方法。同樣地, +{@link android.media.AudioManager#setStreamMute(int,boolean) setStreamMute()} 方法已過時;請改為呼叫 {@code AudioManager.adjustStreamVolume()} 方法並傳入方向值 {@code ADJUST_MUTE} 或 {@code ADJUST_UNMUTE}。 + +</p> + +<h2 id="behavior-test-selection">文字選取</h2> + +<img src="{@docRoot}preview/images/text-selection.gif" style="float:right; margin:0 0 20px 30px" width="360" height="640" /> + +<p>當使用者在您的應用程式中選取文字時,您現在可以在<a href="http://www.google.com/design/spec/patterns/selection.html#selection-text-selection" class="external-link">浮動工具列</a>中顯示文字選取動作,例如,剪下<em></em>、複製<em></em>及貼上<em></em>。 + +使用者互動實作類似於針對內容關聯動作列所做的實作,如<a href="{@docRoot}guide/topics/ui/menus.html#CABforViews">為個別的檢視啟用內容關聯動作模式</a>中所述。 + + +</p> + +<p>如要實作適用於文字選取的浮動工具列,請在您現有的應用程式中進行下列變更: +</p> +<ol> +<li>在您的 {@link android.view.View} 或 {@link android.app.Activity} 物件中,將 +{@link android.view.ActionMode} 呼叫從 +{@code startActionMode(Callback)} 變更為 {@code startActionMode(Callback, ActionMode.TYPE_FLOATING)}。</li> +<li>進行 {@code ActionMode.Callback} 的現有實作,並改為讓它擴充 +{@code ActionMode.Callback2}。</li> +<li>覆寫 {@code Callback2.onGetContentRect()} 方法,以在檢視中提供內容 {@link android.graphics.Rect} 物件 (例如,文字選取矩形區塊) 的座標。 +</li> +<li>如果矩形區塊位置不再有效,而且這是唯一變成無效的元素,請呼叫 {@code ActionMode.invalidateContentRect()} 方法。 +</li> +</ol> + +<p>如果您正在使用 <a href="{@docRoot}tools/support-library/index.html">Android 支援程式庫</a>版本 22.2,請注意,浮動工具列無法向下相容,而且 appcompat 預設會取得 {@link android.view.ActionMode} 物件的完整控制權。 + + +這可防止浮動工具列顯示。如要在 +{@link android.support.v7.app.AppCompatActivity} 中啟用 +{@link android.view.ActionMode} 支援,請呼叫 +{@code android.support.v7.app.AppCompatActivity.getDelegate()},然後在傳回的 +{@link android.support.v7.app.AppCompatDelegate} 物件中呼叫 +{@code android.support.v7.app.AppCompatDelegate.setHandleNativeActionModesEnabled()},並將輸入參數設定為 {@code false}。 +這個呼叫會將 {@link android.view.ActionMode} 物件的控制權傳回架構中。 +儘管在 M 預覽版之前的裝置中,只支援 {@link android.support.v7.app.ActionBar} 模式,但在執行 M 預覽版的裝置中,允許架構支援 +{@link android.support.v7.app.ActionBar} 或浮動工具列模式。 +</p> + +<h2 id="behavior-keystore">Android 金鑰存放區變更</h2> +<p>使用這個預覽版時,<a href="{@docRoot}training/articles/keystore.html">Android 金鑰存放區供應程式</a>不再支援 DSA。 + +但仍支援 ECDSA。</p> + +<p>在停用或重設安全鎖定螢幕時 (例如,由使用者或裝置管理員執行),將不再刪除其餘不需加密的金鑰。 +在這些事件期間,將會刪除其餘需要加密的金鑰。 +</p> + +<h2 id="behavior-network">Wi-Fi 和網路變更</h2> + +<p>這個預覽版引進了下列對於 Wi-Fi 和網路 API 的行為變更。</p> +<ul> +<li>唯有當您建立了 {@link android.net.wifi.WifiConfiguration} 物件時,您的應用程式現在才能變更這些物件的狀態。 +系統不容許您修改或刪除由使用者或其他應用程式所建立的 +{@link android.net.wifi.WifiConfiguration} 物件。 +</li> +<li> +在以前,如果應用程式使用 +{@link android.net.wifi.WifiManager#enableNetwork(int,boolean) enableNetwork()} 搭配 +{@code disableAllOthers=true} 設定來強制裝置連接到特定的 Wi-Fi 網路,裝置即會中斷與其他網路的連線,例如行動數據。 +在這個預覽版中,裝置不再中斷與這類其他網路的連線。如果您應用程式的 {@code targetSdkVersion} 是 {@code “20”} 或更低版本,即會將它固定到選取的 Wi-Fi 網路。 + +如果您應用程式的 {@code targetSdkVersion} 是 {@code “21”} 或更高版本,請使用多網路 API (例如, +{@link android.net.Network#openConnection(java.net.URL) openConnection()}、 +{@link android.net.Network#bindSocket(java.net.Socket) bindSocket()} 及新的 +{@code ConnectivityManager.bindProcessToNetwork()} 方法),以確保會在選取的網路上傳送它的網路流量。 + +</li> +</ul> + +<h2 id="behavior-camera">相機服務變更</h2> +<p>在這個預覽版中,在相機服務中存取分享資源的模型已經從先前的「先進先服務」存取模型變更為依照優先順序針對處理程序進行處理的存取模型。 + +對於服務行為的變更如下:</p> +<ul> +<li>存取相機子系統資源 (包括開啟和設定相機裝置) 的權限是根據用戶端應用程式處理程序的「優先順序」來授與。 +通常會為具有使用者可看見或前景活動的應用程式處理程序提供較高的優先順序,讓相機資源的取得和使用更可靠。 + +</li> +<li>優先順序較低之應用程式的使用中相機用戶端可能會在優先順序較高的應用程式嘗試使用相機時被系統「撤出」。 +在已過時的 {@link android.hardware.Camera} API 中,這會導致針對被撤出的用戶端呼叫 +{@link android.hardware.Camera.ErrorCallback#onError(int,android.hardware.Camera) onError()}。 + +在 {@link android.hardware.camera2 Camera2} API 中,會導致針對被撤出的用戶端呼叫 +{@link android.hardware.camera2.CameraDevice.StateCallback#onDisconnected(android.hardware.camera2.CameraDevice) onDisconnected()} +。</li> +<li>在配備適當相機硬體的裝置上,個別的應用程式處理程序能夠單獨開啟,同時使用不同的相機裝置。 +但是,相機服務現在可以偵測到且不允許多處理程序使用案例,同時存取會對任何已開啟的相機裝置造成顯著的效能或功能降級。 + +此變更可能會導致優先順序較低的用戶端被「撤出」,即使沒有任何其他應用程式正直接嘗試存取同一個相機裝置也一樣。 + + +</li> +<li> +變更目前的使用者會導致先前的使用者帳戶所擁有之應用程式的使用中相機用戶端被撤出。 +相機的存取權受限於目前裝置使用者所擁有的使用者設定檔。例如,這實際上表示「訪客」帳戶在使用者切換到不同帳戶之後,將無法保留使用相機子系統的執行中處理程序。 + + +</li> +</ul> + +<h2 id="behavior-art-runtime">ART 執行階段</h2> +<p>ART 執行階段現在可以正確實作 +{@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()} 方法的存取規則。這個變更會修正 Dalvik 在先前版本中以不正確方式檢查存取規則的問題。如果您的應用程式使用 +{@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()} 方法且您想要覆寫存取檢查,請搭配已設定為 {@code true} 的輸入參數呼叫 +{@link java.lang.reflect.Constructor#setAccessible(boolean) setAccessible()} 方法。 + + + +如果您的應用程式使用 <a href="{@docRoot}tools/support-library/features.html#v7-appcompat">v7 appcompat 程式庫</a>或 <a href="{@docRoot}tools/support-library/features.html#v7-recyclerview">v7 recyclerview 程式庫</a>,您就必須更新應用程式來使用這些程式庫的最新版本。 + + +否則,請確定從 XML 參考的所有自訂類別都會更新,如此一來就能存取其類別建構函式。 +</p> + +<p>這個預覽版會更新動態連結器的行為。動態連結器現在瞭解程式庫的 {@code soname} 與其路徑 (<a href="https://code.google.com/p/android/issues/detail?id=6670" class="external-link">公開的 Bug 6670</a>) 之間的差異,而且現在會實作依 {@code soname} 進行搜尋。 + + + +先前可運作但含有錯誤 {@code DT_NEEDED} 項目 (通常是組建電腦之檔案系統上的絕對路徑) 的應用程式可能會在載入時失敗。 +</p> + +<p>{@code dlopen(3) RTLD_LOCAL} 旗標現在會以正確的方式實作。請注意, +{@code RTLD_LOCAL} 是預設值,因此,對 {@code dlopen(3)} 的呼叫 (不會明確使用 +{@code RTLD_LOCAL}) 將會受到影響 (除非您的應用程式明確使用 {@code RTLD_GLOBAL})。使用 +{@code RTLD_LOCAL},由後續呼叫 +{@code dlopen(3)} (相對於 {@code DT_NEEDED} 項目所參考) 所載入的程式庫將無法使用符號。</p> +</p> + +<h2 id="behavior-apk-validation">APK 驗證</h2> +<p>此平台現在會執行較嚴格的 APK 驗證。如果檔案宣告於宣示說明中但未出現在 APK 本身中,則 APK 會被視為毀損。 +如果移除了任何內容,就必須重新簽署 APK。 +</p> + +<h2 id="behavior-afw">Android for Work 變更</h2> +<p>這個預覽版包含下列對於 Android for Work 的行為變更:</p> +<ul> +<li><strong>個人內容中的工作聯絡人。</strong>Google 撥號程式通話記錄現在會在使用者檢視過去的通話記錄時顯示工作聯絡人。將 {@code DevicePolicyManager.setCrossProfileCallerIdDisabled()} 設定為 {@code true},可以在 Google 撥號程式通話記錄中隱藏工作設定檔聯絡人。 + + +只有在您將 {@code DevicePolicyManager.setBluetoothContactSharingDisabled()} 設定為 {@code false} 時,工作聯絡人才會透過藍牙,與個人聯絡人一起顯示於裝置上。 + +預設會設定為 {@code true}。 + +</li> +<li><strong>移除 WiFi 設定:</strong>如果將工作設定檔刪除,則現在會移除由設定檔擁有者所新增的 WiFi 設定 (例如,透過呼叫 +{@link android.net.wifi.WifiManager#addNetwork(android.net.wifi.WifiConfiguration) +addNetwork()} 方法)。 +</li> +<li><strong>鎖定 WiFi 設定:</strong>使用者無法再修改或刪除任何由使用中裝置擁有者所建立的 WiFi 設定。 +只要尚未針對使用者設定 {@link android.os.UserManager} 常數 +{@link android.os.UserManager#DISALLOW_CONFIG_WIFI},該使用者就仍能建立和修改他們自己的 WiFi 設定。 +</li> +<li><strong>透過 Google 帳戶新增來下載工作原則控制器:</strong>在將要求透過工作原則控制器 (WPC) 應用程式進行管理的 Google 帳戶新增到受管理內容以外的裝置時,新增帳戶流程現在會提示使用者安裝適當的 WPC。這個行為也適用於在初始裝置設定精靈中透過 [設定] > [帳戶]<strong></strong> 來新增的帳戶。 + + + +</li> +<li><strong>對於特定 DevicePolicyManager API 行為的變更:</strong>呼叫 {@link android.app.admin.DevicePolicyManager#setCameraDisabled(android.content.ComponentName,boolean) setCameraDisabled()} +方法,只會對正在呼叫之使用者的相機產生影響;從受管理的設定檔呼叫它則不會對在主要使用者上執行的相機應用程式產生影響。 + +此外,除了裝置擁有者, +{@link android.app.admin.DevicePolicyManager#setKeyguardDisabledFeatures(android.content.ComponentName,int) setKeyguardDisabledFeatures()} +方法現在還可供設定檔擁有者使用。設定檔擁有者可以設定下列滑動解鎖限制: + +<ul> +<li>{@link android.app.admin.DevicePolicyManager#KEYGUARD_DISABLE_TRUST_AGENTS} 和 +{@link android.app.admin.DevicePolicyManager#KEYGUARD_DISABLE_FINGERPRINT},它們會對設定檔上層使用者的滑動解鎖設定產生影響。 +</li> +<li>{@link android.app.admin.DevicePolicyManager#KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS},這只會影響受管理設定檔中由應用程式所產生的通知。 +</li> +</ul> +</li> +</ul> diff --git a/docs/html-intl/intl/zh-tw/preview/download.jd b/docs/html-intl/intl/zh-tw/preview/download.jd new file mode 100644 index 0000000..3b54080 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/download.jd @@ -0,0 +1,359 @@ +page.title=下載 +page.image=images/cards/card-download_16-9_2x.png + +@jd:body + +<div style="position:relative; min-height:600px"> + + <div class="wrap" id="tos" style="position:absolute;display:none;width:inherit;"> + + <p class="sdk-terms-intro">在下載和安裝 Android 預覽版 +SDK 的元件之前 ,您必須同意遵守下列條款和條件。</p> + + <h2 class="norule">條款和條件</h2> + + <div class="sdk-terms" onfocus="this.blur()" style="width:678px"> +這是「Android SDK 預覽版授權協議」(以下稱「授權協議」)。 + +1.簡介 + +1.1「Android SDK 預覽版」(在「授權協議」中稱為「預覽版」,包括 (如果有可用的) Android 系統檔案、經過封裝的 API 和預覽版程式庫檔案) 是在「授權協議」之條款的約束下授權給您使用。「授權協議」就您對「預覽版」的使用,構成您與 Google 間具法律約束力之合約。 + +1.2「Android」係指「Android 軟體開放原始碼專案」(http://source.android.com/) 所提供的 Android 裝置軟體堆疊 (不定期更新)。 + +1.3「Google」係指 Google Inc.,是一家在美國德拉瓦州註冊的公司,地址為 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States。 + +2.接受「授權協議」 + +2.1 必須先同意遵守「授權協議」,才能使用此「預覽版」。如果不接受「授權協議」,您就無法使用此「預覽版」。 + +2.2 按一下 [接受] 且/或使用「預覽版」,即表示您同意「授權協議」的條款。 + +2.3 如果您是美國或其他國家/地區 (包括您所居住或使用此「預覽版」的國家/地區) 的法律所禁止接收此「預覽版」的人員,就不得使用此「預覽版」及接受「授權協議」。 + +2.4 如果您將在公司或組織內部使用「預覽版」,您就要代表雇主或其他實體同意受「授權協議」約束,且您代表並保證具備完整法定權限來約束您的雇主或這類實體遵守「授權協議」。如果您不具備必要的權限,就不得代表您的雇主或其他實體接受「授權協議」或使用此「預覽版」。 + +3.Google 的預覽版授權 + +3.1 在「授權協議」之條款的約束下,Google 授權您使用此「預覽版」,此授權為買斷式、不可轉讓、非獨占性、不可轉授權、有限且可撤銷,僅在您公司或組織內部私下或內部使用。此「預覽版」僅供您用於開發在 Android 平台上執行的應用程式。 + +3.2 您同意 Google 或第三方對此「預覽版」擁有一切法定權利及權益,包括存在於此「預覽版」中的任何「智慧財產權」。「智慧財產權」係指專利法、著作權法、商業秘密法、商標法及任何和所有其他專利權下的任何及一切權利。Google 保留一切未明確授予您的權利。 + +3.3 您不得將此「預覽版」用於「授權協議」未明文許可的任何用途。除非適用的第三方授權所需,否則您不得:(a) 對此「預覽版」或其任何部分進行複製 (備份用途除外)、修改、改編、轉散佈、反向組譯、還原工程、解編或製作衍生成品;或是 (b) 將此「預覽版」的任何部分載入至行動電話或個人電腦以外的任何其他硬體裝置、將此「預覽版」的任何部分與其他軟體結合,或散佈包含此「預覽版」之任一部分的任何軟體或裝置。 + +3.4 您同意不會從事任何可能導致或造成 Android 分裂的活動,包括但不限於以任何形式散佈從此「預覽版」衍生的軟體開發套件、參其製作或宣傳。 + +3.5 對開放原始碼軟體授權下所授權之「預覽版」的使用、複製及散佈,完全受該開放原始碼軟體授權的條款管制,而不受「授權協議」管制。您同意遵守從這類開放原始碼軟體授權獲得的所有權利,並且避免採取任何可能終止、中止或侵害這類權利的行為。 + +3.6 您同意 Google 可在不事先通知您的情況下變更其所提供之「預覽版」的形式和本質,且此「預覽版」的未來版本可與在此「預覽版」的先前版本上開發的應用程式不相容。您同意 Google 通常可全權斟酌永久或暫時停止提供此「預覽版」(或此「預覽版」的任何功能) 給您或使用者,毋須事先通知。 + +3.7「授權協議」中的所有條款皆未授予您任何使用 Google 之商業名稱、商標、服務標章、標誌、網域名稱或其他明確品牌特徵的權利。 + +3.8 您同意不會移除、遮蔽或更改可能附加至或內含在此「預覽版」中的任何專利權通知 (包括著作權和商標通知)。 + +4.您對「預覽版」的使用 + +4.1 Google 同意在「授權協議」下,任何條款皆未從您 (或您的授權人) 賦予 Google 對您使用此「預覽版」開發之任何軟體應用程式的任何權利及權益,包括存在於這些應用程式中的任何智慧財產權。 + +4.2 您同意只就 (a)「授權協議」和 (b) 相關管轄權中任何適用法律、規定或是普遍獲得接受之慣例或指導方針 (包括任何有關將資料或軟體輸出或輸入美國或其他相關國家/地區的法律) 所允許的用途使用此「預覽版」及撰寫應用程式。 + +4.3 您同意如果使用此「預覽版」開發應用程式,您將保護使用者的隱私權和法定權利。如果使用者提供您使用者名稱、密碼或是其他登入資訊或個人資訊,您必須告知使用者這類資訊將提供給您的應用程式使用,並且必須為這些使用者提供法定充分的隱私權通知和保護。如果您的應用程式會儲存使用者所提供的個人或敏感資訊,它必須確保這些資訊安全無虞。如果使用者提供 Google 帳戶資訊給您,則只有在每個使用者已授權您存取其 Google 帳戶並僅限用於使用者所授權之用途的情況下,您的應用程式才能使用該資訊來存取使用者的 Google 帳戶。 + +4.4 您同意不會使用此「預覽版」從事任何不當Activity,例如開發或散佈會以未經授權的方式干擾、妨礙、損害或存取 Google 或任何第三方之伺服器、網路或是其他財產或服務的應用程式。 + +4.5 您同意對您透過 Android 裝置和 (或) Android 應用程式建立、傳輸或顯示的任何資料、內容或資源,以及上述行為造成的後果 (包括 Google 可能蒙受的任何損失或損害) 負起全責 (而 Google 對您或任何第三方就上述一切不需負任何責任)。 + +4.6 您同意對違反在此「授權協議」、任何適用之第三方合約或《服務條款》或是任何適用之法律或規定下所必須遵守的義務,以及違反相關義務造成的後果 (包括 Google 或任何第三方可能蒙受的任何損失或損害) 負起全責 (而 Google 對您或任何第三方就上述一切不需負任何責任)。 + +4.7「預覽版」目前正在開發中,因此您的測試與意見反應對開發程序非常重要。使用「預覽版」,您即認同某些功能仍處於開發階段,因此您不應期待「預覽版」擁有穩定版本的完整功能。在官方 Android SDK 發行之後,此「預覽版」不再受到支援時,您同意不使用此「預覽版」公開散佈或隨附任何應用程式。 + +5.您的開發人員認證 + +5.1 您同意負責保密 Google 可能核發給您或您自己選擇的任何開發人員認證,並且對在您開發人員認證名義下開發的所有應用程式負起全責。 + +6.隱私權和資訊 + +6.1 為了持續更新及改進此「預覽版」,Google 可能會從軟體收集某些使用狀況統計數據,包括但不限於軟體的唯一識別碼、相關 IP 位址、版本號碼,以及有關使用此「預覽版」中的哪些工具和 (或) 服務及其使用方式的相關資訊。在收集這類資訊之前,此「預覽版」會先通知您並徵求您的同意。如果您不同意,Google 將不會收集這類資訊。 + +6.2 Google 會彙總並檢查收集到的資料,據以改善此「預覽版」,並且會依據《Google 隱私權政策》(http://www.google.com/policies/privacy/) 加以妥善保存。 + +7.第三方應用程式 + +7.1 如果您使用此「預覽版」來執行第三方開發的應用程式,或是執行會存取第三方所提供之資料、內容或資源的應用程式,您同意 Google 不需對這類應用程式、資料、內容或資源負任何責任。您瞭解您透過第三方應用程式存取的所有資料、內容或資源是由其提供者負起全責,而 Google 對您因使用或存取任何這些第三方應用程式、資料、內容或資源所造成的損失或損害不需負任何責任。 + +7.2 您瞭解第三方應用程式提供給您的資料、內容或資源可能受到提供者 (或代表他們的其他人員或公司) 所擁有的智慧財產權保護。您不得根據這類資料、內容或資源 (不論是整個或部分) 修改、出租、出借、販售、散佈或製作衍生成品,除非相關擁有者明確授權您從事上述活動。 + +7.3 您瞭解使用第三方應用程式、資料、內容或資源可能受到您與相關第三方之間的個別條款約束。 + +8.使用 Google API + +8.1 Google API + +8.1.1 如果您使用任何 API 從 Google 擷取資料,您瞭解這些資料可能受到 Google 或資料提供者 (或代表他們的其他人員或公司) 所擁有的智慧財產權保護。您對任何這類 API 的使用可能受到其他《服務條款》約束。除非相關《服務條款》明文允許,否則您不得根據這類資料 (不論是整個或部分) 修改、出租、出借、販售、散佈或製作衍生成品。 + +8.1.2 使用任何 API 從 Google 擷取使用者的資料時,您瞭解並同意只有在該使用者明確同意且授權您擷取其資料,而且僅限用於使用者所授權之用途的情況下,您才能擷取資料。 + +9.終止「授權協議」 + +9.1 除非您或 Google 終止「授權協議」(請見下方說明),否則「授權協議」將持續具有效力。 + +9.2 如果想終止「授權協議」,只要停止使用此「預覽版」及任何相關的開發人員憑證即可。 + +9.3 Google 可隨時通知您終止「授權協議」,無論有無原因。 + +9.4「授權協議」在先發生下列任一情況時,將自動終止而不另行通知或採取其他行動: +(A) Google 決定不再提供此「預覽版」或此「預覽版」的特定部分給您所居住或使用此服務之國家/地區的使用者;或 +(B) Google 發行最終版本的 Android SDK。 + +9.5 當「授權條款」終止時,您在「授權協議」所獲得的授權也將會一併終止,您將立即停止「預覽版」的所有使用,而第 10、11、12 和 14 項的條款將無限期持續適用。 + +10.免責聲明 + +10.1 您明確瞭解並同意完全自負使用此「預覽版」的風險,並且此「預覽版」是依「現況」和「可提供性」提供,Google 不負任何擔保責任。 + +10.2 您對使用此「預覽版」及透過此「預覽版」以下載或其他方式取得的任何內容,需自行斟酌和自負風險,而且您對因這類使用而對您的電腦系統或其他裝置所造成的任何損害或資料遺失,需負起全責。不限於前述,您瞭解此「預覽版」不是穩定的版本,可能會包含許多錯誤、瑕疵和安全性弱點而對您的電腦系統或其他裝置造成嚴重的損害,包括完全、不可回復的損失。 + +10.3 Google 進一步明確表示不提供任何形式的瑕疵擔保和條件 (不論明示或默示),包括但不限於適售性、適合特定用途及未侵權的默示擔保和條件。 + +11.責任限制 + +11.1 您明確瞭解並同意在任何歸責理論下,就可能由您引起的任何直接、間接、附隨性、特殊性、衍生性或懲罰性損害賠償 (包括任何資料遺失),不論 Google 或其代表是否已獲告知或應已瞭解發生任何這類損失的可能性,Google、其子公司和關係企業及其授權人不必對您負起任何責任。 + +12.賠償 + +12.1 在法律允許的最大範圍內,您同意為 Google、其子公司及其個別董監事、主管、員工和代理人,就任何和一切索賠、法律行動、訴訟或訴訟程序,以及因下列原因而引起的任何和一切損失、責任、損害賠償、費用及開支 (包括合理的律師費),提供辯護、賠償損失並確保其免於承擔賠償責任:(a) 您使用此「預覽版」;(b) 您使用此「預覽版」開發的應用程式侵害任何人的任何智慧財產權,或是詆毀任何人或違反其公開權或隱私權;以及 (c) 您未遵守「授權協議」。 + +13.對「授權協議」做出的變更 + +13.1 Google 可在散佈此「預覽版」的新版本時修改「授權協議」。做出這類變更後,Google 會在提供此「預覽版」的網站上提供「授權協議」的新版本。 + +14.一般法律條款 + +14.1「授權協議」構成您與 Google 之間的法律協議,用於管制您對此「預覽版」(不包括 Google 依據個別書面協議提供給您的任何服務) 的使用,並完全取代先前您與 Google 之間就此「預覽版」簽署的相關協議。 + +14.2 您同意如果 Google 未行使或執行「授權協議」所含的任何法律權利或救濟 (或在任何適用法律下對 Google 有利的權益),並不代表 Google 正式放棄權利,Google 日後仍可行使這些權利或救濟。 + +14.3 如果經任何法院 (就此事宜依管轄權決定) 裁決「授權協議」中有任何條款無效,則該條款將自「授權協議」中移除,「授權協議」的其餘部分則不受影響。「授權協議」的其餘條款將持續具有效力且可執行。 + +14.4 您瞭解並同意 Google 旗下子公司體系的每位成員都是「授權協議」的第三方受益人,而且這類其他公司有權直接執行和依據「授權協議」中對其授予權益 (或對其有利之權利) 的任何條款。除此之外的任何其他人員或公司皆非「授權協議」的第三方受益人。 + +14.5 出口限制。此「預覽版」受美國出口法規約束。您必須遵守適用於此「預覽版」的所有國內和國際出口法規。這些法律包括對目的地、使用者及最終用途的限制。 + +14.6 未事先取得 Google 事先書面核准的情況下,您不得轉讓或轉移「授權協議」,未經這類核准的任何轉讓將會失效。您不得在未事先取得 Google 書面核准的情況下,委派其「授權協議」涵蓋的責任或義務。 + +14.7「授權協議」以及您與 Google 就「授權協議」構成的關係皆受加州法律管轄,毋須理會其法律牴觸條款。您和 Google 同意服從位於加州聖塔克拉拉 (Santa Clara, California) 郡內法院的專屬管轄權,以解決由「授權協議」產生的任何法律事務。儘管如此,您同意 Google 仍可在任何管轄權中申請禁制令救濟 (或同等類型的緊急法定救濟)。 + </div><!-- sdk terms --> + + + + <div id="sdk-terms-form"> + <p> + <input id="agree" type="checkbox" name="agree" value="1" onclick="onAgreeChecked()" /> + <label id="agreeLabel" for="agree">我已閱讀並同意上述條款及細則</label> + </p> + <p><a href="" class="button disabled" id="downloadForRealz" onclick="return onDownloadForRealz(this);"></a></p> + </div> + + + </div><!-- end TOS --> + + + <div id="landing"> + +<div id="qv-wrapper"> + <div id="qv"> + <h2>本文件內容</h2> + <ol> + <li><a href="#sdk">預覽版 SDK</a></li> + <li><a href="#docs">開發人員文件</a></li> + <li><a href="#images">硬體系統映像</a></li> + </ol> + <h2>Legacy downloads</h2> + <ol> + <li><a href="{@docRoot}preview/download_mp1.html">Developer Preview Archive</a></li> + </ol> + </div> +</div> + + +<p> + Android M 預覽版 SDK 有開發工具、Android 系統檔案以及程式庫檔案,可以幫助測試您的應用程式和下一個平台版本隨附的新 API。 +本文件會說明如何取得可下載的預覽版元件來測試您的應用程式。 + +</p> + + +<h2 id="sdk">預覽版 SDK</h2> + +<p> + 預覽版 SDK 可透過 <a href="{@docRoot}tools/help/sdk-manager.html">Android SDK 管理器</a>下載取得。如需有關下載和設定預覽版 SDK 的詳細資訊,請參閱<a href="{@docRoot}preview/setup-sdk.html#downloadSdk">設定預覽版 SDK</a>。 + +</p> + + +<h2 id="docs">開發人員文件</h2> + +<p> + 開發人員文件下載套件提供詳細的 API 參考資料和預覽版的 API 差異報告。 +</p> + +<table> + <tr> + <th scope="col">Description</th> + <th scope="col">Download / Checksums</th> + </tr> + <tr id="docs-dl"> + <td>Android M Preview 2<br>Developer Docs</td> + <td><a href="#top" onclick="onDownload(this)" + >m-preview-2-developer-docs.zip</a><br> + MD5: 1db6fff9c722b0339757e1cdf43663a8<br> + SHA-1: 5a4ae88d644e63824d21b0e18f8e3977a7665157 + </td> + </tr> +</table> + + +<h2 id="images">硬體系統映像</h2> + +<p> + 這些系統映像可以讓您在實體裝置上安裝預覽版的平台來進行測試。 +使用其中一個映像設定裝置,您就可以安裝並測試您的應用程式,瞭解應用程式在下一個版本的平台上表現如何。 +在裝置上安裝系統映像的過程中,會「移除裝置當中所有的資料」,因此您應該在安裝系統映像之前備份您的資料。<em></em> + + +</p> + +<p class="warning"> + <b>警告:</b>下列 Android 系統映像是預覽版,可能隨時會有變更。使用這些系統映像受到「Android SDK 預覽版授權協議」的約束。 +Android 預覽版系統映像還不是穩定的版本,可能會包含許多錯誤和瑕疵而對您的電腦系統、裝置和資料造成損害。 + +預覽版的 Android 系統映像與出廠作業系統的測試不同,可能會導致您的手機和安裝的服務與應用程式停止運作。 + + +</p> + +<table> + <tr> + <th scope="col">Device</th> + <th scope="col">Download / Checksums</th> + </tr> + <tr id="hammerhead"> + <td>Nexus 5 (GSM/LTE) <br>"hammerhead"</td> + <td><a href="#top" onclick="onDownload(this)" + >hammerhead-MPZ79M-preview-b1f4bde4.tgz</a><br> + MD5: 2ca9f18bf47a061b339bab52647ceb0d<br> + SHA-1: b1f4bde447eccbf8ce5d9b8b8ba954e3eac8e939 + </td> + </tr> + <tr id="shamu"> + <td>Nexus 6 <br>"shamu"</td> + <td><a href="#top" onclick="onDownload(this)" + >shamu-MPZ79M-preview-e1024040.tgz</a><br> + MD5: 24a2118da340b9afedfbdfc026f6ff81<br> + SHA-1: e10240408859d5188c4aae140e1c539130ba614b + </td> + </tr> + <tr id="volantis"> + <td>Nexus 9 <br>"volantis"</td> + <td><a href="#top" onclick="onDownload(this)" + >volantis-MPZ79M-preview-9f305342.tgz</a><br> + MD5: 9edabf0a4c61b247f1cbb9dfdc0a899e<br> + SHA-1: 9f30534216f10899a6a75495fc7e92408ea333a7 + </td> + </tr> + + <tr id="fugu"> + <td>Nexus Player <br>"fugu"</td> + <td><a href="#top" onclick="onDownload(this)" + >fugu-MPZ79N-preview-fb63af98.tgz</a><br> + MD5: e8d081137a20b66df595ee69523314b5<br> + SHA-1: fb63af98302dd97be8de9313734d389ccdcce250 + </td> + </tr> + +</table> + +<h3 id="install-image">在裝置上安裝映像</h3> + +<p> + 如果要使用裝置映像進行測試,您必須先在相容的裝置上安裝映像。請依照下面的指示安裝系統映像: + +</p> + +<ol> + <li>下載此處列出的其中一個系統映像,然後解壓縮。</li> + <li>備份您要保留的所有裝置資料。</li> + <li>依照 +<a href="https://developers.google.com/android/nexus/images#instructions">developers.google.com/android</a> +的指示,將映像更新到您的裝置。</li> +</ol> + +<p class="note"> + <strong>注意:</strong>在您使用預覽版系統映像更新開發裝置之後,裝置就會透過無線 (OTA) 更新方式自動升級為下一個預覽版版本。 + +</p> + +<h3 id="revertDevice">將裝置還原成出廠規格</h3> + +<p> + 如果您要解除安裝預覽版並將裝置還原成出廠規格,請至 +<a href="http://developers.google.com/android/nexus/images">developers.google.com/android</a> 並下載您要為裝置更新的映像。 +依照該頁面的指示,將映像更新到您的裝置。 + +</p> + + </div><!-- landing --> + +</div><!-- relative wrapper --> + + + +<script> + var urlRoot = "http://storage.googleapis.com/androiddevelopers/shareables/preview/"; + function onDownload(link) { + + $("#downloadForRealz").html("Download " + $(link).text()); + $("#downloadForRealz").attr('href', urlRoot + $(link).text()); + + $("#tos").fadeIn('fast'); + $("#landing").fadeOut('fast'); + + return true; + } + + + function onAgreeChecked() { + /* verify that the TOS is agreed */ + if ($("input#agree").is(":checked")) { + /* reveal the download button */ + $("a#downloadForRealz").removeClass('disabled'); + } else { + $("a#downloadForRealz").addClass('disabled'); + } + } + + function onDownloadForRealz(link) { + if ($("input#agree").is(':checked')) { + /* + $("#tos").fadeOut('fast'); + $("#landing").fadeIn('fast'); + */ + + ga('send', 'event', 'M Preview', 'System Image', $("#downloadForRealz").html()); + + /* + location.hash = ""; + */ + return true; + } else { + return false; + } + } + + $(window).hashchange( function(){ + if (location.hash == "") { + location.reload(); + } + }); + +</script> diff --git a/docs/html-intl/intl/zh-tw/preview/features/app-linking.jd b/docs/html-intl/intl/zh-tw/preview/features/app-linking.jd new file mode 100644 index 0000000..5be8a0f --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/features/app-linking.jd @@ -0,0 +1,123 @@ +page.title=應用程式連結 +page.image=images/cards/card-app-linking_2x.png +page.keywords=應用程式連結, 深層連結, 意圖 +@jd:body + +<div id="qv-wrapper"> + <div id="qv"> + <h2>本文件內容</h2> + <ol> + <li><a href="#web-assoc">宣告網站關聯</a></li> + <li><a href="#verfy-links">要求應用程式連結驗證</a></li> + <li><a href="#user-manage">管理應用程式連結設定</a></li> + </ol> + </div> +</div> + +<p> + Android 意圖系統是一個彈性機制,讓應用程式能夠用來處理內容和要求。 + 有許多應用程式可能會在它們的意圖篩選條件中宣告相符的 URI 模式。當使用者按一下不含預設啟動處理常式的 Web 連結時,平台可能會顯示一個對話方塊,讓使用者能夠從具備已宣告相符意圖篩選條件的應用程式清單中選取。 + + +</p> + +<p> + Android M 開發人員預覽版引進了應用程式連結的支援,這樣就能藉由允許應用程式開發人員將應用程式關聯至他們所擁有的 Web 網域,來改善現有的連結處理。 +當開發人員建立這個關聯時,平台可以自動判斷要用來處理特定 Web 連結的預設應用程式,並略過詢問使用者的程序。 + + +</p> + + +<h2 id="web-assoc">宣告網站關聯</h2> + +<p> + 網站擁有者必須宣告與應用程式的關聯,才能建立應用程式連結。站台擁有者可藉由在網域上的已知位置裝載名為 {@code statements.json} 的 JSON 檔案,來宣告與應用程式的關係: + + +</p> + +<pre>http://<domain>:<optional port>/.well-known/statements.json</pre> + +<p class="note"> + <strong>注意:</strong> + 在 M 開發人員預覽版期間,會透過 http 通訊協定來驗證 JSON 檔案。如果是平台的正式版本,就會透過加密的 https 通訊協定來驗證該檔案。 + +</p> + +<p> + 這個 JSON 檔案會指出應該在這個網域中用來做為 URL 預設處理常式的 Android 應用程式。 +它會根據下列欄位來識別應用程式: +</p> + +<ul> + <li>{@code package_name}:宣告於應用程式宣示說明中的套件名稱。</li> + + <li>{@code sha256_cert_fingerprints}:您應用程式簽署憑證的 SHA256 指紋。 + 您可以使用 Java 金鑰工具,利用下列命令來產生指紋: + <pre>keytool -list -v -keystore my-release-key.keystore</pre> + </li> +</ul> + +<p> + 下列檔案清單會顯示 +{@code statements.json} 檔案的內容與格式範例: +</p> + +<pre> +[{ + "relation": ["delegate_permission/common.handle_all_urls"], + "target": { + "namespace": "android_app", + "package_name": "<strong><package name></strong>", + "sha256_cert_fingerprints": ["<strong>6C:EC:C5:0E:34:AE....EB:0C:9B</strong>"] + } +}] +</pre> + + +<h2 id="verfy-links">要求應用程式連結驗證</h2> + +<p> + 應用程式可以要求平台根據裝載於個別 Web 網域上的 {@code statements.json} 檔案,自動驗證在其意圖篩選條件的資料元素中由主機名稱所定義的任何應用程式連結。 + +如要要求應用程式連結驗證,請將 {@code android:autoVerify} + 屬性新增到宣示說明中每個所需的意圖篩選條件中,如下列宣示說明程式碼片段所示: + +</p> + +<pre> +<activity ...> + <intent-filter <strong>android:autoVerify="true"</strong>> + <action android:name="android.intent.action.VIEW" /> + <category android:name="android.intent.category.DEFAULT" /> + <category android:name="android.intent.category.BROWSABLE" /> + <data android:scheme="http" android:host="www.android.com" /> + <data android:scheme="https" android:host="www.android.com" /> + </intent-filter> +</activity> +</pre> + +<p> + 當 {@code android:autoVerify} 屬性出現在應用程式宣示說明時,平台即會在安裝該應用程式時嘗試驗證應用程式連結。 +如果平台無法成功驗證應用程式連結,就無法將該應用程式設定為偏好使用的應用程式來處理 Web 連結。 +當使用者下次開啟其中一個連結時,平台就切換回為該使用者展示一個對話方塊。 + + +</p> + +<p class="note"> + <strong>注意:</strong>在測試期間,如果驗證失敗,可能會產生誤判,但是使用者已經使用系統「設定」應用程式,明確地啟用應用程式來自動開啟支援的連結。在此案例中,不會顯示任何對話方塊,而且連結會直接連至您的應用程式,但這只是基於使用者的設定,而不是因為驗證成功所致。 + + + +</p> + + +<h2 id="user-manage">管理應用程式連結設定</h2> + +<p> + 使用者可以變更應用程式連結設定,讓他們能夠以偏好使用的方式來處理 URL。您可以在系統「設定」應用程式中,於 [設定] > [應用程式] > [應用程式資訊] > [預設開啟]<strong></strong> 下方,檢閱和管理應用程式連結。 + + +</p> diff --git a/docs/html-intl/intl/zh-tw/preview/features/runtime-permissions.jd b/docs/html-intl/intl/zh-tw/preview/features/runtime-permissions.jd new file mode 100644 index 0000000..cf756aa --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/features/runtime-permissions.jd @@ -0,0 +1,794 @@ +page.title=權限 +page.tags=previewresources, androidm +page.keywords=權限, 執行階段, 預覽 +page.image={@docRoot}preview/features/images/permissions_check.png +@jd:body + + +<div id="qv-wrapper"> + <div id="qv"> + <h2>快速檢視</h2> + <ul> + <li>如果您的應用程式是以 M 預覽版 SDK 為目標,它會提示使用者在執行階段授與權限,而不是安裝期間。 +</li> + <li>使用者能隨時從應用程式 [設定] 畫面撤銷權限。 +</li> + <li>您的應用程式每次執行時都需要檢查它是否有所需的權限。 +</li> + </ul> + + <h2>本文件內容</h2> + <ol> + <li><a href="#overview">總覽</a></li> + <li><a href="#coding">編寫執行階段權限的程式碼</a></li> + <li><a href="#testing">測試執行階段權限</a></li> + <li><a href="#best-practices">建議做法</a></li> + </ol> + +<!-- + <h2>Related Samples</h2> + <ol> + <li></li> + </ol> +--> + +<!-- + <h2>See also</h2> + <ol> + <li></li> + </ol> +--> + </div> <!-- qv --> +</div> <!-- qv-wrapper --> + + +<p> + M 開發人員預覽版導入新的應用程式權限模型,簡化使用者安裝和升級應用程式的程序。 +如果 M 預覽版上執行的應用程式支援新的權限模型,使用者安裝或升級應用程式時,不需要授與任何權限。應用程式會在需要時才要求權限,而且系統會對使用者顯示要求權限的對話方塊。 + + + + +</p> + +<p> + 如果應用程式支援新的權限模型,它仍能在在執行舊版 Android 的裝置上安裝並執行 (在那些裝置上使用舊的權限模型)。 + + +</p> + +<h2 id="overview"> + 總覽 +</h2> + +<p> + 使用 M 開發人員預覽版,平台導入新的應用程式權限模型。 +以下是這個新模型的主要元件摘要: +</p> + +<ul> + <li> + <strong>宣告權限:</strong>應用程式會在宣示說明中宣告所需的所有權限,如舊版 Android 平台。 + + </li> + + <li> + <strong>權限群組:</strong>權限會根據其功能分為「權限群組」 +<em></em>。例如, +<code>CONTACTS</code> 權限群組包含讀取和寫入使用者聯絡人與設定檔資訊的權限。 + + </li> + + <li> + <p><strong>安裝期間授與的有限權限:</strong>當使用者安裝或更新應用程式時,系統會將應用程式所要求且歸入 {@link +android.content.pm.PermissionInfo#PROTECTION_NORMAL PROTECTION_NORMAL} 的所有權限授與應用程式。 + + + 例如,會在安裝期間自動授與歸入 {@link +android.content.pm.PermissionInfo#PROTECTION_NORMAL PROTECTION_NORMAL} 的鬧鐘與網際網路權限。 + + </p> + + <p>系統也會授與應用程式簽名和系統權限,如<a href="#system-apps">系統應用程式和簽名</a>所述。 + +安裝期間「不」<em></em>會提示使用者授與任何權限。 +</p> + </li> + + <li> + <strong>使用者在執行階段授與權限:</strong>應用程式要求權限時,系統會對使用者顯示對話方塊,接著呼叫應用程式的回呼函數,通知它是否已授與權限。 + +如果使用者授與權限,應用程式會獲得在應用程式宣示說明中所宣告之權限功能區域中的所有權限。 + + + </li> + +</ul> + +<p> + 此權限模型改變應用程式要求權限的功能行為。 +以下是您應遵循以調整此模型的開發做法摘要: + +</p> + +<ul> + + <li> + <strong>一律檢查是否具備權限:</strong>當應用程式需要執行任何需要權限的動作時,都應要先檢查是否具備有該權限。 + +若不具備,即要求獲得授與該權限。 + + </li> + + <li> + <strong>適當處理缺少權限的情況:</strong>如果應用程式未獲授與適當的權限,它應要能完全處理失敗。 + + 例如,若只有新增功能需要該權限,應用程式可以將該功能停用。 +如果應用程式務必要具備該權限才能運作,應用程式可以停用其所有功能,並通知使用者務必要授與該權限。 + + + </li> + + <div class="figure" style="width:220px" id="fig-perms-screen"> + <img src="{@docRoot}preview/features/images/app-permissions-screen_2x.png" srcset="{@docRoot}preview/features/images/app-permissions-screen.png 1x, {@docRoot}preview/features/images/app-permissions-screen_2x.png 2x" alt="" width="220"> + <p class="img-caption"> + <strong>圖 1.</strong>應用程式 [設定] 的權限畫面。 + </p> + </div> + + <li> + <strong>權限可以撤銷:</strong>使用者可以隨時撤銷應用程式的權限。 +如果使用者關閉應用程式的權限,並「不」<em></em>會通知應用程式。 +再次強調,您的應用程式在執行任何受限制的動作之前,應該驗證它是否具備所需的權限。 + + </li> +</ul> + +<p class="note"> + <strong>注意:</strong>如果應用程式是以 M 開發人員預覽版為目標,「務必要」 +<em></em>使用新的權限模型。 +</p> + +<p> + 自 M 開發人員預覽版推出起,並非所有 Google 應用程式都完全實作新的權限模型。 +Google 正透過 M 開發人員預覽版逐漸更新這些應用程式,以適當保留權限切換設定。 + + +</p> + +<p class="note"> + <strong>注意:</strong>如果您的應用程式有自己的 API 介面,務必要先確定呼叫端具備存取該資料的必要權限後,再 Proxy 權限。 + + +</p> + +<h3 id="system-apps"> + 系統應用程式和簽名權限 +</h3> + +<p> + 一般來說,當使用者安裝應用程式時,系統只會將 + {@link android.content.pm.PermissionInfo#PROTECTION_NORMAL + PROTECTION_NORMAL} 授與應用程式。不過,在某些情況下,系統會授與應用程式更多權限: + +</p> + +<ul> + <li>如果應用程式屬於系統映像的一部分,會自動獲授與其宣示說明中列出的所有權限。 + + </li> + + <li>如果應用程式要求宣示說明中歸入 {@link +android.content.pm.PermissionInfo#PROTECTION_SIGNATURE PROTECTION_SIGNATURE} 的權限,並和宣告那些權限的應用程式一樣,以相同的憑證簽署應用程式,系統會在安裝時將那些權限授與要求的應用程式。 + + + + </li> +</ul> + +<p> + 在這兩種情況下,使用者仍能隨時撤銷權限,只要前往系統的 [設定]<strong></strong> 畫面,然後選擇 [應用程式] ><strong></strong> + + <i>app_name</i> > [權限]<strong></strong>。應用程式應持續在執行階段檢查是否具備權限,並在必要時予以要求。 + + +</p> + +<h3 id="compatibility"> + 往後和回溯相容性 +</h3> + +<p> + 如果應用程式不是以 M 開發人員預覽版為目標,即使在 M 預覽版裝置上,應用程式也會持續使用舊的權限模型。 +當使用者安裝應用程式時,系統會要求使用者授與應用程式的宣示說明中列出的所有權現。 + + +</p> + +<p class="note"> + <strong>注意:</strong>在執行 M 開發人員預覽版的裝置上,使用者能從應用程式的設定畫面關閉任何應用程式 (包括舊版應用程式) 的權限。 + +如果使用者關閉舊版應用程式的權限,系統會自動停用適當功能。 +當應用程式嘗試執行需要那項權限的操作時,該操作不一定會造成例外狀況。 + +而可能傳回空的資料集,通知發生錯誤,或展示未預期的行為。 +例如,如果您不具備查詢行事曆的權限,方法會傳回空的資料集。 + +</p> + +<p> + 如果您在並非執行 M 預覽版的裝置上使用新的權限模型來安裝應用程式,系統會將它和任何其他應用程式一視同仁:系統會在安裝期間要求使用者授與所有宣告的權限。 + + + +</p> + +<p class="note"> + <strong>注意:</strong>對於預覽版,您必須將 SDK 最低版本設定為 M 預覽版 SDK,才能以預覽版 SDK 編譯。 +這表示在開發人員預覽版期間,您將無法在舊版平台上測試這類應用程式。 + + +</p> + +<h3 id="perms-vs-intents">權限與意圖比較</h3> + +<p> + 在許多情況下,您可以為應用程式在兩種方法當中擇一來執行工作。 +您可以讓應用程式要求權限以自行執行操作。 +或者,您可以讓應用程式使用意圖,讓其他應用程式來執行工作。 + +</p> + +<p> + 例如,假設您的應用程式需要能夠使用裝置相機拍攝相片。 +您的應用程式能要求 +<code>android.permission.CAMERA</code> 權限,讓應用程式直接存取相機。 +接著,應用程式會使用相機 API 來控制相機並拍攝相片。 +這種方法可讓您的應用程式對攝影處理程序有完整控制權,並讓您將相機 UI 納入應用程式。 + + +</p> + +<p> + 不過,如果您不需要這類控制權,您可以只使用 {@link +android.provider.MediaStore#ACTION_IMAGE_CAPTURE ACTION_IMAGE_CAPTURE} 意圖來要求影像。 +當您啟動意圖時,會提示使用者選擇相機應用程式 (如果還沒有預設的相機應用程式),然後該應用程式會拍攝相片。 + +相機應用程式會將相片傳回應用程式的 {@link + android.app.Activity#onActivityResult onActivityResult()} 方法。 +</p> + +<p> + 同樣地,如果您需要撥打電話、存取使用者的聯絡人等等,您都可以建立適當的意圖來執行,或是要求權限,然後直接存取適當的物件。 + +每種方法各有利弊。 + +</p> + +<p> + 如果您使用權限: +</p> + +<ul> + <li>當您執行操作時,應用程式對使用者體驗有完整控制權。 +不過,如此多樣化控制使您必須設計適當的 UI,而增加工作複雜度。 + + </li> + + <li>當您初次執行操作時,會提示使用者授與權限 (僅此一次)。 +之後應用程式可以逕行執行該操作,不需要再與使用者有其他互動。 +不過,如果使用者未授與權限 (或稍後予以撤銷),您的應用程式會完全無法執行該操作。 + + + </li> +</ul> + +<p> + 如果您使用意圖: +</p> + +<ul> + <li>您不必為該操作設計 UI。處理意圖的應用程式會提供 UI。不過,這表示您對使用者體驗沒有控制權。 + +使用者可能會和您不曾見過的應用程式互動。 + + </li> + + <li>如果使用者沒有執行該操作的預設應用程式,系統會提示使用者選擇應用程式。如果使用者未指定預設處理常式,每次執行操作時可能都要完成額外的對話方塊。 + + + + </li> +</ul> + +<h2 id="coding">編寫執行階段權限的程式碼</h2> + +<p> + 如果您的應用程式是以新的 M 開發人員預覽版為目標,請務必使用新的權限模型。 +這表示除了在宣示說明中宣告所需的權限之外,您也必須在執行階段檢查是否具備權限,並在您不具備時要求權限。 + + + +</p> + +<h3 id="enabling"> + 啟用新的權限模型 +</h3> + +<p> + 如要啟用新的 M 開發人員預覽版權限模型,可將應用程式的 +<code>targetSdkVersion</code> 屬性設定為 <code>"MNC"</code>,並將 +<code>compileSdkVersion</code> 設定為 <code>"android-MNC"</code>。這樣做可啟用所有新權限功能。 + +</p> + +<p> + 對於預覽版,您必須將 <code>minSdkVersion</code> 設定為 +<code>"MNC"</code>,才能以預覽版 SDK 編譯。 +</p> + +<h3 id="m-only-perm"> + 指定只限 M 預覽版使用的權限 +</h3> + +<p> + 您可以在宣示說明中使用新的 <code><uses-permission-sdk-m></code> 元素,指出只有在 M 預覽版上才需要某權限。 +如果您以這種方式宣告權限,每當在舊版裝置上安裝應用程式時,系統都不會提示使用者或將權限授與應用程式。藉由使用 <code><uses-permission-sdk-m></code> 元素,當使用者安裝更新時,您不需要強制他們授與權限,就可以將新的權限新增至更新的應用程式版本。 + + + + + + +</p> + +<p> + 如果應用程式在使用 M 開發人員預覽版的裝置上執行, +<code><uses-permission-sdk-m></code> 的運作方式會和 +<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> 相同。 + 當他們安裝應用程式時,系統不會提示使用者授與任何權限,而應用程式會在需要時才要求權限。 + +</p> + +<h3 id="prompting"> + 提示授與權限 +</h3> + +<p> + 如果您的應用程式使用新的 M 開發人員預覽版權限模型,在執行 M 預覽版的裝置上初次啟動應用程式時,不會要求使用者授與所有權限。 + +您的應用程式會在需要時才要求權限。 +應用程式要求權限時,系統會對使用者顯示對話方塊。 + +</p> + +<p> + 如果您的應用程式在 SDK 22 以下版本的裝置上執行,應用程式會使用舊的權限模型。 +當使用者安裝應用程式時,會提示他們授與應用程式在其宣示說明中要求的所有權限,但標示為 <code><uses-permission-sdk-m></code> 的那些權限除外。 + + +</p> + +<h4 id="check-platform">檢查應用程式執行所在的平台</h4> + +<p> + 只有執行 M 開發人員預覽版的裝置上才支援此權限模型。 +呼叫這些方法之前,應用程式應該檢查 {@link android.os.Build.VERSION#CODENAME + Build.VERSION.CODENAME} 的值,驗證它執行所在的平台。 + +如果裝置是執行 M 開發人員預覽版, +{@link android.os.Build.VERSION#CODENAME CODENAME} 是 <code>"MNC"</code>。 +</p> + +<h4 id="check-for-permission">檢查應用程式是否具備所需權限</h4> + +<p>當使用者嘗試執行需要權限的操作時,應用程式會檢查它目前是否具備可執行此操作的權限。 +如要這麼做,應用程式可呼叫 + +<code>Context.checkSelfPermission(<i>permission_name</i>)</code>。由於使用者可以隨時撤銷應用程式的權限,即使應用程式知道使用者已授與該權限,還是應該執行此檢查。 + + +例如,如果使用者想要使用應用程式拍攝相片,應用程式會呼叫 <code>Context.checkSelfPermission(Manifest.permission.CAMERA)</code>。 + +</p> + +<p class="table-caption" id="permission-groups"> + <strong>表 1.</strong>權限和權限群組。</p> +<table> + <tr> + <th scope="col">權限群組</th> + <th scope="col">權限</th> + </tr> + + <tr> + <td><code>android.permission-group.CALENDAR</code></td> + <td> + <ul> + <li> + <code>android.permission.READ_CALENDAR</code> + </li> + </ul> + <ul> + <li> + <code>android.permission.WRITE_CALENDAR</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.CAMERA</code></td> + <td> + <ul> + <li> + <code>android.permission.CAMERA</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.CONTACTS</code></td> + <td> + <ul> + <li> + <code>android.permission.READ_CONTACTS</code> + </li> + <li> + <code>android.permission.WRITE_CONTACTS</code> + </li> + <li> + <code>android.permission.READ_PROFILE</code> + </li> + <li> + <code>android.permission.WRITE_PROFILE</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.LOCATION</code></td> + <td> + <ul> + <li> + <code>android.permission.ACCESS_FINE_LOCATION</code> + </li> + <li> + <code>android.permission.ACCESS_COARSE_LOCATION</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.MICROPHONE</code></td> + <td> + <ul> + <li> + <code>android.permission.RECORD_AUDIO</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.PHONE</code></td> + <td> + <ul> + <li> + <code>android.permission.READ_PHONE_STATE</code> + </li> + <li> + <code>android.permission.CALL_PHONE</code> + </li> + <li> + <code>android.permission.READ_CALL_LOG</code> + </li> + <li> + <code>android.permission.WRITE_CALL_LOG</code> + </li> + <li> + <code>com.android.voicemail.permission.ADD_VOICEMAIL</code> + </li> + <li> + <code>android.permission.USE_SIP</code> + </li> + <li> + <code>android.permission.PROCESS_OUTGOING_CALLS</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.SENSORS</code></td> + <td> + <ul> + <li> + <code>android.permission.BODY_SENSORS</code> + </li> + </ul> + <ul> + <li> + <code>android.permission.USE_FINGERPRINT</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.SMS</code></td> + <td> + <ul> + <li> + <code>android.permission.SEND_SMS</code> + </li> + <li> + <code>android.permission.RECEIVE_SMS</code> + </li> + <li> + <code>android.permission.READ_SMS</code> + </li> + <li> + <code>android.permission.RECEIVE_WAP_PUSH</code> + </li> + <li> + <code>android.permission.RECEIVE_MMS</code> + </li> + <li> + <code>android.permission.READ_CELL_BROADCASTS</code> + </li> + </ul> + </td> + </tr> + +</table> + +<h4 id="request-permissions">必要時要求權限</h4> + +<p>如果應用程式還沒有所需的權限,應用程式會呼叫 +<code>Activity.requestPermissions(String[], int)</code> 方法以要求適當的權限。 +應用程式會傳遞它所需的權限,還有整數「要求代碼」。 + + 這種方法以非同步方式運作:它會立即傳回,並在使用者回應對話方塊後,系統會以該結果呼叫應用程式的回呼方法,傳遞應用程式傳遞給 <code>requestPermissions()</code> 的相同「要求代碼」。 + + +</p> + + <p>下列程式碼會檢查應用程式是否具備讀取使用者聯絡人的權限,並在必要時要求權限。 +</p> + +<pre> +if (checkSelfPermission(Manifest.permission.READ_CONTACTS) + != PackageManager.PERMISSION_GRANTED) { + requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, + MY_PERMISSIONS_REQUEST_READ_CONTACTS); + + // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an + // app-defined int constant + + return; +} +</pre> + +<h4 id="handle-response">處理權限要求回應</h4> + +<p> + 當應用程式要求權限時,系統會對使用者呈現對話方塊。 +當使用者回應時,系統會呼叫 <code>Activity.onRequestPermissionsResult(int, String[], int[])</code> 並將使用者回應傳遞給它。 + +您的應用程式需要覆寫該方法。將您傳遞給 <code>requestPermissions()</code> 的相同要求代碼傳遞給回呼。 + +例如,如果應用程式要求 <code>READ_CONTACTS</code> 存取權,可能會有下列回呼方法: + + +</p> + +<pre> +@Override +public void onRequestPermissionsResult(int requestCode, + String permissions[], int[] grantResults) { + switch (requestCode) { + case MY_PERMISSIONS_REQUEST_READ_CONTACTS: { + if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { + + // permission was granted, yay! do the + // calendar task you need to do. + + } else { + + // permission denied, boo! Disable the + // functionality that depends on this permission. + } + return; + } + + // other 'switch' lines to check for other + // permissions this app might request + } +} +</pre> + + <p>如果使用者授與權限,系統就會將應用程式宣示說明所列出該功能區域的所有權限給予應用程式。 +如果使用者拒絕要求,您應該執行適當動作。 +例如,您可能會停用依存於此權限的任何選單動作。 + + </li> +</p> + +<p> + 系統要求使用者授與權限時,使用者可選擇告知系統不要再次要求該權限。 +在上述情況下,當應用程式使用 <code>requestPermissions()</code> 要求該權限時,系統會立即拒絕要求。 + +在這種情況下,如果使用者再次明確拒絕您的要求,系統會以相同的方式呼叫您的 <code>onRequestPermissionsResult()</code>。 + +基於這個理由,您的應用程式不能假設已與使用者發生任何直接互動。 + +</p> + +<h2 id="testing">測試執行階段權限</h2> + + +<p> + 如果您的應用程式是以新的 M 開發人員預覽版為目標,您必須測試它是否能適當處理權限。 +您不能假設應用程式在執行時具備任何特定權限。 +應用程式初次啟動時,很可能不具備任何權限,且使用者可隨時撤銷或還原權限。 + + +</p> + +<p> + 您應該測試應用程式,確保它在所有權限情況下都能正常運作。 +使用 M 預覽版 SDK,我們現在提供 <a href="{@docRoot}tools/help/adb.html">Android 偵錯橋 (adb)</a> 命令,不管需要嘗試哪種權限設定都能讓您測試。 + + + +</p> + +<h3> + 新的 adb 命令和選項 +</h3> + +<p> + M 預覽版 SDK 平台工具提供的數個命令可讓您測試應用程式如何處理權限。 + +</p> + +<h4> + 連同權限一併安裝 +</h4> + +<p> + 您可以使用 <a href="{@docRoot}tools/help/adb.html#move"><code>adb + install</code></a> 命令的新 <code>-g</code> 選項,安裝應用程式並授與其宣示說明中列出的所有權限: + +</p> + +<pre class="no-pretty-print"> +$ adb install -g <path_to_apk> +</pre> + +<h4> + 授與和撤銷權限 +</h4> + +<p> + 您可以使用新的 ADB <a href="{@docRoot}tools/help/adb.html#pm">套件管理員 (pm)</a> 命令,對安裝的應用程式授與和撤銷權限。此功能在自動化測試時非常實用。 + + +</p> + +<p> + 如要授與權限,可使用套件管理員的 <code>grant</code> 命令: +</p> + +<pre class="no-pretty-print"> +$ adb pm grant <package_name> <permission_name> +</pre> + +<p> + 例如,如要將可錄製音訊的權限授與 com.example.myapp 套件,請使用此命令: + +</p> + +<pre class="no-pretty-print"> +$ adb pm grant com.example.myapp android.permission.RECORD_AUDIO +</pre> + +<p> + 如要撤銷權限,可使用套件管理員的 <code>revoke</code> 命令: +</p> + +<pre class="no-pretty-print"> +$ adb pm revoke <package_name> <permission_name> +</pre> + +<h2 id="best-practices">最佳做法</h2> + +<p> + 新的權限模型讓使用者有更順暢的體驗,並能輕鬆安裝應用程式且對應用程式執行的工作感到自在。 + +建議使用下列最佳做法以充分利用新的模型。 + +</p> + + +<h3 id="bp-what-you-need">只要求您所需的權限</h3> + +<p> + 每次要求權限時,您都是在強迫使用者做出決定。 + 如果使用者拒絕要求,就會減少您應用程式的功能。 + 您應該儘可能減少提出這些要求的次數。 +</p> + +<p> + 例如,您的應用程式可經常使用<a href="{@docRoot}guide/components/intents-filters.html">意圖</a>來取得所需功能,而不是要求權限。 + +如果您的應用程式需要使用手機的相機拍攝相片,應用程式可以使用 {@link + android.provider.MediaStore#ACTION_IMAGE_CAPTURE + MediaStore.ACTION_IMAGE_CAPTURE} 意圖。 +當您的應用程式執行意圖時,系統會提示使用者選擇已安裝的相機應用程式來拍攝相片。 + + +</p> + +<h3 id="bp-dont-overwhelm"> + 別讓使用者無法承受 +</h3> + +<p> + 如果您讓使用者一次面對太多權限要求,可能會讓使用者無法承受而結束您的應用程式。您應該改為在需要時才要求權限。 + + +</p> + +<p> + 在某些情況下,您的應用程式可能必須具備一或多個權限。在那種情況下,在應用程式啟動時立即要求所有權限是合理的舉措。 + +例如,如果您建立攝影應用程式,該應用程式會需要存取裝置相機。 +使用者初次啟動應用程式時,看到要求使用相機的權限不會被嚇到。 + +但如果相同的應用程式具有與使用者聯絡人分享相片的功能,您可能「不」<em></em>應該在初次啟動時要求該權限。 + +可以等到使用者嘗試使用「分享」功能時,再要求該權限。 + +</p> + +<p> + 如果您的應用程式提供教學課程,在教學課程結束時要求應用程式的基本權限是合理的舉措。 + +</p> + +<h3 id="bp-explain"> + 說明需要權限的原因 +</h3> + +<p> + 當您呼叫 +<code>requestPermissions()</code> 時,系統顯示的權限對話方塊會說明您的應用程式想要的權限,但不會說明原因。 +在某些情況下,使用者可能會感到不解。 + 在呼叫 <code>requestPermissions()</code> 前對使用者說明應用程式想要權限的原因是不錯的想法。 + +</p> + +<p> + 例如,攝影應用程式可能想要使用定位服務,以便將相片加上地理標籤。 +一般使用者可能不明白相片可以包含定位資訊,而不明白為何攝影應用程式會想要知道位置。 + +在這種情況下,在呼叫 <code>requestPermissions()</code>「之前」<em></em>,將此功能的相關資訊告訴使用者會是不錯的想法。 + + +</p> + +<p> + 您可以將這些要求與應用程式教學課程結合來完成此作業。教學課程可依序顯示應用程式的各項功能,並可以同時說明需要哪些權限。 + +例如,攝影應用程式的教學課程可以示範「與聯絡人分享相片」功能,接著告訴使用者需要提供權限,應用程式才能看到使用者的聯絡人。 + + +接著,應用程式可以呼叫 <code>requestPermissions()</code>,要求使用者提供該存取權。 +當然,並非每位使用者都會依照教學課程執行動作,所以您仍需要在應用程式的正常操作期間檢查和要求權限。 + + +</p> diff --git a/docs/html-intl/intl/zh-tw/preview/index.jd b/docs/html-intl/intl/zh-tw/preview/index.jd new file mode 100644 index 0000000..a9cf1ae --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/index.jd @@ -0,0 +1,70 @@ +page.title=Android M 開發人員預覽版 +page.tags="preview", +meta.tags="preview, M preview", androidm +fullpage=true +section.landing=true +header.hide=1 +footer.hide=1 +@jd:body + +<section class="dac-expand dac-hero dac-light" > + <div class="wrap"> + <div class="cols dac-hero-content"> + <div class="col-9of16 col-push-7of16 dac-hero-figure"> + <img class="dac-hero-image" src="{@docRoot}images/home/devices-hero_620px_2x.png" srcset="{@docRoot}images/home/devices-hero_620px.png 1x, + {@docRoot}images/home/devices-hero_620px_2x.png 2x"> + </div> + <div class="col-7of16 col-pull-9of16"> + <h1 class="dac-hero-title">Android M 開發人員預覽版</h1> + <p class="dac-hero-description"> + 準備使用新版 Android。在 Nexus 5、6、9 和 Player 上測試您的應用程式。 +瞭解新功能 — <strong>執行階段權限</strong>、<strong>休眠</strong>、<strong>應用程式待命</strong>等省電功能、新的<strong>輔助技術</strong>,以及其他功能。 + + + </p> + + <a class="dac-hero-cta" href="{@docRoot}preview/overview.html"> + <span class="dac-sprite dac-auto-chevron"></span> + 開始使用! +</a><br> + <a class="dac-hero-cta" href="{@docRoot}preview/support.html"> + <span class="dac-sprite dac-auto-chevron"></span> + Developer Preview 2</a> + </div> + </div> + <div class="dac-section dac-small"> + <div class="resource-widget resource-flow-layout col-16" + data-query="collection:preview/landing/resources" + data-cardSizes="6x2" + data-maxResults="6"></div> + </div> + </div> +</section> + +<section class="dac-section dac-gray"><div class="wrap"> + <h1 class="dac-section-title">資源</h1> + <div class="dac-section-subtitle"> + 以下重要資訊可幫助您的應用程式準備好使用 Android M。 + </div> + + <div class="resource-widget resource-flow-layout col-16" + data-query="collection:preview/landing/more" + data-cardSizes="6x6" + data-maxResults="16"></div> + + <ul class="dac-section-links"> + <li class="dac-section-link"> + <a href="https://code.google.com/p/android-developer-preview/"> + <span class="dac-sprite dac-auto-chevron"></span> + 回報問題 +</a> + </li> + <li class="dac-section-link"><a href="http://g.co/dev/AndroidMDevPreview"> + <span class="dac-sprite dac-auto-chevron"></span> + 參加 G+ 社群 +</a> + </li> + </ul> + </div> +</section> + diff --git a/docs/html-intl/intl/zh-tw/preview/license.jd b/docs/html-intl/intl/zh-tw/preview/license.jd new file mode 100644 index 0000000..c4acb91 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/license.jd @@ -0,0 +1,143 @@ +page.title=授權協議 + +@jd:body + +<p> +如果想要開始使用 Android SDK 預覽版,您必須同意遵守下列條款和條件。如下方所述,請注意這是 Android SDK 預覽版,可能隨時會有變更,請您自負使用風險。 +Android SDK 預覽版還不是穩定的版本,可能會包含許多錯誤和瑕疵而對您的電腦系統、裝置和資料造成嚴重的損害。 +</p> + +<p> +這是「Android SDK 預覽版授權協議」(以下稱「授權協議」)。 +</p> +<div class="sdk-terms" style="height:auto;border:0;padding:0;width:700px"> +1.簡介 + +1.1「Android SDK 預覽版」(在「授權協議」中稱為「預覽版」,包括 (如果有可用的) Android 系統檔案、經過封裝的 API 和預覽版程式庫檔案) 是在「授權協議」之條款的約束下授權給您使用。「授權協議」就您對「預覽版」的使用,構成您與 Google 間具法律約束力之合約。 + +1.2「Android」係指「Android 軟體開放原始碼專案」(http://source.android.com/) 所提供的 Android 裝置軟體堆疊 (不定期更新)。 + +1.3「Google」係指 Google Inc.,是一家在美國德拉瓦州註冊的公司,地址為 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States。 + +2.接受「授權協議」 + +2.1 必須先同意遵守「授權協議」,才能使用此「預覽版」。如果不接受「授權協議」,您就無法使用此「預覽版」。 + +2.2 按一下 [接受] 且/或使用「預覽版」,即表示您同意「授權協議」的條款。 + +2.3 如果您是美國或其他國家/地區 (包括您所居住或使用此「預覽版」的國家/地區) 的法律所禁止接收此「預覽版」的人員,就不得使用此「預覽版」及接受「授權協議」。 + +2.4 如果您將在公司或組織內部使用「預覽版」,您就要代表雇主或其他實體同意受「授權協議」約束,且您代表並保證具備完整法定權限來約束您的雇主或這類實體遵守「授權協議」。如果您不具備必要的權限,就不得代表您的雇主或其他實體接受「授權協議」或使用此「預覽版」。 + +3.Google 的預覽版授權 + +3.1 在「授權協議」之條款的約束下,Google 授權您使用此「預覽版」,此授權為買斷式、不可轉讓、非獨占性、不可轉授權、有限且可撤銷,僅在您公司或組織內部私下或內部使用。此「預覽版」僅供您用於開發在 Android 平台上執行的應用程式。 + +3.2 您同意 Google 或第三方對此「預覽版」擁有一切法定權利及權益,包括存在於此「預覽版」中的任何「智慧財產權」。「智慧財產權」係指專利法、著作權法、商業秘密法、商標法及任何和所有其他專利權下的任何及一切權利。Google 保留一切未明確授予您的權利。 + +3.3 您不得將此「預覽版」用於「授權協議」未明文許可的任何用途。除非適用的第三方授權所需,否則您不得:(a) 對此「預覽版」或其任何部分進行複製 (備份用途除外)、修改、改編、轉散佈、反向組譯、還原工程、解編或製作衍生成品;或是 (b) 將此「預覽版」的任何部分載入至行動電話或個人電腦以外的任何其他硬體裝置、將此「預覽版」的任何部分與其他軟體結合,或散佈包含此「預覽版」之任一部分的任何軟體或裝置。 + +3.4 您同意不會從事任何可能導致或造成 Android 分裂的活動,包括但不限於以任何形式散佈從此「預覽版」衍生的軟體開發套件、參其製作或宣傳。 + +3.5 對開放原始碼軟體授權下所授權之「預覽版」的使用、複製及散佈,完全受該開放原始碼軟體授權的條款管制,而不受「授權協議」管制。您同意遵守從這類開放原始碼軟體授權獲得的所有權利,並且避免採取任何可能終止、中止或侵害這類權利的行為。 + +3.6 您同意 Google 可在不事先通知您的情況下變更其所提供之「預覽版」的形式和本質,且此「預覽版」的未來版本可與在此「預覽版」的先前版本上開發的應用程式不相容。您同意 Google 通常可全權斟酌永久或暫時停止提供此「預覽版」(或此「預覽版」的任何功能) 給您或使用者,毋須事先通知。 + +3.7「授權協議」中的所有條款皆未授予您任何使用 Google 之商業名稱、商標、服務標章、標誌、網域名稱或其他明確品牌特徵的權利。 + +3.8 您同意不會移除、遮蔽或更改可能附加至或內含在此「預覽版」中的任何專利權通知 (包括著作權和商標通知)。 + +4.您對「預覽版」的使用 + +4.1 Google 同意在「授權協議」下,任何條款皆未從您 (或您的授權人) 賦予 Google 對您使用此「預覽版」開發之任何軟體應用程式的任何權利及權益,包括存在於這些應用程式中的任何智慧財產權。 + +4.2 您同意只就 (a)「授權協議」和 (b) 相關管轄權中任何適用法律、規定或是普遍獲得接受之慣例或指導方針 (包括任何有關將資料或軟體輸出或輸入美國或其他相關國家/地區的法律) 所允許的用途使用此「預覽版」及撰寫應用程式。 + +4.3 您同意如果使用此「預覽版」開發應用程式,您將保護使用者的隱私權和法定權利。如果使用者提供您使用者名稱、密碼或是其他登入資訊或個人資訊,您必須告知使用者這類資訊將提供給您的應用程式使用,並且必須為這些使用者提供法定充分的隱私權通知和保護。如果您的應用程式會儲存使用者所提供的個人或敏感資訊,它必須確保這些資訊安全無虞。如果使用者提供 Google 帳戶資訊給您,則只有在每個使用者已授權您存取其 Google 帳戶並僅限用於使用者所授權之用途的情況下,您的應用程式才能使用該資訊來存取使用者的 Google 帳戶。 + +4.4 您同意不會使用此「預覽版」從事任何不當活動,例如開發或散佈會以未經授權的方式干擾、妨礙、損害或存取 Google 或任何第三方之伺服器、網路或是其他財產或服務的應用程式。 + +4.5 您同意對您透過 Android 裝置和 (或) Android 應用程式建立、傳輸或顯示的任何資料、內容或資源,以及上述行為造成的後果 (包括 Google 可能蒙受的任何損失或損害) 負起全責 (而 Google 對您或任何第三方就上述一切不需負任何責任)。 + +4.6 您同意對違反在此「授權協議」、任何適用之第三方合約或《服務條款》或是任何適用之法律或規定下所必須遵守的義務,以及違反相關義務造成的後果 (包括 Google 或任何第三方可能蒙受的任何損失或損害) 負起全責 (而 Google 對您或任何第三方就上述一切不需負任何責任)。 + +4.7「預覽版」目前正在開發中,因此您的測試與意見反應對開發程序非常重要。使用「預覽版」,您即認同某些功能仍處於開發階段,因此您不應期待「預覽版」擁有穩定版本的完整功能。在官方 Android SDK 發行之後,此「預覽版」不再受到支援時,您同意不使用此「預覽版」公開散佈或隨附任何應用程式。 + +5.您的開發人員認證 + +5.1 您同意負責保密 Google 可能核發給您或您自己選擇的任何開發人員認證,並且對在您開發人員認證名義下開發的所有應用程式負起全責。 + +6.隱私權和資訊 + +6.1 為了持續更新及改進此「預覽版」,Google 可能會從軟體收集某些使用狀況統計數據,包括但不限於軟體的唯一識別碼、相關 IP 位址、版本號碼,以及有關使用此「預覽版」中的哪些工具和 (或) 服務及其使用方式的相關資訊。在收集這類資訊之前,此「預覽版」會先通知您並徵求您的同意。如果您不同意,Google 將不會收集這類資訊。 + +6.2 Google 會彙總並檢查收集到的資料,據以改善此「預覽版」,並且會依據《Google 隱私權政策》(http://www.google.com/policies/privacy/) 加以妥善保存。 + +7.第三方應用程式 + +7.1 如果您使用此「預覽版」來執行第三方開發的應用程式,或是執行會存取第三方所提供之資料、內容或資源的應用程式,您同意 Google 不需對這類應用程式、資料、內容或資源負任何責任。您瞭解您透過第三方應用程式存取的所有資料、內容或資源是由其提供者負起全責,而 Google 對您因使用或存取任何這些第三方應用程式、資料、內容或資源所造成的損失或損害不需負任何責任。 + +7.2 您瞭解第三方應用程式提供給您的資料、內容或資源可能受到提供者 (或代表他們的其他人員或公司) 所擁有的智慧財產權保護。您不得根據這類資料、內容或資源 (不論是整個或部分) 修改、出租、出借、販售、散佈或製作衍生成品,除非相關擁有者明確授權您從事上述活動。 + +7.3 您瞭解使用第三方應用程式、資料、內容或資源可能受到您與相關第三方之間的個別條款約束。 + +8.使用 Google API + +8.1 Google API + +8.1.1 如果您使用任何 API 從 Google 擷取資料,您瞭解這些資料可能受到 Google 或資料提供者 (或代表他們的其他人員或公司) 所擁有的智慧財產權保護。您對任何這類 API 的使用可能受到其他《服務條款》約束。除非相關《服務條款》明文允許,否則您不得根據這類資料 (不論是整個或部分) 修改、出租、出借、販售、散佈或製作衍生成品。 + +8.1.2 使用任何 API 從 Google 擷取使用者的資料時,您瞭解並同意只有在該使用者明確同意且授權您擷取其資料,而且僅限用於使用者所授權之用途的情況下,您才能擷取資料。 + +9.終止「授權協議」 + +9.1 除非您或 Google 終止「授權協議」(請見下方說明),否則「授權協議」將持續具有效力。 + +9.2 如果想終止「授權協議」,只要停止使用此「預覽版」及任何相關的開發人員憑證即可。 + +9.3 Google 可隨時通知您終止「授權協議」,無論有無原因。 + +9.4「授權協議」在先發生下列任一情況時,將自動終止而不另行通知或採取其他行動: +(A) Google 決定不再提供此「預覽版」或此「預覽版」的特定部分給您所居住或使用此服務之國家/地區的使用者;或 +(B) Google 發行最終版本的 Android SDK。 + +9.5 當「授權條款」終止時,您在「授權協議」所獲得的授權也將會一併終止,您將立即停止「預覽版」的所有使用,而第 10、11、12 和 14 項的條款將無限期持續適用。 + +10.免責聲明 + +10.1 您明確瞭解並同意完全自負使用此「預覽版」的風險,並且此「預覽版」是依「現況」和「可提供性」提供,Google 不負任何擔保責任。 + +10.2 您對使用此「預覽版」及透過此「預覽版」以下載或其他方式取得的任何內容,需自行斟酌和自負風險,而且您對因這類使用而對您的電腦系統或其他裝置所造成的任何損害或資料遺失,需負起全責。不限於前述,您瞭解此「預覽版」不是穩定的版本,可能會包含許多錯誤、瑕疵和安全性弱點而對您的電腦系統或其他裝置造成嚴重的損害,包括完全、不可回復的損失。 + +10.3 Google 進一步明確表示不提供任何形式的瑕疵擔保和條件 (不論明示或默示),包括但不限於適售性、適合特定用途及未侵權的默示擔保和條件。 + +11.責任限制 + +11.1 您明確瞭解並同意在任何歸責理論下,就可能由您引起的任何直接、間接、附隨性、特殊性、衍生性或懲罰性損害賠償 (包括任何資料遺失),不論 Google 或其代表是否已獲告知或應已瞭解發生任何這類損失的可能性,Google、其子公司和關係企業及其授權人不必對您負起任何責任。 + +12.賠償 + +12.1 在法律允許的最大範圍內,您同意為 Google、其子公司及其個別董監事、主管、員工和代理人,就任何和一切索賠、法律行動、訴訟或訴訟程序,以及因下列原因而引起的任何和一切損失、責任、損害賠償、費用及開支 (包括合理的律師費),提供辯護、賠償損失並確保其免於承擔賠償責任:(a) 您使用此「預覽版」;(b) 您使用此「預覽版」開發的應用程式侵害任何人的任何智慧財產權,或是詆毀任何人或違反其公開權或隱私權;以及 (c) 您未遵守「授權協議」。 + +13.對「授權協議」做出的變更 + +13.1 Google 可在散佈此「預覽版」的新版本時修改「授權協議」。做出這類變更後,Google 會在提供此「預覽版」的網站上提供「授權協議」的新版本。 + +14.一般法律條款 + +14.1「授權協議」構成您與 Google 之間的法律協議,用於管制您對此「預覽版」(不包括 Google 依據個別書面協議提供給您的任何服務) 的使用,並完全取代先前您與 Google 之間就此「預覽版」簽署的相關協議。 + +14.2 您同意如果 Google 未行使或執行「授權協議」所含的任何法律權利或救濟 (或在任何適用法律下對 Google 有利的權益),並不代表 Google 正式放棄權利,Google 日後仍可行使這些權利或救濟。 + +14.3 如果經任何法院 (就此事宜依管轄權決定) 裁決「授權協議」中有任何條款無效,則該條款將自「授權協議」中移除,「授權協議」的其餘部分則不受影響。「授權協議」的其餘條款將持續具有效力且可執行。 + +14.4 您瞭解並同意 Google 旗下子公司體系的每位成員都是「授權協議」的第三方受益人,而且這類其他公司有權直接執行和依據「授權協議」中對其授予權益 (或對其有利之權利) 的任何條款。除此之外的任何其他人員或公司皆非「授權協議」的第三方受益人。 + +14.5 出口限制。此「預覽版」受美國出口法規約束。您必須遵守適用於此「預覽版」的所有國內和國際出口法規。這些法律包括對目的地、使用者及最終用途的限制。 + +14.6 未事先取得 Google 事先書面核准的情況下,您不得轉讓或轉移「授權協議」,未經這類核准的任何轉讓將會失效。您不得在未事先取得 Google 書面核准的情況下,委派其「授權協議」涵蓋的責任或義務。 + +14.7「授權協議」以及您與 Google 就「授權協議」構成的關係皆受加州法律管轄,毋須理會其法律牴觸條款。您和 Google 同意服從位於加州聖塔克拉拉 (Santa Clara, California) 郡內法院的專屬管轄權,以解決由「授權協議」產生的任何法律事務。儘管如此,您同意 Google 仍可在任何管轄權中申請禁制令救濟 (或同等類型的緊急法定救濟)。 + + +</div>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/preview/overview.jd b/docs/html-intl/intl/zh-tw/preview/overview.jd new file mode 100644 index 0000000..9693eec --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/overview.jd @@ -0,0 +1,389 @@ +page.title=程式總覽 +page.metaDescription=歡迎使用 Android M 開發人員預覽版,本程式提供為新版 Android 測試和最佳化您應用程式所需的一切。 +page.image=images/cards/card-preview_16-9_2x.png +page.tags="preview", "developer", "android" + +@jd:body + +<div class="cols" style= +"background-color:#ffebc3; padding: 5px 0;margin-bottom:1em; text-align:center;"> +<h3> + Developer Preview 2 is now available + </h3> + + <ul class="dac-section-links"> + <li class="dac-section-link"> + <a href="{@docRoot}preview/support.html#preview2-notes"> + <span class="dac-sprite dac-auto-chevron"></span> + Read the Notes</a> + </li> + + <li class="dac-section-link"> + <a href="{@docRoot}preview/support.html#preview2-get"> + <span class="dac-sprite dac-auto-chevron"></span> + Get the Update</a> + </li> + + <li class="dac-section-link"> + <a href="https://code.google.com/p/android-developer-preview/"> + <span class="dac-sprite dac-auto-chevron"></span> + Report Issues</a> + </li> + </ul> +</div> + +<p> + 歡迎使用「Android M 開發人員預覽版」<strong></strong>,本程式提供為新版 Android 測試和最佳化您應用程式所需的一切。 + +免費使用,您只要下載 M 開發人員預覽版工具,就能立即開始使用。 + +</p> + +<div style="background-color:#eceff1;padding:1em;"> +<div class="wrap"> + <div class="cols"> + <div class="col-4of12"> + <h5> + 硬體與模擬器系統映像 + </h5> + + <p> + 在 Nexus 5、6、9 和 Player (適用於電視) ,以及模擬器上執行和測試您的應用程式。 + + </p> + </div> + + <div class="col-4of12"> + <h5> + 最新的平台程式碼 + </h5> + + <p> + 我們將在預覽版期間提供多次更新,讓您能夠針對最新的平台變更進行測試。 + + </p> + </div> + + <div class="col-4of12"> + <h5> + 透過 OTA 傳遞更新 + </h5> + + <p> + 在您將裝置刷新為初始預覽版之後,就能以無線方式取得更新。 + + </p> + </div> + </div> + + <div class="cols"> + + + <div class="col-4of12"> + <h5> + 新行為和功能 + </h5> + + <p> + 儘早開始開發以支援新的平台行為,例如新的執行階段權限模型和省電功能。 + + </p> + </div> + + <div class="col-4of12"> + <h5> + 開發人員限時優先回報問題 + </h5> + + <p> + 在前幾個星期內,我們將讓開發人員優先回報問題,因此請盡快測試並提供意見反應。 + + </p> + </div> + + <div class="col-4of12"> + <h5> + 意見反應與支援 + </h5> + + <p> + 使用<a href="https://code.google.com/p/android-developer-preview/">問題追蹤器</a>回報問題並提供意見反應。 + 與 <a href="http://g.co/dev/AndroidMDevPreview">M 開發人員社群</a>中的其他開發人員聯絡。 + + </p> + </div> + </div> +</div> +</div> + +<!-- +<p> + With the M Developer Preview, you'll get an early start on testing your apps, + with enough time to make adjustments before the public platform release later + in the year. We'll provide several updates to the Preview tools in the weeks + ahead, so you can keep in sync with the latest changes as the platform moves + toward launch. +</p> +<img src="{@docRoot}preview/images/m-preview-timeline.png" alt= +"Preview program timeline" id="timeline"> +<p> + You can help us improve the platform by <a href= + "https://code.google.com/p/android-developer-preview/">reporting issues</a> + through our feedback channels. This is especially + critical in the first month of the preview, when we’ll be giving priority to + developer-reported issues and feedback. +</p> --> + + +<h2 id="timeline"> + 時間軸和更新 +</h2> +<img src="{@docRoot}preview/images/m-preview-timeline-crop.png" alt="Preview program timeline" id="timeline"> +<p> + M 開發人員預覽版可從 5 月 28 日開始執行,直到我們將在 2015 年第 3 季正式發行之前發行的最終版 Android M SDK。 + + +</p> + +<p> + 我們將在主要的開發里程碑為您的測試裝置提供更新。 + 里程碑暫定如下 +</p> + +<ul> + <li> + <strong>預覽版 1</strong> (初始預覽版,五月下旬)、 + </li> + + <li> + <strong>預覽版 2</strong> (六月下旬/七月上旬) 及 + </li> + + <li> + <strong>預覽版 3</strong> (接近最終版,七月下旬) + </li> +</ul> + +<p> + 這些更新最終會成為「最終版 SDK」<strong></strong> (稍後於第 3 季),為新版 Android 提供正式的 API,以及最終的系統行為和功能。 + + +</p> + +<p> + 當您在 Android M 上測試和開發時,強烈建議您在預覽版更新發行時立即更新,讓「您的開發環境保持在最新狀態」<strong></strong>。 + + 為了讓程序更簡單,我們將對更新為預覽版建置的裝置<strong>以無線 (OTA) 方式提供更新</strong>,還會提供您能手動下載和更新的系統映像。 + + +</p> +<p class="note"> + <strong>注意:</strong>最終版 SDK 與系統映像無法以 OTA 方式提供,將必須<strong>以手動方式更新</strong>至您的測試裝置。</strong> + + +</p> + +<p> + 我們將透過 <a href="http://android-developers.blogspot.com/">Android 開發人員部落格</a>,還有本網站與 <a href="http://g.co/dev/AndroidMDevPreview">Android M 開發人員社群</a>來通知您有可用的預覽版更新。 + + +</p> + +<h2 id="preview_tools"> + 預覽版新增功能 +</h2> + +<p> + M 開發人員預覽版包含您針對各種不同螢幕大小、網路技術、 CPU/GPU 晶片組及硬體架構,測試現有應用程式所需的一切。 + + +</p> + +<h4> + SDK 工具 +</h4> + +<p> + 您可以透過 <a href="{@docRoot}sdk/installing/adding-packages.html">Android Studio</a> 中的「SDK 管理器」下載以下元件: +</p> + +<ul> + <li>M 開發人員預覽版 <strong>SDK 工具</strong> + </li> + + <li>M 開發人員預覽版<strong>模擬器系統映像</strong> (32 位元和 64 位元) + + </li> + + <li>M 開發人員預覽版<strong>模擬器系統映像 (適用於 Android TV)</strong> (32 位元) + + </li> +</ul> + +<h4> + 硬體系統映像 +</h4> + +<p> + 您可以從<a href="download.html">下載頁面</a>下載適用於 Nexus 裝置的以下硬體系統映像: + +</p> + +<ul> + <li> + <strong>Nexus 5</strong> (GSM/LTE)“hammerhead”裝置系統映像 + </li> + + <li> + <strong>Nexus 6</strong>“shamu”裝置系統映像 + </li> + + <li> + <strong>Nexus 9</strong> (Wi-Fi)“volantis”裝置系統映像 + </li> + + <li> + <strong>Nexus Player</strong> (Android TV)“fugu”裝置系統映像 + </li> +</ul> + +<h4> + 文件和範例程式碼 +</h4> + +<p> + 這些文件資源可協助您瞭解預覽版: +</p> + +<ul> + <li> + <a href="setup-sdk.html">設定 SDK</a> 涵蓋開始使用的逐步指示。 + + </li> + + <li> + <a href="{@docRoot}preview/testing/guide.html">測試指南</a>與<a href="behavior-changes.html">行為變更</a>指出要測試的主要區域。 + </li> + + <li>新 API 的文件,包括 <a href="api-overview.html">API 總覽</a>、可下載的 <a href="{@docRoot}preview/download.html#docs">API 參考資料</a>以及主要功能 (例如<a href="{@docRoot}preview/features/runtime-permissions.html">權限</a>、<a href="{@docRoot}preview/backup/index.html">應用程式備份</a>及其他功能) 的詳細開發人員指南。 + + + + + </li> + + <li> + 示範如何支援權限和其他新功能的<a href="{@docRoot}preview/samples.html">範例程式碼</a>。 + + </li> + + <li> + 適用於目前 M 開發人員預覽版的<a href="{@docRoot}preview/support.html#release-notes">版本資訊</a>,包括變更資訊與差異報告。 + + </li> +</ul> + +<h4> + 支援資源 +</h4> + +<p> + 在 M 開發人員預覽版上測試和開發時,請使用以下支援資源: + +</p> + +<ul> + <li><a href="https://code.google.com/p/android-developer-preview/">M 開發人員預覽版問題追蹤器</a>是您的<strong>主要意見反應</strong>管道。 + +您可以透過問題追蹤器來回報錯誤、效能問題及一般意見反應。 +您也可以檢查<a href="https://code.google.com/p/android-developer-preview/wiki/KnownIssues">已知問題</a> +和尋找因應方式步驟。 + </li> + + <li><a href="http://g.co/dev/AndroidMDevPreview">Android M 開發人員社群</a>是您能<strong>與其他 Android M 開發人員聯絡</strong>的 Google+ 社群。您可以分享有關 Android M 的觀察或想法,或尋找解答。 + + + + </li> +</ul> + + +<h2 id="preview_apis_and_publishing"> + 目標設定、預覽版 API 及發行 +</h2> + +<p> + Android M 開發人員預覽版是開發專用的版本,而且<strong>沒有標準的 API 層級</strong>。 +如果您想要選擇退出相容性行為以測試您的應用程式 (強烈建議),您可以將應用程式的 <code><a href= + "/guide/topics/manifest/uses-sdk-element.html">targetSdkVersion</a></code> 設定為 <code>“MNC”</code>,就能以 M 開發人員預覽版為目標。 + + + +</p> + +<p> + Android M 開發人員預覽版提供<strong>預覽版 API</strong> — 在最終版 SDK (目前規劃在 2015 年第三季) 發行之前的都不是正式 API。 + +這表示您可以預期 API 會隨時間而有些許變更,特別是程式一開始的幾週。<strong></strong> + +我們會將 Android M 開發人員預覽版每次更新的變更摘要提供給您。 + +</p> + +<p class="note"> + 請注意,雖然預覽版 API 可能會改變,但例如執行階段權限和省電功能等基本系統行為,均已穩定且能夠立即測試。 + + +</p> + +<p> + 在發行方面,Google Play 會<strong>禁止您發行以 M 開發人員預覽版為目標的應用程式</strong>。 +當 Android M 最終版 SDK 推出時,您將能夠以正式 Android M API 層級為目標,並將您的應用程式發行至 Google Play。 + +同時,您可以透過電子郵件或直接從您的網站下載,來對測試者散佈以 Android M 為目標的應用程式。 + + +</p> + +<h2 id="get_started"> + 如何開始 +</h2> + +<p> + 如要開始測試您的應用程式: +</p> + +<ol> + <li>檢閱 <a href="{@docRoot}preview/api-overview.html">API 總覽</a>與<a href="{@docRoot}preview/behavior-changes.html">行為變更</a>,以瞭解新增功能,還有它會如何影響您的應用程式。 + +特別是瞭解新的<a href="{@docRoot}preview/features/runtime-permissions.html">執行階段權限</a>模型、省電功能以及自動化備份。 + + + </li> + + <li>依照<a href="{@docRoot}preview/setup-sdk.html">設定預覽版 SDK</a> 的指示來設定您的環境,並設定測試裝置。 + + + </li> + + <li>依照<a href="https://developers.google.com/android/nexus/images">刷新指示</a>,針對 Nexus 5、6、9 及 Player 刷新最新的 M 開發人員預覽版系統映像。 + +在您刷新開發裝置之後,預覽版更新將以無線 (OTA) 更新</a>的方式提供。 + + </li> + + <li>下載 <a href="{@docRoot}preview/download.html#docs">M 預覽版 API 參考資料</a>與 <a href="{@docRoot}preview/samples.html">M 預覽版範例</a>,以深入瞭解新的 API 功能以及如何在您的應用程式中運用。 + + + + </li> + + <li>加入 <a href="http://g.co/dev/AndroidMDevPreview">Android M 開發人員社群</a>以取得最新消息,並與其他使用新平台的開發人員聯絡。 + + + </li> +</ol> + +<p> + 感謝您參與 Android M 開發人員預覽版程式! +</p> diff --git a/docs/html-intl/intl/zh-tw/preview/samples.jd b/docs/html-intl/intl/zh-tw/preview/samples.jd new file mode 100644 index 0000000..2ef9a60 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/samples.jd @@ -0,0 +1,70 @@ +page.title=範例 +page.image=images/cards/samples-new_2x.png +@jd:body + +<p> + 下列提供 M 開發人員預覽版的程式碼範例。如要下載 Android Studio 的範例,請選取 [File] (檔案) > [Import Samples] (匯入範例) 選單選項。 +<b></b> +</p> + +<p class="note"> + <strong>注意:</strong>這些可下載的專案是專為與 Gradle 和 Android Studio 一起使用而設計。 + +</p> + + +<h3 id="RuntimePermissions">執行階段權限</h3> + +<p> + Android M 改變系統權限的運作方式。改為在執行階段才要求使用者核准權限要求,而不是安裝期間。 +這個範例顯示如何要求這些權限。 + +</p> + +<p><a href="https://github.com/googlesamples/android-RuntimePermissions">在 GitHub 上取得</a></p> + +<h3 id="ConfirmCredentials">確認認證</h3> + +<p> + 這個範例示範如何在您的應用程式中使用裝置認證做為驗證方法。 +</p> + +<p><a href="https://github.com/googlesamples/android-ConfirmCredential">在 GitHub 上取得</a> +</p> + +<h3 id="FingerprintDialog">指紋對話方塊</h3> + +<p> + 這個範例示範如何在您的應用程式中辨識註冊的指紋以驗證使用者。 + +</p> + +<p><a href="https://github.com/googlesamples/android-FingerprintDialog">在 GitHub 上取得</a></p> + +<h3 id="AutomaticBackup">針對應用程式進行自動備份</h3> + +<p> + Android M 導入自動備份應用程式設定的功能。這個範例示範如何將篩選規則新增至應用程式以管理設定備份。 + +</p> + +<p><a href="https://github.com/googlesamples/android-AutoBackupForApps">在 GitHub 上取得</a></p> + +<h3 id="CameraRaw">相機 2 Raw</h3> + +<p> + 示範如何使用 <code>Camera2</code> API,以擷取 RAW 相機緩衝區並另存為 <code>DNG</code> 檔案。 + +</p> + +<p><a href="https://github.com/googlesamples/android-Camera2Raw">在 GitHub 上取得</a></p> + +<h3 id="ActiveNotification">使用中通知</h3> + +<p> + 這個範例示範 +<a href="{@docRoot}reference/android/app/NotificationManager.html"><code>NotificationManager</code></a> + 如何將您應用程式目前顯示的通知數目告訴您。 +</p> + +<p><a href="https://github.com/googlesamples/android-ActiveNotifications">在 GitHub 上取得</a></p> diff --git a/docs/html-intl/intl/zh-tw/preview/setup-sdk.jd b/docs/html-intl/intl/zh-tw/preview/setup-sdk.jd new file mode 100644 index 0000000..1769f74 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/setup-sdk.jd @@ -0,0 +1,207 @@ +page.title=設定預覽版 SDK +page.image=images/cards/card-set-up_16-9_2x.png + +@jd:body + + +<div id="qv-wrapper"> + <div id="qv"> + <h2>本文件內容</h2> + <ol> + <li><a href="#get-as13">取得 Android Studio 1.3</a></li> + <li><a href="#get-sdk">取得預覽版 SDK</a></li> + <li><a href="#create-update">建立或更新專案</a></li> + <li><a href="#setup-test">設定以進行測試</a></li> + </ol> + </div> +</div> + +<p>M 開發人員預覽版 SDK 可以從 Android SDK Manager 取得。本文件假設您熟悉 Android 應用程式開發工作,例如使用 Android SDK Manager 和建立專案。 + +如果您是 Android 的新手,請先參閱<a href="{@docRoot}training/basics/firstapp/index.html">建置您的第一個應用程式</a>訓練課程。 +</a> +</p> + +<h2 id="get-as13">取得 Android Studio 1.3</h2> + +<p>開發人員預覽版最適合與處於預覽版狀態的 Android Studio 1.3 一起使用。 +強烈建議您安裝 Android Studio 1.3 預覽版與開發人員預覽版一起使用。 +</p> + +<p class="caution"><strong>注意:</strong>Android Studio 1.3 的測試預覽版仍在持續開發中。 +如果您使用主要開發電腦來測試開發人員預覽版,可以建立第二個 Android Studio 安裝以用於測試。 + +</p> + +<p>如要安裝 Android Studio 1.3 預覽版:</p> + +<ol> + <li>下載並啟動 <a href="{@docRoot}tools/studio/index.html">Android Studio</a>。 + + </li> + + <li>開啟 [Settings] (設定) 視窗 (在 Windows 上,您可以選擇 [檔案] > [設定] 來執行此動作)。<strong> +</strong><strong></strong>選擇 [Appearance & Behavior] (外觀和行為) > [System Settings] (系統設定) > [Updates] (更新) 面板。<strong></strong> + + + + <p class="aside">在 OSX 上,您可以在 Android Studio 的「Preferences」(偏好設定) 視窗中,找到 [Appearance & Behavior] (外觀和行為) 面板。<strong></strong><strong></strong> + +</p> + </li> + + <li> 在「Updates」(更新) 面板上,選擇以下選項:[Automatically check updates for: (自動檢查以下的可用更新:) +<strong></strong><strong>Canary Channel] (測試版管道)。</strong> + </li> + + <li>在「Updates」(更新) 面板上,選取 [Check Now] (立即檢查) 以檢查是否有可用的最新測試版建置。<strong></strong><strong></strong> +版本請在系統提示您時,下載並安裝該版本。 + + </li> +</ol> + +<h2 id="get-sdk">取得預覽版 SDK</h2> + +<p>如要將預覽版 SDK 元件新增至您的開發環境:</p> + +<ol> + <li>啟動 Android Studio 1.3 預覽版。 + </li> + + <li>開啟 [Settings] (設定) 視窗 (在 Windows 上,您可以選擇 [檔案] > [設定] 來執行此動作)。<strong></strong><strong></strong> +選擇 [Appearance & Behavior] (外觀和行為) > [System Settings] (系統設定) > [Updates] (更新) 面板。<strong></strong> + + + + <p class="aside">在 OSX 上,您可以在 Android Studio 的「Preferences」(偏好設定) 視窗中,找到 [Appearance & Behavior] (外觀和行為) 面板。<strong></strong><strong></strong> + +</p> + </li> + + <li>在「Updates」(更新) 面板上,選擇以下選項:[Automatically check updates for: (自動檢查以下的可用更新:) +<strong></strong><strong></strong>Canary Channel] (測試版管道) 以及 [Automatically check updates for Android SDK: (自動檢查 Android SDK 的可用更新:)<strong> +Preview Channel] (預覽版管道)。</strong> + </li> + + <li>啟動 <strong>Android Studio Manager</strong>。(使用 Android Studio 1.3,SDK Manager 會與 Android Studio 整合,而不是獨立的應用程式。) + + + </li> + + <li>在「Platforms」(平台) 區段下,選取 [Android MNC Preview] (Android MNC 預覽版)。<strong></strong><strong></strong> + + </li> + + <li>在「Tools」(工具) 區段中,選擇最新的 Android SDK 工具、平台工具以及建置工具。<strong></strong><strong></strong><strong></strong><strong></strong> + + + </li> + + <li>按一下 [Install packages] (安裝套件) 並接受所有套件的授權合約。<strong></strong> + + </li> + + <li>開啟 [Settings] (設定) 視窗,然後選擇 [Appearance & Behavior] (外觀和行為) > [System Settings] (系統設定) > [Android SDK] 面板,來驗證已安裝 M 開發人員預覽版。<strong></strong><strong></strong> + +</li> + + <li>在「Android SDK」面板上,選擇 [SDK Platforms] (SDK 平台) 索引標籤。<strong></strong><strong></strong> +「Android MNC Preview」(Android MNC 預覽版) 應該會列在「Installed」(已安裝)。<strong></strong><em></em> +此外,開啟 [SDK Tools] (SDK 工具) 索引標籤以確認已經安裝最新的工具。<strong></strong> + + + </li> +</ol> +<p>完成這些步驟之後,就能在您的開發環境中使用預覽版元件。 + </p> + + +<h2 id="create-update">建立或更新專案</h2> + +<p> + 為了使用預覽版 API,您必須建立或更新開發專案,才能使用預覽版元件。 + +</p> + + +<h3 id="create">建立新專案</h3> + +<p> + 建議您使用 Android Studio 搭配預覽版來建立專案。依照<a href="{@docRoot}sdk/installing/create-project.html">建立專案</a>中所述的步驟執行,直到您到達專案精靈中的「大小」畫面。 + +<em></em>接著,執行下列步驟以建立為預覽版設定的專案。 + +</p> + +<ul> + <li>核取 [Phone and Tablet] (手機與平板電腦)。<strong></strong></li> + <li>選取 [MNC:<strong></strong>Android M (Preview)] (Android M (預覽版)),它位於 [Minimum SDK] (SDK 最低版本)。<strong></strong> +</li> +</ul> + + +<h3 id="update">更新現有的專案</h3> + +<p> + 對於現有專案,您必須修改專案設定以啟用預覽版 API。在您的開發環境中,開啟模組的 <code>build.gradle</code> 檔案,然後將這些值設定如下: + + +</p> + +<ul> + <li>將 <code>compileSdkVersion</code> 設定為 <code>'android-MNC'</code></li> + <li>將 <code>minSdkVersion</code> 設定為 <code>'MNC'</code></li> + <li>將 <code>targetSdkVersion</code> 設定為 <code>'MNC'</code></li> +</ul> + + +<h2 id="setup-test">設定以進行測試</h2> + +<p> + 利用預覽版測試應用程式,需要您將裝置或虛擬裝置設定為使用平台的預覽版本。 +如果您有相容的裝置,您可以安裝預覽版平台以用於測試。 +否則,您可以設定虛擬裝置以用於測試。 +</p> + +<h3 id="setup-device">設定實體裝置</h3> + +<p> + 如果您有 Nexus 5、Nexus 6、Nexus 9 或 Android 電視,您可以在這些裝置上安裝預覽版系統映像,以測試您的應用程式。您可以使用 Android Virtual Device Manager (Android 虛擬裝置管理員) 工具,從 Android Studio 內設定使用平台預覽版本的虛擬裝置。 + + + +</p> + +<p class="caution"> + <strong>重要說明:</strong>在裝置上安裝預覽版映像,會「移除當中的所有資料」,因此您應該在安裝預覽版映像之前備份任何資料。<em></em> + +</p> + +<h3 id="setupAVD">設定虛擬裝置</h3> + +<p> + 您可以使用 Android Virtual Device Manager (Android 虛擬裝置管理員) 工具,從 Android Studio 內設定使用平台預覽版本的虛擬裝置。 + +</p> + +<p>如要使用 AVD Manager 來建立 AVD:</p> + +<ol> + <li>請在您的開發環境中安裝預覽版 SDK,如<a href="{@docRoot}preview/setup-sdk.html">設定預覽版 SDK</a> 中所述。 + +</li> + <li>依照<a href="{@docRoot}tools/devices/managing-avds.html">使用 AVD Manager 來管理 AVD</a>中的步驟執行。 + +使用下列設定: + <ul> + <li><strong>裝置:</strong>Nexus 5、Nexus 6、Nexus 9 或 Android 電視</li> + <li><strong>目標:</strong> + Android M (預覽版) - API 級別 M</li> + <li><strong>ABI:</strong> x86</li> + </ul> + </li> +</ol> + +<p> + 如需建立虛擬裝置以用於測試的詳細資訊,請參閱<a href="{@docRoot}tools/devices/index.html">管理虛擬裝置</a>。 +</p> diff --git a/docs/html-intl/intl/zh-tw/preview/testing/guide.jd b/docs/html-intl/intl/zh-tw/preview/testing/guide.jd new file mode 100644 index 0000000..879ec02 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/testing/guide.jd @@ -0,0 +1,187 @@ +page.title=測試指南 +page.image=images/cards/card-build_16x9_2x.png +page.keywords=previewresources,androidm,testing,permissions + +@jd:body + +<div id="qv-wrapper"> + <div id="qv"> + <h2>本文件內容</h2> + <ol> + <li><a href="#runtime-permissions">測試權限</a></li> + <li><a href="#doze-standby">測試休眠與應用程式待命</a></li> + <li><a href="#ids">自動備份與裝置識別碼</a></li> + </ol> + </div> +</div> + +<p> + Android M 開發人員預覽版能夠讓您有機會確保您的應用程式能搭配下一個版本的平台運作。 +此預覽版包含許多 API 和足以影響應用程式的行為變更,如 <a href="{@docRoot}preview/api-overview.html">API 總覽</a>和<a href="{@docRoot}preview/behavior-changes.html">行為變更</a>中所述。 + +使用預覽版測試應用程式時,您必須著重在許多特定的系統變更,以確保使用者都能擁有良好的體驗。 + + +</p> + +<p> + 本指南說明對應用程式測試預覽功能的內容與方法。您應優先測試這些特定的預覽功能,因為這些功能可能會對您的應用程式行為有非常大的影響: + + +</p> + +<ul> + <li><a href="#runtime-permissions">權限</a> + </li> + <li><a href="#doze-standby">休眠與應用程式待命</a> + </li> + <li><a href="#ids">自動備份與裝置識別碼</a></li> +</ul> + +<p> + 如需有關如何設定使用預覽版系統映像的裝置或虛擬裝置以進行測試的詳細資訊,請參閱<a href="{@docRoot}preview/setup-sdk.html">設定預覽版 SDK</a>。 + +</p> + + +<h2 id="runtime-permissions">測試權限</h2> + +<p> + 新的<a href="{@docRoot}preview/features/runtime-permissions.html">權限</a>模型改變使用者對您的應用程式分配權限的方式。 +以前在安裝過程中會授與所有權限,現在您的應用程式則必須在執行階段向使用者要求個別的權限。 + +對於使用者而言,這個行為能夠對每個應用程式的Activity提供更細膩的控制,而且也能更瞭解應用程式為何要要求特定權限。 +使用者可以隨時個別對應用程式授與或撤銷權限。 +預覽版的這個功能最有可能影響到您應用程式的行為,而且可能會導致應用程式某些功能無法正常運作,或者這些功能會以降級的狀態運作。 + + +</p> + +<p class="caution"> + 這個變更會影響在新平台上執行的所有應用程式,甚至影響並非針對新平台版本開發的應用程式。 +平台會對舊版應用程式提供有限的相容性行為,但是您最好還是立即開始規劃將應用程式移轉到新的權限模型,以便能在官方平台上市時發佈更新的應用程式版本。 + + +</p> + + +<h3 id="permission-test-tips">測試祕訣</h3> + +<p> + 使用下列測試祕訣,可以幫助您使用新的權限行為,規劃和執行應用程式測試。 + +</p> + +<ul> + <li>辨別應用程式目前的權限與相關的程式碼路徑。</li> + <li>針對所有權限保護的服務與資料測試使用者流程。</li> + <li>測試各種組合的授與/撤銷權限。</li> + <li>從命令列使用 {@code adb} 工具管理權限: + <ul> + <li>依群組列出權限與狀態: + <pre>adb shell pm list permissions -d -g</pre> + </li> + <li>使用下列語法授與或撤銷一或多個權限:<br> + <pre>adb shell pm [grant|revoke] <permission.name> ...</pre> + </li> + </ul> + </li> + <li>分析使用權限的應用程式服務。</li> +</ul> + +<h3 id="permission-test-strategy">測試策略</h3> + +<p> + 權限變更會影響應用程式的結構和設計,同時也會影響使用者的體驗以及您提供給使用者的流程。 +您應該評估應用程式目前的權限作法,然後開始規劃您要提供的新流程。 +官方版本的平台會提供相容性行為,但是您最好規劃更新您的應用程式,而不要依賴這些行為。 + + +</p> + +<p> + 辨別您的應用程式實際需要且使用到的權限,然後找出使用受權限保護之服務的各種程式碼路徑。 +您可以在新平台上測試,並且進行程式碼分析,來達到上述目的。 +測試時,您應該變更應用程式的 {@code targetSdkVersion} 為預覽版本,著重在加入執行階段權限。 +如需詳細資訊,請參閱<a href="{@docRoot}preview/setup-sdk.html#">設定預覽版 SDK</a>。 + +</p> + +<p> + 測試各種撤銷/加入權限的組合,著重在依據這些權限的使用者流程。 +如果相依性不明顯或邏輯不清楚時,您可以考慮重新分解或劃分流程以消除相依性,或是更清楚為何需要某個權限。 + + +</p> + +<p> + 如需有關執行階段權限行為、測試和建議做法的詳細資訊,請參閱 <a href="{@docRoot}preview/features/runtime-permissions.html">權限</a>開發人員預覽版頁面。 + + +</p> + + +<h2 id="doze-standby">測試休眠與應用程式待命</h2> + +<p> + 當裝置處於閒置狀態,或者當您的應用程式不在使用中時,「休眠」與「應用程式待命」的省電功能會限制應用程式可以執行的背景處理量。 +系統可能加諸在應用程式的限制,包括網路受到限制或沒有網路、背景工作暫停、通知暫停、喚醒要求被略過,以及警示被略過。 + +如要確保您的應用程式能正確運作,而且這些省電功能也達到最好的效益,您應該透過模擬這些低電量狀態,測試您的應用程式。 + + +</p> + +<h4 id="doze">搭配休眠測試應用程式</h4> + +<p>對您的應用程式測試休眠:</p> + +<ol> +<li>設定 M 預覽版系統映像的硬體裝置或虛擬裝置。</li> +<li>將裝置連線到您的開發電腦並安裝您的應用程式。</li> +<li>執行您的應用程式並讓應用程式保持使用中。</li> +<li>執行下列命令,模擬裝置進入「休眠」模式: + +<pre> +$ adb shell dumpsys battery unplug +$ adb shell dumpsys deviceidle step +$ adb shell dumpsys deviceidle -h +</pre> + + </li> + <li>觀察當裝置重新啟動時的應用程式行為。當裝置結束「休眠」時,確定應用程式順利回復。 +</li> +</ol> + + +<h4 id="standby">搭配應用程式待命測試應用程式</h4> + +<p>對您的應用程式測試應用程式待命模式:</p> + +<ol> + <li>設定 M 預覽版系統映像的硬體裝置或虛擬裝置。</li> + <li>將裝置連線到您的開發電腦並安裝您的應用程式。</li> + <li>執行您的應用程式並讓應用程式保持使用中。</li> + <li>執行下列命令,模擬應用程式進入待命模式: + +<pre> +$ adb shell am broadcast -a android.os.action.DISCHARGING +$ adb shell am set-idle <packageName> true +</pre> + + </li> + <li>使用下列命令,模擬喚醒應用程式: + <pre>$ adb shell am set-idle <packageName> false</pre> + </li> + <li>觀察當應用程式被喚醒時的行為。確定應用程式順利從待命模式回復。 +您尤其要檢查應用程式通知與背景工作是否有如預期般繼續運作 +。</li> +</ol> + +<h2 id="ids">針對應用程式進行自動備份與裝置特定識別碼</h2> + +<p>如果您的應用程式在內部儲存空間存有任何裝置特定識別碼,例如 Google +雲端通訊註冊 ID,請確認按照建議做法排除這些儲存位置不要進行自動備份,如<a href="{@docRoot}preview/backup/index.html">針對應用程式進行自動備份</a>中所述。 + + + </p> diff --git a/docs/html-intl/intl/zh-tw/preview/testing/performance.jd b/docs/html-intl/intl/zh-tw/preview/testing/performance.jd new file mode 100644 index 0000000..5437e9d --- /dev/null +++ b/docs/html-intl/intl/zh-tw/preview/testing/performance.jd @@ -0,0 +1,656 @@ +page.title=測試顯示效能 +page.image=images/cards/card-test-performance_2x.png +page.keywords=效能, fps, 工具 + +@jd:body + + +<div id="qv-wrapper"> + <div id="qv"> + <h2>本文件內容</h2> + <ol> + <li><a href="#measure">測量 UI 效能</a> + <ul> + <li><a href="#aggregate">彙總畫面統計資料</a></li> + <li><a href="#timing-info">精確畫面計時資訊</a></li> + <li><a href="#timing-dump">簡易畫面計時傾印</a></li> + <li><a href="#collection-window">控制統計資料收集時間</a></li> + <li><a href="#diagnose">診斷效能回復</a></li> + <li><a href="#resources">其他資源</a></li> + </ul> + </li> + <li><a href="#automate">自動化 UI 效能測試</a> + <ul> + <li><a href="#ui-tests">設定 UI 測試</a></li> + <li><a href="#automated-tests">設定自動化 UI 測試</a></li> + <li><a href="#triage">分類和修正觀察到的問題</a></li> + </ul> + </li> + </ol> + </div> +</div> + + +<p> + 使用者介面效能測試可確保您的應用程式不只符合功能需求,與使用者與應用程式的互動也無比順暢,執行時每秒一致有 60 個畫面 (<a href="https://www.youtube.com/watch?v=CaMTIgxCSqU&index=25&list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE">為什麼 60fps?</a>),任何畫面都不會遺漏或延遲,或稱為「閃避」<em></em>現象。 + + +本文件說明可用以測量 UI 效能的工具,以及呈現可將 UI 效能測量與測試做法整合的方法。 + + +</p> + + +<h2 id="measure">測量 UI 效能</h2> + +<p> + 為改善效能,首先您需要測量系統效能的能力,接著在管道的各部分發生問題時加以診斷和辨識。 + + +</p> + +<p> + <em><a href="https://source.android.com/devices/tech/debug/dumpsys.html">dumpsys</a></em> 是一種 Android 工具,可在裝置上執行和傾印有關系統服務狀態的有趣資訊。 + +將 <em>gfxinfo</em> 命令傳送至 dumpsys,會將錄製階段所發生與動畫的畫面相關的效能資訊以 logcat 提供輸出。 + + +</p> + +<pre> +> adb shell dumpsys gfxinfo <PACKAGE_NAME> +</pre> + +<p> + 此命令會產生多種不同的畫面計時資料。 +</p> + +<h3 id="aggregate">彙總畫面統計資料</h3> + +<p> + 使用 M 預覽版,命令會在程序的生命週期全程收集畫面資料,並將彙總的分析列印到 logcat。 +例如: +</p> + +<pre class="noprettyprint"> +Stats since: 752958278148ns +Total frames rendered: 82189 +Janky frames: 35335 (42.99%) +90th percentile: 34ms +95th percentile: 42ms +99th percentile: 69ms +Number Missed Vsync: 4706 +Number High input latency: 142 +Number Slow UI thread: 17270 +Number Slow bitmap uploads: 1542 +Number Slow draw: 23342 +</pre> + +<p> + 這些高階統計資料是以高階方式轉換應用程式的轉譯效能,還有其在許多畫面的穩定性。 + +</p> + + +<h3 id="timing-info">精確畫面計時資訊</h3> + +<p> + M 預覽版隨附新的命令 gfxinfo,而 <em>framestats</em> 可從最近的畫面提供相當詳細的畫面計時資訊,讓您可以追蹤並更準確進行除錯。 + + +</p> + +<pre> +>adb shell dumpsys gfxinfo <PACKAGE_NAME> framestats +</pre> + +<p> + 此命令會從應用程式所產生至少 120 個畫面當中,加上奈秒時間戳記印出畫面計時資訊。以下範例是 adb dumpsys gfxinfo <PACKAGE_NAME> framestats 的原始輸出: + + +</p> + +<pre class="noprettyprint"> +0,49762224585003,49762241251670,9223372036854775807,0,49762257627204,49762257646058,49762257969704,49762258002100,49762265541631,49762273951162,49762300914808,49762303675954, +0,49762445152142,49762445152142,9223372036854775807,0,49762446678818,49762446705589,49762447268818,49762447388037,49762453551527,49762457134131,49762474889027,49762476150120, +0,49762462118845,49762462118845,9223372036854775807,0,49762462595381,49762462619287,49762462919964,49762462968454,49762476194547,49762476483454,49762480214964,49762480911527, +0,49762479085548,49762479085548,9223372036854775807,0,49762480066370,49762480099339,49762481013089,49762481085850,49762482232152,49762482478350,49762485657620,49762486116683, +</pre> + +<p> + 這裡的每一行輸出都代表應用程式產生的一個畫面。每行都有固定的資料欄編號,描述畫面產生管道的各階段所花費的時間。 +下一節會詳細說明此格式,包括各資料欄代表的意義。 + +</p> + + +<h4 id="fs-data-format">Framestats 資料格式</h4> + +<p> + 由於資料區塊是以 CSV 格式輸出,所以可以直接將它貼到選擇的試算表工具,或使用指令碼來收集和剖析。 +下表說明輸出資料欄的格式。 +所有時間戳記都以奈秒為單位。 +</p> + +<ul> + <li>FLAGS + <ul> + <li>FLAGS 資料欄的資料列均為 0,從 FRAME_COMPLETED 資料欄減去 INTENDED_VSYNC 資料欄可計算得出總畫面時間。 + + </li> + + <li>如果這個值非零,應該略過該資料列,因為從正常效能來判斷,畫面已是極端值,版面配置與繪製預期都要花費 16ms 以上的時間。 + +以下是發生這種情況的幾個原因: + <ul> + <li>視窗版面配置改變 (例如應用程式的第一個畫面或經過旋轉) + + </li> + + <li>也可能是略過畫面,在這種情況下,某些值會含有記憶體回收的時間戳記。 +例如,如果畫面速度超過 60fps,或如果螢幕上空無一物,最後卻有所改變,就可能會略過畫面,這不一定是應用程式發生問題的徵兆。 + + + </li> + </ul> + </li> + </ul> + </li> + + <li>INTENDED_VSYNC + <ul> + <li>預期的畫面起始點。如果這個值和VSYNC 不同,表示 UI 執行緒中發生的工作使它無法即時回應 vsync 訊號。 + + + </li> + </ul> + </li> + + <li>VSYNC + <ul> + <li>用於所有 vsync 接聽器和繪製畫面的時間值 (Choreographer 畫面回呼、動畫、View.getDrawingTime() 等等) + + </li> + + <li>如要深入瞭解有關 VSYNC 和它如何影響您的應用程式,請參閱<a href="https://www.youtube.com/watch?v=1iaHxmfZGGc&list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&index=23">瞭解 VSYNC</a> 影片。 + + + </li> + </ul> + </li> + + <li>OLDEST_INPUT_EVENT + <ul> + <li>輸入佇列中最舊輸入事件的時間戳記,或為 Long.MAX_VALUE,若沒有該畫面的輸入事件的話。 + + </li> + + <li>這個值主要用於平台工作,對應用程式開發人員用處不大。 + + </li> + </ul> + </li> + + <li>NEWEST_INPUT_EVENT + <ul> + <li>輸入佇列中最新輸入事件的時間戳記,或為 0,若沒有該畫面的輸入事件的話。 + + </li> + + <li>這個值主要用於平台工作,對應用程式開發人員用處不大。 + + </li> + + <li>不過,透過查看 (FRAME_COMPLETED - NEWEST_INPUT_EVENT),可以大略知道應用程式還會延遲多少時間。 + + </li> + </ul> + </li> + + <li>HANDLE_INPUT_START + <ul> + <li>將輸入事件分配給應用程式時的時間戳記。 + </li> + + <li>查看這個值與 ANIMATION_START 之間的時間,即可測量出應用程式花費在處理輸入事件的時間。 + + </li> + + <li>如果這個數字很高 (>2ms),這表示應用程式花費在處理輸入事件(例如 View.onTouchEvent()) 的時間過長,指出需要將這項工作最佳化,或卸載交由其他執行緒處理。 + +請注意,還有一些情況本就預期且可接受這個數字較大,例如會啟動新活動或類似工作的點擊事件。 + + + </li> + </ul> + </li> + + <li>ANIMATION_START + <ul> + <li>向 Choreographer 註冊的動畫執行時的時間戳記。 + </li> + + <li>查看這個值與 PERFORM_TRANVERSALS_START 之間的時間,即可判斷它花費多久的時間評估所有執行中的動畫器 (常見的有 ObjectAnimator、ViewPropertyAnimator 及 Transitions)。 + + + </li> + + <li>如果這個數字很高 (>2ms),可查看您的應用程式是否撰寫任何自訂動畫器,或 ObjectAnimators 正進行動畫處理的資料欄,並確定它們都適用於動畫。 + + + </li> + + <li>如要深入瞭解 Choreographer,請參閱<a href="https://developers.google.com/events/io/sessions/325418001">順滑流暢與否</a>影片。 + + </li> + </ul> + </li> + + <li>PERFORM_TRAVERSALS_START + <ul> + <li>如果您從這個值中減去 DRAW_START,就可以得知版面配置和測量階段花費多久的時間完成。(請注意,在捲動或動畫期間,您會希望這個值趨近於零。) + + + </li> + + <li>如要深入瞭解轉譯管道的測量與版面配置階段,請參閱<a href="https://www.youtube.com/watch?v=we6poP0kw6E&list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&index=27">無效判定、版面配置及效能</a>影片。 + + + </li> + </ul> + </li> + + <li>DRAW_START + <ul> + <li>performTraversals 的繪製階段開始的時間。這是判定無效的任何檢視顯示清單的記錄起始點。 + + </li> + + <li>這個值與 SYNC_START 之間的時間,就是對樹狀結構中所有無效判定檢視呼叫 View.draw() 所花費的時間。 + + </li> + + <li>如需繪製模型的詳細資訊,請參閱<a href="{@docRoot}guide/topics/graphics/hardware-accel.html#hardware-model">硬體加速</a>或<a href="https://www.youtube.com/watch?v=we6poP0kw6E&list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&index=27">無效判定、版面配置及效能</a>影片。 + + + </li> + </ul> + </li> + + <li>SYNC_START + <ul> + <li>繪製的同步階段開始的時間。 + </li> + + <li>如果這個值與 ISSUE_DRAW_COMMANDS_START 之間的時間相當長 (約為 >0.4ms ),通常代表已繪製許多必須上傳至 GPU 的新點陣圖。 + + + </li> + + <li>如要深入瞭解同步階段,請參閱<a href="https://www.youtube.com/watch?v=VzYkVL1n4M8&index=24&list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu">設定檔 GPU 轉譯</a>影片。 + + </li> + </ul> + </li> + + <li>ISSUE_DRAW_COMMANDS_START + <ul> + <li>硬體轉譯器開始對 GPU 發出繪製命令的時間。 + </li> + + <li>這個值與 FRAME_COMPLETED 之間的時間大約就是應用程式產生的 GPU 工作量。 +太過度繪製或無效轉譯效果之類的問題都會顯示於此。 + + </li> + </ul> + </li> + + <li>SWAP_BUFFERS + <ul> + <li>相對於無趣的平台工作以外,呼叫 eglSwapBuffers 的時間。 + + </li> + </ul> + </li> + + <li>FRAME_COMPLETED + <ul> + <li>全部完成!花費在處理這個畫面的總時間,計算方法是 FRAME_COMPLETED - INTENDED_VSYNC。 + + </li> + </ul> + </li> + +</ul> + +<p> + 您能以不同的方式使用這項資料。顯示不同延遲貯體中畫面時間分布的長條圖就是一種簡單但實用的方式,請見下圖。 + +本圖可一目瞭然地告訴我們,大部分畫面都低於 16ms 的上限 (紅色除外),但只有幾個畫面明顯超過上限。 + +我們可以查看此長條圖一段時間的變化,觀察出現的大規模位移或產生新的極端值。 +您也能根據資料中的許多時間戳記將輸入延遲、花費在版面配置的時間或其他類似的有趣度量指標繪成圖表。 + + +</p> + +<img src="{@docRoot}preview/images/perf-test-framestats.png"> + + +<h3 id="timing-dump">簡易畫面計時傾印</h3> + +<p> + 如果 [開發人員選項] 中的 [設定檔 GPU 轉譯]<strong></strong> 設定為 [In adb shell dumpsys gfxinfo]<strong></strong> +,<code>adb shell dumpsys gfxinfo</code> 命令會印出最近 120 個畫面的計時資訊,以定位鍵分隔值分成數個不同類別。 + +這項資料非常適合用來指出可能是繪製管道的哪個部分太慢。 + +</p> + +<p> + 類似於上述的 <a href="#fs-data-format">framestats</a>,可以直接將它貼到選擇的試算表工具,或使用指令碼來收集和剖析。 + +下圖顯示許多由應用程式產生的畫面花費時間的分類細項。 + +</p> + +<img src="{@docRoot}preview/images/perf-test-frame-latency.png"> + +<p> + 執行 gfxinfo、複製輸出、將輸出貼入試算表應用程式,然後將資料繪製成堆疊長條圖的結果。 + +</p> + +<p> + 每個直條都代表動畫的一個畫面,其高度代表計算該畫面所花費的毫秒數。 +長條的每個色塊都代表轉譯管道的不同階段,好讓您看出應用程式的哪部分可能產生瓶頸。 + +如需瞭解繪製管道以及如何最佳化的詳細資訊,請參閱硬體加速或<a href="https://www.youtube.com/watch?v=we6poP0kw6E&index=27&list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE">無效判定、版面配置及效能</a>影片。 + + +</p> + + +<h3 id="collection-window">控制統計資料收集時間</h3> + +<p> + framestats 與簡單的畫面計時都會收集極短時間內的資料 – 轉譯約需兩秒。 +為了精確控制這段時間,例如只限特定動畫的資料,您可以重設所有計數器,然後彙總收集的統計資料。 + + +</p> + +<pre> +>adb shell dumpsys gfxinfo <PACKAGE_NAME> reset +</pre> + +<p> + 這也能和傾印命令本身結合使用,定期收集和重設,持續擷取兩秒時間內的畫面。 + + +</p> + + +<h3 id="diagnose">診斷效能回復</h3> + +<p> + 識別回復是追蹤問題和維護應用程式健康情況的第一步。 +不過,dumpsys 只能識別有問題存在與相關的嚴重性。 +您仍需要診斷造成效能問題的特定原因,以及找出適當的修正方式。 +因此,強烈建議您使用 <a href="{@docRoot}tools/help/systrace.html">systrace</a> 工具。 + +</p> + + +<h3 id="resources">其他資源</h3> + +<p> + 如需 Android 的轉譯管道如何運作、常見問題以及如何修正的詳細資訊,下列的一些資訊可能會很實用: + + +</p> + +<ul> + <li>轉譯效能 101 + </li> + <li>為什麼 60fps? + </li> + <li>Android UI 和 GPU + </li> + <li>無效判定、版面配置及效能 + </li> + <li>利用 Systrace 分析 UI 效能 + </li> +</ul> + + +<h2 id="automate">自動化 UI 效能測試</h2> + +<p> + UI 效能測試的方法之一就是讓測試人員對目標應用程式執行一組使用者操作,並以肉眼查看,或花費很長一段時間使用工具導向的方法,尋找閃避現象。 + +但這種靠人工的方式充滿危險,人類對畫面率變化的感知能力因人而異,而且這種方法也很費時、繁瑣且容易出錯。 + + +</p> + +<p> + 較有效率的方法是從自動化的 UI 測試中記錄和分析重要效能度量指標。 +Android M 開發人員預覽版包含新的記錄功能,能夠輕鬆判斷應用程式動畫中閃避現象的數量與嚴重程度,還能用來建置嚴謹的程序,判斷目前的效能並追蹤未來的效能目標。 + + + +</p> + +<p> + 本文會逐步說明建議用來使用資料以自動化效能測試的方法。 + +</p> + +<p> + 這種方法大多分成兩個主要動作。首先,識別您要測試的項目,以及測試的方法。其次是設定和維護自動化測試環境。 + + +</p> + + +<h3 id="ui-tests">設定 UI 測試</h3> + +<p> + 在您開始進行自動化測試之前,務必要決定幾個高階決策,才能適當瞭解您的測試空間與可能會有的需求。 + +</p> + +<h4> + 識別要測試的主要動畫 / 流程 +</h4> + +<p> + 請記住,流暢的動畫有所中斷時,就是使用者最容易看見效能低落的時候。 +因此,識別要測試哪種類型的 UI 動作時,最好著重在使用者最常看見或對他們的體驗最重要的主要動畫。 + +例如,以下是一些可能有利於識別的常見情況: +</p> + +<ul> + <li>捲動主要的 ListView 或 RecyclerView + </li> + + <li>非同步等待週期內的動畫 + </li> + + <li>當中會載入 / 操縱點陣圖的任何動畫 + </li> + + <li>包含 Alpha 透明混色的動畫 + </li> + + <li>使用畫布繪製的自訂檢視 + </li> +</ul> + +<p> + 和您團隊的工程人員、設計師及產品經理合作,優先考慮將這些主要產品動畫放入測試涵蓋範圍內。 + +</p> + +<h4> + 定義未來目標並予以追蹤 +</h4> + +<p> + 從高階觀點來看,重要的是識別特定的效能目標,並著重在撰寫測試及收集相關資料。 +例如: +</p> + +<ul> + <li>您是否只想初次開始追蹤 UI 效能以深入瞭解? + </li> + + <li>您是否想要避免可能在未來導入的回復? + </li> + + <li>今日有 90% 的順暢畫面並想要在本季達到 98%? + </li> + + <li>今日有 98% 的順暢畫面且不想要回復? + </li> + + <li>您的目標是改善低階裝置上的效能嗎? + </li> +</ul> + +<p> + 在上述的這些情況中,您會想要有歷史追蹤功能,來顯示不同應用程式版本間的效能。 + +</p> + +<h4> + 識別測試要用的裝置 +</h4> + +<p> + 應用程式效能會因其執行所在裝置而異。有些裝置包含的記憶體較少、GPU 較不強大或 CPU 晶片速度較慢。 +這表示可在某組硬體上執行良好的動畫,在其他組合上不一定能執行良好,更糟的是可能會在管道的不同部分產生瓶頸。 + +使用者所見可能會不同,為將這點列入考量,請挑選涵蓋當前高階裝置、低階裝置、平板電腦等的一系列裝置執行測試。 + +尋找 CPU 效能、RAM、畫面密度、大小等方面的變化。 +高階裝置上通過的測試,在低階裝置上可能會失敗。 + +</p> + +<h4> + UI 測試的基本架構 +</h4> + +<p> + 工具套件 (例如 <a href="{@docRoot}training/testing/ui-testing/uiautomator-testing.html">UI Automator</a> 和 <a href="{@docRoot}training/testing/ui-testing/espresso-testing.html">Espresso</a>) 是為協助將使用者在您的應用程式四處移動的動作自動化而建置。 + +這些都是模擬使用者與裝置互動的簡單架構。 +如要使用這些架構,您要有效地建立會逐一執行一組使用者動作的獨特指令碼,然後在裝置上自行播放。 + + +</p> + +<p> + 連同 <code>dumpsys gfxinfo</code>,再結合這些自動化測試,您可快速建立可重現系統,讓您執行測試並測量該特定情況下的效能資訊。 + + +</p> + + +<h3 id="automated-tests">設定自動化 UI 測試</h3> + +<p> + 在您能夠執行 UI 測試,還有可從單一測試收集資料的管道後,下一個重要步驟是利用可多次執行該項測試的架構,然後彙總產生的效能資料,以供您的開發團隊進一步分析。 + + + +</p> + +<h4> + 測試自動化的架構 +</h4> + +<p> + 直接在目標裝置/模擬器上執行的 UI 測試架構 (例如 <a href="{@docRoot}training/testing/ui-testing/uiautomator-testing.html">UI Automator</a>) 毫無價值。 +因為效能收集資訊是由主控機器透過 ADB 傳送命令驅動 <em>dumpsys gfxinfo</em> 來完成。 +<a href="{@docRoot}tools/help/monkeyrunner_concepts.html">MonkeyRunner</a> 架構是為了協助橋接這些個別實體開發。在主控機器上執行的指令碼處理系統可對一組連接的裝置發出命令,也能接收來自這些裝置的資料。 + + + +</p> + +<p> + 建置一組指令碼以適當自動化 UI 效能測試,至少應能利用 monkeyRunner 來完成下列工作: + +</p> + +<ul> + <li>對目標裝置或模擬器載入和啟動所需的 APK。 + </li> + + <li>啟動並允許執行 UI Automator UI 測試 + </li> + + <li>透過 dumpsys gfxinfo 收集效能資訊。<em></em><em></em> + </li> + + <li>彙總資訊並以對開發人員有用的方式顯示。 + </li> +</ul> + + +<h3 id="triage">分類和修正觀察到的問題</h3> + +<p> + 在辨識出問題模式與回復之後,下一個步驟是辨識和套用修正。 +如果您的自動化測試架構會為畫面保留精確的計時分類細項,可幫助您詳細審察目前可疑的程式碼/版面配置變化 (在回復的情況下),或在您切換為靠人工探究時縮小要分析的系統部分。 + + +如需靠人工探究時,<a href="{@docRoot}tools/help/systrace.html">systrace</a> 是開始進行的好地方,顯示轉譯管道各階段、系統中每個執行緒與核心,還有您所定義任何自訂事件標記的精確計時資訊。 + + +</p> + +<h4> + 適當分析暫時的計時 +</h4> + +<p> + 請務必注意,從轉譯效能中取得和測量計時的困難度。 +這些數字不具決定性且通常受系統狀態、可用記憶體數目、溫度調節,還有上次太陽閃焰何時衝擊您所在地區影響。 + +重點是您執行相同的測試兩次,而每次得到的數字都有些微不同,數字很接近但不會完全相同。 + + +</p> + +<p> + 以這種方式適當收集和分析資料,表示執行相同的測試多次,並累積結果取平均值或中間值。(為了簡單起見,我們稱之為「批次」) 這可讓您粗略計算測試的效能,而不需要精確的計時。 + + + +</p> + +<p> + 在變更的程式碼之間使用批次,可看出那些變更對效能的影響。 +如果前次變更批次的平均畫面率大於後來變更批次,您通常會有那項特定變更的整體 win wrt 效能。 + + +</p> + +<p> + 這表示您執行的任何自動化 UI 測試都應將此概念列入考量,同時考量可能會在測試期間發生的任何異常情況。 +例如,您的應用程式效能若因為某些裝置問題而突然下降 (並非由您的應用程式引起),您可能會想要重新執行批次,以讓取得的計時較不混亂。 + + + +</p> + +<p> + 應該執行多少次測試才能獲得有意義的測量結果呢?最少應執行 10 次,若執行更多次 (像是 50 或 100 次) 可以產生更準確的結果 (當然您現在是以時間換取準確度)。 + + +</p> diff --git a/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/index.jd b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/index.jd new file mode 100644 index 0000000..4225184 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/index.jd @@ -0,0 +1,72 @@ +page.title=管理應用行為顯示生命週期 +page.tags=應用行為顯示生命週期 +helpoutsWidget=true + +trainingnavtop=true +startpage=true + +@jd:body + +<div id="tb-wrapper"> +<div id="tb"> + + +<h2>相依性和先決條件</h2> +<ul> + <li>如何建立 Android 專案 (請參閱<a href="{@docRoot}training/basics/firstapp/creating-project.html">建立 Android +專案</a>)</li> +</ul> + + +<h2>您也應該閱讀</h2> +<ul> + <li><a href="{@docRoot}guide/components/activities.html">應用行為顯示</a></li> +</ul> + + +<h2>試試看</h2> + +<div class="download-box"> + <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">下載示範</a> + <p class="filename">ActivityLifecycle.zip</p> +</div> + +</div> +</div> + +<p>使用者在應用程式內部、由內到外、由外到內執行導覽時,應用程式中的 {@link android.app.Activity} 執行個體會在生命週期的不同狀態之間進行轉換。 + +例如,在您的應用行為顯示首次啟動時,會進入系統的前景,並成為使用者的焦點。 + +在此過程中,Android 系統會針對設定使用者介面與其他元件所在的應用行為顯示,呼叫一系列生命週期方法。 +若使用者執行的行為會啟動其他應用行為顯示或切換至其他應用程式,系統會在您的應用行為顯示進入背景 (在此處應用行為顯示將不再可見,但執行個體及其狀態保持不變) 時,針對該應用行為顯示呼叫另一組生命週期方法。 + + +</p> + +<p>在生命週期回呼方法內,您可以宣告在使用者離開並重新進入應用行為顯示時,應用行為顯示採用的行為。 +例如,若您建置串流影片播放器,可能會在使用者切換至其他應用程式時暫停影片播放,並終止網路連線。在使用者返回時,您可以重新連接至網路,讓使用者從先前暫停的位置繼續播放影片。 + + +</p> + +<p>本課程將說明每個 {@link +android.app.Activity} 執行個體都會接收的生命週期重要回呼方法,並說明如何使用這些方法,以便應用行為顯示的運作能符合使用者的預期,而且在應用行為顯示不需要系統資源時不耗用系統資源。 +</p> + +<h2>課程</h2> + +<dl> + <dt><b><a href="starting.html">啟動應用行為顯示</a></b></dt> + <dd>了解應用行為顯示生命週期的有關基本概念、使用者啟動應用程式的方式,以及建立基本應用行為顯示的執行方式。 +</dd> + <dt><b><a href="pausing.html">暫停並繼續應用行為顯示</a></b></dt> + <dd>了解應用行為顯示暫停 (遭部分遮蓋) 與繼續時的狀況,以及在這些狀態變更期間應執行的操作。 +</dd> + <dt><b><a href="stopping.html">停止並重新啟動應用行為顯示</a></b></dt> + <dd>了解在使用者完全離開應用行為顯示與返回應用行為顯示時的狀況。</dd> + <dt><b><a href="recreating.html">重新建立應用行為顯示</a></b></dt> + <dd>了解在應用行為顯示遭終結時的狀況,以及如何在需要時重新建置應用行為顯示狀態。 +</dd> +</dl> + diff --git a/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/pausing.jd b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/pausing.jd new file mode 100644 index 0000000..8c0843d --- /dev/null +++ b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/pausing.jd @@ -0,0 +1,147 @@ +page.title=暫停並繼續應用行為顯示 +page.tags=應用行為顯示生命週期 +helpoutsWidget=true + +trainingnavtop=true + +@jd:body + +<div id="tb-wrapper"> + <div id="tb"> + + <h2>本課程示範</h2> + <ol> + <li><a href="#Pause">暫停您的應用行為顯示</a></li> + <li><a href="#Resume">繼續您的應用行為顯示</a></li> + </ol> + + <h2>您也應該閱讀</h2> + <ul> + <li><a href="{@docRoot}guide/components/activities.html">應用行為顯示</a> + </li> + </ul> + +<h2>試試看</h2> + +<div class="download-box"> + <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">下載示範</a> + <p class="filename">ActivityLifecycle.zip</p> +</div> + + </div> +</div> + +<p>在應用程式正常使用期間,有時前景應用行為顯示會受到其他視覺元件的遮蓋,導致該應用行為顯示<em>暫停</em>。 +例如,若開啟半透明的應用行為顯示 (諸如採用對話方塊風格的應用行為顯示),前一個應用行為顯示會暫停。 +只要應用行為顯示仍部分可見,但目前並非焦點,就會保持暫停狀態。 +</p> + +<p>但是,若應用行為顯示完全遭遮蓋且不可見,則會<em>停止</em> (下一課將對此進行討論)。 +</p> + +<p>在您的應用行為顯示進入暫停狀態時,系統會針對您的 {@link android.app.Activity} 呼叫 {@link +android.app.Activity#onPause onPause()} 方法,您可藉此停止在暫停時不應繼續的進行中行為 (例如影片),或保留使用者持續離開您的應用程式時應永久儲存的資訊。若使用者從暫停狀態返回至您的應用行為顯示,系統會繼續執行該應用行為顯示,並呼叫 {@link android.app.Activity#onResume onResume()} 方法。 + + + +</p> + +<p class="note"><strong>注意:</strong>若您的應用行為顯示收到對 {@link +android.app.Activity#onPause()} 的呼叫,可能表示該應用行為顯示將暫停片刻,隨後使用者會將焦點重新移到您的應用行為顯示上。 +但是,這通常首先表示使用者離開您的應用行為顯示。 +</p> + +<img src="{@docRoot}images/training/basics/basic-lifecycle-paused.png" /> +<p class="img-caption"><strong>圖 1.</strong>若半透明的應用行為顯示遮蓋您的應用行為顯示,系統會呼叫 {@link android.app.Activity#onPause onPause()},您的應用行為顯示會進行等候 (狀態為「已暫停」) (1)。 + +若使用者在應用行為顯示仍處於暫停狀態時返回至應用行為顯示,系統將呼叫 {@link android.app.Activity#onResume onResume()} (2)。 +</p> + + +<h2 id="Pause">暫停您的應用行為顯示</h2> + +<p>若系統為您的應用行為顯示呼叫 {@link android.app.Activity#onPause()},嚴格來說意味著您的應用行為顯示仍是部分可見,但多數情況下表示使用者離開應用行為顯示,該應用行為顯示很快將進入「已停止」狀態。 + +通常,您應使用 {@link android.app.Activity#onPause()} 回呼執行以下操作: +</p> + +<ul> + <li>停止動畫或會耗用 CPU 資源的其他進行中行為。</li> + <li>認可未儲存的變更,但是只有在使用者希望離開時永久儲存此類變更 (例如電子郵件草稿) 的情況下才執行此操作。 +</li> + <li>釋放系統資源,例如廣播接收器、感應器 (如 GPS) 的控點,或釋放在您的應用行為顯示暫停時可能影響電池使用壽命 (且使用者不再需要) 的資源。 + +</li> +</ul> + +<p>例如,若您的應用程式使用 {@link android.hardware.Camera},則使用 {@link android.app.Activity#onPause()} 方法可以良好地將其釋放。 +</p> + +<pre> +@Override +public void onPause() { + super.onPause(); // Always call the superclass method first + + // Release the Camera because we don't need it when paused + // and other activities might need to use it. + if (mCamera != null) { + mCamera.release() + mCamera = null; + } +} +</pre> + +<p>一般而言,您<strong>不</strong>應使用 {@link android.app.Activity#onPause()} 將使用者變更 (例如表單中輸入的個人資訊) 儲存至永久儲存空間。 +只有在您確信使用者希望自動儲存變更 (例如在起草電子郵件的情況下) 時,才應將使用者變更保留在 {@link android.app.Activity#onPause()} 中的永久儲存空間內。但是在 {@link +android.app.Activity#onPause()} 期間,您應避免執行耗用大量 CPU 資源的工作 (例如寫入至資料庫),因為這會降低向下一個應用行為顯示進行視覺轉換的速度 (您應改為在 {@link android.app.Activity#onStop onStop()} 期間執行高負荷的關機作業)。 + + + + +</p> + +<p>對於使用 {@link android.app.Activity#onPause +onPause()} 方法執行的作業,應保持相對簡單,以便在您的應用行為顯示實際正在停止的情況下,實現向使用者下一個目標的快速轉換。 +</p> + +<p class="note"><strong>注意:</strong>您的應用行為顯示暫停後,{@link +android.app.Activity} 執行個體將保留在記憶體中,應用行為顯示繼續時將重新呼叫該執行個體。您無需重新初始化在使用回呼方法 (導致產生「已繼續」狀態) 期間建立的元件。 + +</p> + + + +<h2 id="Resume">繼續您的應用行為顯示</h2> + +<p>若使用者從「已暫停」狀態繼續執行您的應用行為顯示,系統會呼叫 {@link +android.app.Activity#onResume()} 方法。</p> + +<p>請注意,每次您的應用行為顯示進入前景時 (包括第一次建立該應用行為顯示時),系統都會呼叫此方法。 +因此,您應實作 {@link +android.app.Activity#onResume()},以初始化您在 {@link +android.app.Activity#onPause()} 期間釋放的元件,並執行每次應用行為顯示進入「已繼續」狀態時必須進行的其他初始化 (例如開始播放動畫,以及對只有在應用行為顯示具有使用者焦點時才使用的元件進行初始化)。 + +</p> + +<p>以下 {@link android.app.Activity#onResume()} 範例是上述 {@link android.app.Activity#onPause()} 範例的對應,會針對應用行為顯示暫停時釋放的相機執行初始化。 + +</p> + +<pre> +@Override +public void onResume() { + super.onResume(); // Always call the superclass method first + + // Get the Camera instance as the activity achieves full user focus + if (mCamera == null) { + initializeCamera(); // Local method to handle camera init + } +} +</pre> + + + + + + + diff --git a/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/recreating.jd b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/recreating.jd new file mode 100644 index 0000000..4b0efda --- /dev/null +++ b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/recreating.jd @@ -0,0 +1,178 @@ +page.title=重新建立應用行為顯示 +page.tags=應用行為顯示生命週期 +helpoutsWidget=true + +trainingnavtop=true + +@jd:body + +<div id="tb-wrapper"> + <div id="tb"> + + <h2>本課程示範</h2> + <ol> + <li><a href="#SaveState">儲存您的應用行為顯示狀態</a></li> + <li><a href="#RestoreState">還原您的應用行為顯示狀態</a></li> + </ol> + + <h2>您也應該閱讀</h2> + <ul> + <li><a href="{@docRoot}training/basics/supporting-devices/screens.html">支援不同的螢幕</a> +</li> + <li><a href="{@docRoot}guide/topics/resources/runtime-changes.html">處理執行階段變更</a></li> + <li><a href="{@docRoot}guide/components/activities.html">應用行為顯示</a> + </li> + </ul> + + </div> +</div> + +<p>在某些情況下,您的應用行為顯示會因應用程式的正常行為 (例如使用者按下 <em>[返回]</em>按鈕) 而遭終結,或您的應用行為顯示透過呼叫 {@link android.app.Activity#finish()} 來示意自身發生毀損。 + +此外,在您的應用行為顯示目前已停止並且已長時間未使用時,或者在系統因前景應用行為顯示需要更多資源而必須關閉背景程序以復原記憶體時,系統可能會終結您的應用行為顯示。 + +</p> + +<p>若您的應用行為顯示因使用者按下 <em>[返回]</em>按鈕而遭終結,或應用行為顯示將自身終止,則系統中該 {@link android.app.Activity} 執行個體的概念將永遠無法實現,因為該行為表示不再需要此應用行為顯示。 + +但是,若系統因系統限制 (而非因應用程式正常行為) 而終結應用行為顯示,則雖然實際的 {@link android.app.Activity} 執行個體不會執行,但系統會記住該執行個體曾經存在,因此若使用者重新導覽至該應用行為顯示,系統會使用對應用行為顯示遭終結時的狀態進行描述的一組已儲存資料,建立該應用行為顯示的新執行個體。 + + + +系統用於還原先前狀態的已儲存資料稱為「執行個體狀態」,是 {@link android.os.Bundle} 物件中所儲存索引鍵值配對的集合。 + +</p> + +<p class="caution"><strong>注意:</strong>使用者每次旋轉螢幕時,都會終結並重新建立您的應用行為顯示。 +螢幕變更方向時,系統會終結並重新建立前景應用行為顯示,因為螢幕組態已變更,您的應用行為顯示可能需要載入替代資源 (例如版面配置)。 + +</p> + +<p>依預設,系統會使用 {@link android.os.Bundle} 執行個體狀態將每個 {@link android.view.View} 物件的有關資訊 (例如輸入至 {@link android.widget.EditText} 物件中的文字值) 儲存至您的應用行為顯示版面配置中。 + +因此,若終結並重新建立您的應用行為顯示執行個體,會將版面配置的狀態還原為其先前的狀態,您無需輸入任何程式碼。 + +但是,您可能希望還原更多的應用行為顯示狀態資訊,例如成員變數 (可追蹤應用行為顯示中使用者的進度)。 + +</p> + +<p class="note"><strong>注意:</strong>若要讓 Android 系統還原應用行為顯示中檢視的狀態, +<strong>每個檢視都必須具有唯一的 ID</strong> (由 <a href="{@docRoot}reference/android/view/View.html#attr_android:id">{@code +android:id}</a> 屬性提供)。 +</p> + +<p>若要儲存有關應用行為顯示狀態的其他資料,您必須覆寫 {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} 回呼方法。系統會在使用者離開您的應用行為顯示時呼叫此方法,並向其傳遞 {@link android.os.Bundle} 物件 (在您的應用行為顯示遭到非預期終結時將儲存該物件)。 + + + +若系統必須稍後重新建立應用行為顯示執行個體,會將同一 {@link +android.os.Bundle} 物件傳遞至 {@link android.app.Activity#onRestoreInstanceState +onRestoreInstanceState()} 與 {@link android.app.Activity#onCreate onCreate()} 方法。 + +</p> + +<img src="{@docRoot}images/training/basics/basic-lifecycle-savestate.png" /> +<p class="img-caption"><strong>圖 2.</strong>系統開始停止您的應用行為顯示時,會呼叫 {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} (1),因此您可以指定在必須重新建立 {@link android.app.Activity} 執行個體時希望儲存的其他狀態資料。若已終結應用行為顯示,且必須重新建立該執行個體,系統會將 (1) 中定義的狀態資料傳遞至 {@link android.app.Activity#onCreate onCreate()} 方法 (2) 與 {@link android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} 方法 (3)。 + + + + + + +</p> + + + +<h2 id="SaveState">儲存您的應用行為顯示狀態</h2> + +<p>在您的應用行為顯示開始停止時,系統會呼叫 {@link android.app.Activity#onSaveInstanceState +onSaveInstanceState()},因此您的應用行為顯示可將狀態資訊與索引鍵值配對的集合一併儲存。 +此方法的預設實作會儲存應用行為顯示的檢視層次狀態相關資訊 (例如 {@link android.widget.EditText} 小工具中的文字或 {@link android.widget.ListView} 的捲動位置)。 + +</p> + +<p>若要儲存應用行為顯示的其他狀態資訊,您必須實作 {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()},並將索引鍵值配對新增至 {@link android.os.Bundle} 物件。 + +例如:</p> + +<pre> +static final String STATE_SCORE = "playerScore"; +static final String STATE_LEVEL = "playerLevel"; +... + +@Override +public void onSaveInstanceState(Bundle savedInstanceState) { + // Save the user's current game state + savedInstanceState.putInt(STATE_SCORE, mCurrentScore); + savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel); + + // Always call the superclass so it can save the view hierarchy state + super.onSaveInstanceState(savedInstanceState); +} +</pre> + +<p class="caution"><strong>注意:</strong>請始終呼叫 {@link +android.app.Activity#onSaveInstanceState onSaveInstanceState()} 的超級類別實作,以便預設實作可儲存檢視階層的狀態。 +</p> + + + +<h2 id="RestoreState">還原您的應用行為顯示狀態</h2> + +<p>在重新建立先前終結的應用行為顯示時,您可以從 {@link android.os.Bundle} 復原系統向您的應用行為顯示傳遞的已儲存狀態。 + +{@link android.app.Activity#onCreate onCreate()} 與 {@link +android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} 回呼方法會接收同一 {@link android.os.Bundle} (包含執行個體狀態資訊)。 +</p> + +<p>由於不論系統是建立應用行為顯示的新執行個體,還是重新建立先前的執行個體,都會呼叫 {@link android.app.Activity#onCreate onCreate()} 方法,因此您必須先檢查狀態 {@link android.os.Bundle} 是否為 null,然後再嘗試對其進行讀取。 + +若其為 null,表示系統正在建立應用行為顯示的新執行個體,否則表示正在還原先前已終結的執行個體。 + +</p> + +<p>例如,以下為您展示了如何在 {@link android.app.Activity#onCreate +onCreate()} 中還原某些狀態資料:</p> + +<pre> +@Override +protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); // Always call the superclass first + + // Check whether we're recreating a previously destroyed instance + if (savedInstanceState != null) { + // Restore value of members from saved state + mCurrentScore = savedInstanceState.getInt(STATE_SCORE); + mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL); + } else { + // Probably initialize members with default values for a new instance + } + ... +} +</pre> + +<p>您可以選擇並非在 {@link android.app.Activity#onCreate onCreate()} 期間還原狀態,而是實作 {@link +android.app.Activity#onRestoreInstanceState onRestoreInstanceState()},系統會在呼叫 {@link android.app.Activity#onStart()} 方法後呼叫該項目。 + +只有存在要還原的已儲存狀態時,系統才會呼叫 {@link +android.app.Activity#onRestoreInstanceState onRestoreInstanceState()},因此您無需檢查 {@link android.os.Bundle} 是否為 null: +</p> + +<pre> +public void onRestoreInstanceState(Bundle savedInstanceState) { + // Always call the superclass so it can restore the view hierarchy + super.onRestoreInstanceState(savedInstanceState); + + // Restore state members from saved instance + mCurrentScore = savedInstanceState.getInt(STATE_SCORE); + mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL); +} +</pre> + +<p class="caution"><strong>注意:</strong>請始終呼叫 {@link +android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} 的超級類別實作,以便預設實作可還原檢視階層的狀態。 +</p> + +<p>若要詳細了解因執行階段中的重新啟動事件 (例如在旋轉螢幕時) 而重新建立應用行為顯示,請閱讀<a href="{@docRoot}guide/topics/resources/runtime-changes.html">處理執行階段變更</a>。 +</p> + diff --git a/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/starting.jd b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/starting.jd new file mode 100644 index 0000000..3453ac5 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/starting.jd @@ -0,0 +1,285 @@ +page.title=啟動應用行為顯示 +page.tags=應用行為顯示的生命週期 +helpoutsWidget=true + +trainingnavtop=true + +@jd:body + + +<div id="tb-wrapper"> + <div id="tb"> + + <h2>本課程示範</h2> +<ol> + <li><a href="#lifecycle-states">了解生命週期回呼</a></li> + <li><a href="#launching-activity">指定您應用程式的啟動器應用行為顯示</a></li> + <li><a href="#Create">建立新執行個體</a></li> + <li><a href="#Destroy">終結應用行為顯示</a></li> +</ol> + + <h2>您也應該閱讀</h2> + <ul> + <li><a href="{@docRoot}guide/components/activities.html">應用行為顯示</a></li> + </ul> + +<h2>試試看</h2> + +<div class="download-box"> + <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">下載示範</a> + <p class="filename">ActivityLifecycle.zip</p> +</div> + + </div> +</div> + +<p>在其他程式設計範例中,使用 {@code main()} 方法啟動應用程式,而 Android 系統與此不同,透過呼叫與 {@link android.app.Activity} 執行個體生命週期的特定階段相對應的特定回呼方法,在該執行個體中啟動程式碼。 + + +可以採用一系列回呼方法啟動應用行為顯示,也可以採用一系列回呼方法終結應用行為顯示。 +</p> + +<p>本課程將概述最重要的生命週期方法,並為您展示如何處理第一個生命週期回呼 (該回呼會建立應用行為顯示的新執行個體)。 +</p> + + + +<h2 id="lifecycle-states">了解生命週期回呼</h2> + +<p>在應用行為顯示的生命週期內,系統會以類似於階梯金字塔的順序,呼叫一組核心生命週期方法。 +換言之,應用行為顯示生命週期的每個階段都是金字塔上的一個台階。 +在系統建立新應用行為顯示執行個體時,每個回呼方法都會將應用行為顯示狀態向頂部移動一個台階。 +在金字塔的頂部,應用行為顯示將在前景中執行,使用者可以與應用行為顯示互動。 +</p> + +<p>在使用者開始離開應用行為顯示時,系統會呼叫可將應用行為顯示狀態沿金字塔下移的其他方法,以終結應用行為顯示。 +在某些狀況下,應用行為顯示會沿金字塔僅移動部分台階,然後開始等候 (例如若使用者切換至其他應用程式),應用行為顯示可以由此移回頂部 (若使用者返回該應用行為顯示),並在使用者先前停止的位置繼續。 + + +</p> + + +<img src="{@docRoot}images/training/basics/basic-lifecycle.png" /> +<p class="img-caption"><strong>圖 1.</strong>應用行為顯示生命週期的簡化圖例 (以階梯金字塔表示)。 +此圖例顯示,對於讓應用行為顯示向頂部的「已繼續」狀態邁上一個台階所用的每個回呼,都存在可讓應用行為顯示下移的回呼方法。 + +應用行為顯示也可以從「已暫停」及「已停止」狀態返回至「已繼續」狀態。 +</p> + + +<p>視應用行為顯示的複雜程度而定,您可能不需要實作所有生命週期方法。 +但是,請務必了解每個生命週期方法,並實作能確保您的應用程式以使用者預期方式運作的生命週期方法。 +正確實作應用行為顯示生命週期方法可確保您的應用程式以多種方式良好運作,包括: +</p> +<ul> + <li>使用您的應用程式時,若使用者接電話或切換至其他應用程式,不會發生當機。 +</li> + <li>使用者未主動使用時,不會耗用寶貴的系統資源。 +</li> + <li>若使用者離開您的應用程式並在稍後返回,使用者的進度不會遺失。 +</li> + <li>若螢幕方向在橫向與直向之間旋轉,不會發生當機或遺失使用者的進度。 +</li> +</ul> + +<!-- +<p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback +methods.</p> +<table> + <tr> + <th scope="col">Lifecycle State</th> + <th scope="col">Startup Method</th> + <th scope="col">Teardown Method</th> + </tr> + <tr> + <td>Created / Destroyed</td> + <td>{@link android.app.Activity#onCreate onCreate()}</td> + <td>{@link android.app.Activity#onDestroy()}</td> + </tr> + <tr> + <td>Started / Stopped</td> + <td>{@link android.app.Activity#onStart()}</td> + <td>{@link android.app.Activity#onStop()}</td> + </tr> + <tr> + <td>Resumed / Resumed</td> + <td>{@link android.app.Activity#onResume()}</td> + <td>{@link android.app.Activity#onPause()}</td> + </tr> +</table> +--> + +<p>在以下課程中您將了解到,某些情況下應用行為顯示會在不同的狀態之間進行轉換,如圖 1 所示。 +但是在這些狀態中,只有三種可以是靜態狀態。 +換言之,應用行為顯示長時間存在時,只能具備這三種狀態的其中之一: +</p> +<dl> + <dt>已繼續</dt> + <dd>若具備此狀態,應用行為顯示將位於前景中,使用者可以與應用行為顯示互動 (有時也稱為「執行中」狀態)。 +</dd> + <dt>已暫停</dt> + <dd>若具備此狀態,該應用行為顯示的一部分會遭其他應用行為顯示遮蓋,— +位於前景中的其他應用行為顯示處於半透明狀態,或未覆蓋整個螢幕。已暫停的應用行為顯示不會接收使用者輸入,也無法執行任何程式碼。 + + <dt>已停止</dt> + <dd>若具備此狀態,應用行為顯示將完全隱藏,使用者無法看到;會將該應用行為顯示視為位於背景中。 +停止後,會保留應用行為顯示執行個體及其所有狀態資訊 (例如成員變數),但其無法執行任何程式碼。 +</dd> +</dl> + +<p>其他狀態 (「已建立」與「已啟動」) 都是暫時狀態,系統透過呼叫下一個生命週期回呼方法,會從這些狀態快速移至下一個狀態。 +換言之,在系統呼叫 {@link android.app.Activity#onCreate onCreate()} 後,會快速呼叫 {@link +android.app.Activity#onStart()},然後快速呼叫 {@link +android.app.Activity#onResume()}。 +</p> + +<p>以上所述是應用行為顯示的基本生命週期。現在您將開始了解某些特定生命週期行為。 +</p> + + + +<h2 id="launching-activity">指定您應用程式的啟動器應用行為顯示</h2> + +<p>若使用者從主螢幕中選取您的應用程式圖示,系統會針對應用程式中您已宣告作為「啟動器」(或「主程式」) 應用行為顯示的 {@link android.app.Activity},呼叫 {@link +android.app.Activity#onCreate onCreate()} 方法。 +此應用行為顯示將作為您應用程式使用者介面的主要進入點。 +</p> + +<p>您可以定義 Android 宣示說明檔案 (即 <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">{@code AndroidManifest.xml}</a>,位於您專案目錄的根目錄中) 中用作主要應用行為顯示的應用行為顯示。 +</p> + +<p>必須在宣示說明中使用 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code +<intent-filter>}</a> (包括 {@link +android.content.Intent#ACTION_MAIN MAIN} 行為與 {@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} 類別) 宣告您應用程式的主要應用行為顯示。 +例如:</p> + +<pre> +<activity android:name=".MainActivity" android:label="@string/app_name"> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + <category android:name="android.intent.category.LAUNCHER" /> + </intent-filter> +</activity> +</pre> + +<p class="note"><strong>注意:</strong>使用 Android SDK 工具建立新 Android 專案時,預設專案檔案包括宣示說明中使用此篩選器宣告的 {@link android.app.Activity} 類別。 + +</p> + +<p>若未針對您的其中一項應用行為顯示宣告 {@link android.content.Intent#ACTION_MAIN MAIN} 行為或 {@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} 類別,您的應用程式圖示將不會顯示在主螢幕的應用程式清單中。 + +</p> + + + +<h2 id="Create">建立新執行個體</h2> + +<p>大多數應用程式都包括多項不同的應用行為顯示,使用者可以藉此執行不同的行為。不論應用行為顯示是使用者按一下應用程式圖示時建立的主要應用行為顯示,還是您的應用程式為回應使用者行為而啟動的其他應用行為顯示,系統都會呼叫 {@link android.app.Activity#onCreate onCreate()} 方法,以建立 {@link android.app.Activity} 的每個新執行個體。 + + + +</p> + +<p>您必須實作 {@link android.app.Activity#onCreate onCreate()} 方法以執行基本的應用程式啟動邏輯,在應用行為顯示的整個生命週期內,該操作應僅執行一次。 +例如,實作 {@link android.app.Activity#onCreate onCreate()} 將定義使用者介面,並且可能會啟動某些類別範圍的變數。 + +</p> + +<p>例如,以下 {@link android.app.Activity#onCreate onCreate()} 方法範例展示的一些程式碼將執行應用行為顯示的某些基礎設定,諸如宣告使用者介面 (在 XML 版面配置檔案中定義)、定義成員變數,以及設定 UI 的某些部分。 + + +</p> + +<pre> +TextView mTextView; // Member variable for text view in the layout + +@Override +public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Set the user interface layout for this Activity + // The layout file is defined in the project res/layout/main_activity.xml file + setContentView(R.layout.main_activity); + + // Initialize member TextView so we can manipulate it later + mTextView = (TextView) findViewById(R.id.text_message); + + // Make sure we're running on Honeycomb or higher to use ActionBar APIs + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + // For the main activity, make sure the app icon in the action bar + // does not behave as a button + ActionBar actionBar = getActionBar(); + actionBar.setHomeButtonEnabled(false); + } +} +</pre> + +<p class="caution"><strong>注意:</strong>僅在 Android 2.0 (API 層級為 5) 及更高版本中,可以透過此方式使用 {@link android.os.Build.VERSION#SDK_INT} 防止舊版系統執行新 API。 + +在舊版系統中,將發生執行階段例外狀況。</p> + +<p>{@link android.app.Activity#onCreate onCreate()} 執行完成後,系統會連續快速呼叫 {@link android.app.Activity#onStart()} 與 {@link android.app.Activity#onResume()} 方法。 + +您的應用行為顯示永遠不會具備「已建立」或「已啟動」狀態。嚴格來說,在呼叫 {@link android.app.Activity#onStart()} 時,使用者可以看到應用行為顯示,但隨後會快速呼叫 {@link android.app.Activity#onResume()},應用行為顯示將保持「已繼續」狀態,直到發生某些狀況 (例如接聽電話、使用者導覽至其他應用行為顯示,或裝置螢幕關閉) 變更該狀態為止。 + + + +</p> + +<p>在後續的其他課程中,您將了解在應用行為顯示的生命週期期間,其他啟動方法 ({@link +android.app.Activity#onStart()} 與 {@link android.app.Activity#onResume()}) 在用於從「已暫停」或「已停止」狀態繼續執行應用行為顯示時如何提供助益。 +</p> + +<p class="note"><strong>注意:</strong>{@link android.app.Activity#onCreate onCreate()} 方法包括稱為 <code>savedInstanceState</code> 的參數,在有關<a href="recreating.html">重新建立應用行為顯示</a>的後續課程中將討論該參數。 + +</p> + + +<img src="{@docRoot}images/training/basics/basic-lifecycle-create.png" /> +<p class="img-caption"><strong>圖 2.</strong>應用行為顯示生命週期結構的另一個圖例 (著重展示系統建立應用行為顯示的新執行個體時依次呼叫的三個主要回呼:{@link android.app.Activity#onCreate onCreate()}、{@link +android.app.Activity#onStart()} 及 {@link android.app.Activity#onResume()}。 + +完成這一系列的回呼後,應用行為顯示將具備「已繼續」狀態,此時使用者可以與應用行為顯示互動,直到使用者切換至其他應用行為顯示為止。 + +</p> + + + + + + + +<h2 id="Destroy">終結應用行為顯示</h2> + +<p>應用行為顯示的第一個生命週期回呼是 {@link android.app.Activity#onCreate +onCreate()},最後一個回呼是 {@link android.app.Activity#onDestroy}。系統針對您的應用行為顯示呼叫此方法作為最終訊號,表示正從系統記憶體中完全移除您的應用行為顯示執行個體。 + +</p> + +<p>大多數應用程式不需要實作此方法,因為區域類別參考與應用行為顯示一併終結,您的應用行為顯示應在 {@link +android.app.Activity#onPause} 與 {@link android.app.Activity#onStop} 期間執行大多數清理。 +但是,若您的應用行為顯示包括 {@link +android.app.Activity#onCreate onCreate()} 期間建立的背景執行緒,或包括其他長時間執行的資源 (若未正確關閉,可能會導致記憶體流失),您應在 {@link +android.app.Activity#onDestroy} 期間終止這些執行緒或資源。 + +</p> + +<pre> +@Override +public void onDestroy() { + super.onDestroy(); // Always call the superclass + + // Stop method tracing that the activity started during onCreate() + android.os.Debug.stopMethodTracing(); +} +</pre> + +<p class="note"><strong>注意:</strong>在所有情況下,系統會在已呼叫 {@link android.app.Activity#onPause} 與 {@link +android.app.Activity#onStop} 後呼叫 {@link android.app.Activity#onDestroy},但在 {@link android.app.Activity#onCreate onCreate()} 方法中呼叫 {@link +android.app.Activity#finish()} 的情況除外。 + +在某些情況下 (例如您應用行為顯示的執行目的在於臨時確定是否啟動其他應用行為顯示),您可能會從 {@link +android.app.Activity#onCreate onCreate()} 中呼叫 {@link android.app.Activity#finish()} 以終結應用行為顯示。 +若是如此,系統會立即呼叫 {@link android.app.Activity#onDestroy},而不會呼叫其他任何生命週期方法。 + +</p> diff --git a/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/stopping.jd b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/stopping.jd new file mode 100644 index 0000000..a2da5ca --- /dev/null +++ b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/stopping.jd @@ -0,0 +1,187 @@ +page.title=停止並重新啟動應用行為顯示 +page.tags=應用行為顯示生命週期 +helpoutsWidget=true + +trainingnavtop=true + +@jd:body + +<div id="tb-wrapper"> + <div id="tb"> + + <h2>本課程示範</h2> + <ol> + <li><a href="#Stop">停止您的應用行為顯示</a></li> + <li><a href="#Start">啟動/重新啟動您的應用行為顯示</a></li> + </ol> + + <h2>您也應該閱讀</h2> + <ul> + <li><a href="{@docRoot}guide/components/activities.html">應用行為顯示</a> + </li> + </ul> + +<h2>試試看</h2> + +<div class="download-box"> + <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">下載示範</a> + <p class="filename">ActivityLifecycle.zip</p> +</div> + + </div> +</div> + +<p>正確停止並重新啟動您的應用行為顯示是應用行為顯示生命週期內的重要程序,該程序可確保使用者感知您的應用程式在持續運作,而且不會遺失進度。在以下一些重要情況下,會停止並重新啟動您的應用行為顯示: + +</p> + +<ul> + <li>使用者開啟 [最近的應用程式] 視窗,並從您的應用程式切換至其他應用程式。在您的應用程式內,目前位於前景中的應用行為顯示將停止。 +若使用者從主螢幕啟動器圖示或 [最近的應用程式] 視窗返回至您的應用程式,應用行為顯示將重新啟動。 +</li> + <li>使用者在您的應用程式中執行啟動新應用行為顯示的行為。建立第二個應用行為顯示時,目前的應用行為顯示將停止。 +若使用者隨後按下 <em>[返回]</em> 按鈕,第一個應用行為顯示將重新啟動。 +</li> + <li>使用者在其電話上使用您的應用程式時,會接聽電話。</li> +</ul> + +<p>{@link android.app.Activity} 類別可提供兩種生命週期方法,即 {@link +android.app.Activity#onStop()} 與 {@link android.app.Activity#onRestart()},您可藉此明確處理如何停止並重新啟動您的應用行為顯示控點。 +處於暫停狀態時,會發生部分 UI 受阻的狀況,但停止狀態與此不同,可保證 UI 不再可見,使用者的焦點在於獨立的應用行為顯示 (或完全獨立的應用程式) 中。 + +</p> + +<p class="note"><strong>注意:</strong>由於在您的 {@link android.app.Activity} 執行個體停止時,系統會將其保留在系統記憶體中,因此您可能完全不需要實作 {@link android.app.Activity#onStop()} 與 {@link android.app.Activity#onRestart()} (甚至 {@link +android.app.Activity#onStart()}) 方法。 + +對於相對簡單的大多數應用行為顯示,應用行為顯示會正常停止並重新啟動,您可能只需要使用 {@link +android.app.Activity#onPause()} 暫停進行中的行為,並與系統資源中斷連線。 +</p> + +<img src="{@docRoot}images/training/basics/basic-lifecycle-stopped.png" /> +<p class="img-caption"><strong>圖 1.</strong>使用者離開您的應用行為顯示時,系統將呼叫 {@link android.app.Activity#onStop onStop()} 以停止應用行為顯示 (1)。 +若使用者在停止應用行為顯示時返回,系統將呼叫 {@link android.app.Activity#onRestart onRestart()} (2),然後快速呼叫 {@link android.app.Activity#onStart onStart()} (3) 與 {@link +android.app.Activity#onResume()} (4)。 + +請注意,不論何種狀況導致應用行為顯示停止,系統始終會先呼叫 {@link android.app.Activity#onPause onPause()},然後呼叫 {@link +android.app.Activity#onStop onStop()}。 +</p> + + + +<h2 id="Stop">停止您的應用行為顯示</h2> + +<p>您的應用行為顯示收到對 {@link android.app.Activity#onStop()} 方法的呼叫時,將不再可見,並會在使用者不使用時釋放不需要的幾乎所有資源。 + +在停止您的應用行為顯示後,若系統需要復原系統記憶體,可能會終結執行個體。 +在極少數狀況下,系統可能只會終止應用程式的程序,而不會呼叫應用行為顯示的最終 {@link android.app.Activity#onDestroy()} 回呼,因此請您務必使用 {@link android.app.Activity#onStop()} 釋放可能導致記憶體流失的資源。 + +</p> + +<p>雖然會先呼叫 {@link android.app.Activity#onPause onPause()} 方法,然後呼叫 {@link android.app.Activity#onStop()},但是您應使用 {@link android.app.Activity#onStop onStop()} 執行規模更大、耗用 CPU 資源更多的關閉作業,諸如將資訊寫入至資料庫。 + + +</p> + +<p>例如,以下範例展示了 {@link android.app.Activity#onStop onStop()} 的實作,該實作將註記草稿的內容儲存至永續性儲存體: +</p> + +<!-- TODO: Find a better example for onStop, because this kind of thing should probably use a +separate thread but that's too complicated to show here. --> +<pre> +@Override +protected void onStop() { + super.onStop(); // Always call the superclass method first + + // Save the note's current draft, because the activity is stopping + // and we want to be sure the current note progress isn't lost. + ContentValues values = new ContentValues(); + values.put(NotePad.Notes.COLUMN_NAME_NOTE, getCurrentNoteText()); + values.put(NotePad.Notes.COLUMN_NAME_TITLE, getCurrentNoteTitle()); + + getContentResolver().update( + mUri, // The URI for the note to update. + values, // The map of column names and new values to apply to them. + null, // No SELECT criteria are used. + null // No WHERE columns are used. + ); +} +</pre> + +<p>您的應用行為顯示停止後,{@link android.app.Activity} 物件將保留在記憶體中,應用行為顯示繼續時將重新呼叫該物件。 +您無需重新初始化在使用回呼方法 (導致產生「已繼續」狀態) 期間建立的元件。 +此外,系統還會追蹤版面配置中每個 {@link android.view.View} 的目前狀態,因此若使用者在 {@link android.widget.EditText} 小工具中輸入文字,將保留該內容,您無需對其執行儲存與還原。 + + +</p> + +<p class="note"><strong>注意:</strong>即使系統在您的應用行為顯示停止時將其終結,該應用行為顯示仍在 {@link android.os.Bundle} (索引鍵值配對的二進位大型物件) 中保留 {@link android.view.View} 物件 (例如 {@link +android.widget.EditText} 中的文字) 的狀態,若使用者重新導覽至應用行為顯示的同一執行個體,會還原這些物件 (<a href="recreating.html">下一課</a>將更詳細地討論在終結並重新建立您的應用行為顯示時使用 {@link android.os.Bundle} 儲存其他狀態資料)。 + + +</p> + + + +<h2 id="Start">啟動/重新啟動您的應用行為顯示</h2> + +<p>您的應用行為顯示從停止狀態回到前景中時,會收到對 {@link android.app.Activity#onRestart()} 的呼叫。 +此外,系統還會呼叫 {@link +android.app.Activity#onStart()} 方法,每次您的應用行為顯示變為可見時 (不論是重新啟動還是第一次建立),都會執行此操作。 +但是,只有在應用行為顯示從停止狀態繼續時,才會呼叫 {@link +android.app.Activity#onRestart()} 方法,因此,您可將其用於執行只有在先前停止但未終結應用行為顯示時才需要執行的特殊還原工作。 + +</p> + +<p>應用程式需要使用 {@link android.app.Activity#onRestart()} 來還原應用行為顯示狀態的狀況並不常見,因此針對適用於普通應用程式的這一方法,不存在任何指導方針。 + +但是,由於您的 {@link android.app.Activity#onStop()} 方法將基本上清除應用行為顯示的所有資源,因此在應用行為顯示重新啟動時,您需要重新啟動這些資源。 + +此外,在首次建立應用行為顯示時 (此時不存在既有的應用行為顯示執行個體),您也需要重新啟動這些資源。 +因此,您通常應使用 {@link android.app.Activity#onStart()} 回呼方法作為 {@link android.app.Activity#onStop()} 方法的對應,因為系統在建立您的應用行為顯示以及從停止狀態重新啟動應用行為顯示時,都會呼叫 {@link +android.app.Activity#onStart()}。 + + +</p> + +<p>例如,由於使用者可能離開應用程式很長時間後才回到應用程式,因此使用 {@link android.app.Activity#onStart()} 方法可以良好地驗證所需的系統功能是否已啟用: + +</p> + +<pre> +@Override +protected void onStart() { + super.onStart(); // Always call the superclass method first + + // The activity is either being restarted or started for the first time + // so this is where we should make sure that GPS is enabled + LocationManager locationManager = + (LocationManager) getSystemService(Context.LOCATION_SERVICE); + boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); + + if (!gpsEnabled) { + // Create a dialog here that requests the user to enable GPS, and use an intent + // with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action + // to take the user to the Settings screen to enable GPS when they click "OK" + } +} + +@Override +protected void onRestart() { + super.onRestart(); // Always call the superclass method first + + // Activity being restarted from stopped state +} +</pre> + + + + +<p>系統終結您的應用行為顯示時,會針對您的 {@link android.app.Activity} 呼叫 {@link android.app.Activity#onDestroy()} 方法。 +由於通常您應該已使用 {@link android.app.Activity#onStop()} 釋放大多數資源,因此在收到對 {@link +android.app.Activity#onDestroy()} 的呼叫之前,大多數應用程式幾乎都不需要執行操作。 +此方法將為您提供對可能導致記憶體流失的資源執行清理的最後機會,因此您應確保已終結其他執行緒,並確保已停止長時間執行的其他行為 (例如方法追蹤)。 + + +</p> + diff --git a/docs/html-intl/intl/zh-tw/training/basics/data-storage/databases.jd b/docs/html-intl/intl/zh-tw/training/basics/data-storage/databases.jd new file mode 100644 index 0000000..f3706f1 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/training/basics/data-storage/databases.jd @@ -0,0 +1,317 @@ +page.title=在 SQL 資料庫中儲存資料 +page.tags=資料儲存空間 +helpoutsWidget=true + +trainingnavtop=true + +@jd:body + + +<div id="tb-wrapper"> +<div id="tb"> + +<h2>本課程示範</h2> +<ol> + <li><a href="#DefineContract">定義結構描述與合約</a></li> + <li><a href="#DbHelper">使用 SQL Helper 建立資料庫</a></li> + <li><a href="#WriteDbRow">將資訊置入資料庫中</a></li> + <li><a href="#ReadDbRow">讀取資料庫中的資訊</a></li> + <li><a href="#DeleteDbRow">刪除資料庫中的資訊</a></li> + <li><a href="#UpdateDbRow">更新資料庫</a></li> +</ol> + +<h2>您也應該閱讀</h2> +<ul> + <li><a href="{@docRoot}guide/topics/data/data-storage.html#db">使用資料庫</a></li> +</ul> + +<!-- +<h2>Try it out</h2> + +<div class="download-box"> + <a href="{@docRoot}shareables/training/Sample.zip" class="button">Download the sample</a> + <p class="filename">Sample.zip</p> +</div> +--> + +</div> +</div> + + +<p>對於重複資料或結構化資料 (例如連絡資訊),將其儲存至資料庫是理想的選擇。 +本課程假設您已大體熟悉 SQL 資料庫,並協助您開始在 Android 上使用 SQLite 資料庫。 + +{@link android.database.sqlite} 套件中提供在 Android 上使用資料庫所需的 API。 +</p> + + +<h2 id="DefineContract">定義結構描述與合約</h2> + +<p>SQL 資料庫的其中一項主要準則是結構描述,即針對資料庫組織方式的正式宣告。 +在您建立資料庫所用的 SQL 陳述式中,會反映結構描述。 +您可能會發現,建立伴隨類別 (也稱為<em>合約</em>類別) 會非常有益,該類別會以系統化的自我記錄方式,明確指定結構描述的配置。 + +</p> + +<p>合約類別是常數 (可為 URI、表格與欄定義名稱) 的容器。 +藉由合約類別,您可在同一套件內的所有其他類別中使用相同的常數。 +您可藉此在一個位置變更欄名稱,然後將其傳播到全部程式碼中。 +</p> + +<p>組織合約類別的良好方式,是將適用於整個資料庫的全域定義置於類別的根層級, +然後,針對列舉欄的每個表格建立內部類別。 +</p> + +<p class="note"><strong>注意:</strong>透過實作 {@link +android.provider.BaseColumns} 介面,您的內部類別可繼承主索引鍵欄位 (稱為 {@code _ID}),某些 Android 類別 (諸如 cursor adaptor) 希望其具備該欄位。 + +此操作並非必需的操作,但是可協助您的資料庫與 Android 架構協調運作。 +</p> + +<p>例如,以下程式碼片段會定義單一表格的表格名稱與欄名稱: +</p> + + +<pre> +public final class FeedReaderContract { + // To prevent someone from accidentally instantiating the contract class, + // give it an empty constructor. + public FeedReaderContract() {} + + /* Inner class that defines the table contents */ + public static abstract class FeedEntry implements BaseColumns { + public static final String TABLE_NAME = "entry"; + public static final String COLUMN_NAME_ENTRY_ID = "entryid"; + public static final String COLUMN_NAME_TITLE = "title"; + public static final String COLUMN_NAME_SUBTITLE = "subtitle"; + ... + } +} +</pre> + + + +<h2 id="DbHelper">使用 SQL Helper 建立資料庫</h2> + +<p>定義資料庫的外觀之後,您應實作多種方法以建立並維護資料庫與表格。 +以下所示是可建立及刪除表格的某些典型陳述式: +</P> + +<pre> +private static final String TEXT_TYPE = " TEXT"; +private static final String COMMA_SEP = ","; +private static final String SQL_CREATE_ENTRIES = + "CREATE TABLE " + FeedEntry.TABLE_NAME + " (" + + FeedEntry._ID + " INTEGER PRIMARY KEY," + + FeedEntry.COLUMN_NAME_ENTRY_ID + TEXT_TYPE + COMMA_SEP + + FeedEntry.COLUMN_NAME_TITLE + TEXT_TYPE + COMMA_SEP + + ... // Any other options for the CREATE command + " )"; + +private static final String SQL_DELETE_ENTRIES = + "DROP TABLE IF EXISTS " + FeedEntry.TABLE_NAME; +</pre> + +<p>如同在裝置的<a href="{@docRoot}guide/topics/data/data-storage.html#filesInternal">內部儲存空間</a>儲存檔案一樣,Android 會將您的資料庫儲存在與應用程式關聯的私用磁碟空間內。 + +依預設,其他應用程式無法存取此區域,因此您的資料安全無虞。 +</p> + +<p>{@link +android.database.sqlite.SQLiteOpenHelper} 類別中提供一組有用的 API。若使用此類別取得資料庫的參考,只有在需要執行且<em>並非處於應用程式啟動期間</em>時,系統才會執行資料庫的建立與更新操作 (執行時間可能很長)。 + + + +您只需呼叫 {@link android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} 或 +{@link android.database.sqlite.SQLiteOpenHelper#getReadableDatabase} 即可。 +</p> + +<p class="note"><strong>注意:</strong>由於這些操作的時間可能很長,因此請確保您在背景執行緒 (例如 {@link android.os.AsyncTask} 或 {@link android.app.IntentService}) 中呼叫 {@link +android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} 或 {@link +android.database.sqlite.SQLiteOpenHelper#getReadableDatabase}。 + +</p> + +<p>若要使用 {@link android.database.sqlite.SQLiteOpenHelper},請建立可覆寫 {@link +android.database.sqlite.SQLiteOpenHelper#onCreate onCreate()}、{@link +android.database.sqlite.SQLiteOpenHelper#onUpgrade onUpgrade()} 與 {@link +android.database.sqlite.SQLiteOpenHelper#onOpen onOpen()} 回呼方法的子類別。 +您還可以實作 {@link android.database.sqlite.SQLiteOpenHelper#onDowngrade onDowngrade()},但這並非必需的操作。 + +</p> + +<p>例如,以下展示了 {@link +android.database.sqlite.SQLiteOpenHelper} (使用上述某些命令) 的實作:</p> + +<pre> +public class FeedReaderDbHelper extends SQLiteOpenHelper { + // If you change the database schema, you must increment the database version. + public static final int DATABASE_VERSION = 1; + public static final String DATABASE_NAME = "FeedReader.db"; + + public FeedReaderDbHelper(Context context) { + super(context, DATABASE_NAME, null, DATABASE_VERSION); + } + public void onCreate(SQLiteDatabase db) { + db.execSQL(SQL_CREATE_ENTRIES); + } + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + // This database is only a cache for online data, so its upgrade policy is + // to simply to discard the data and start over + db.execSQL(SQL_DELETE_ENTRIES); + onCreate(db); + } + public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { + onUpgrade(db, oldVersion, newVersion); + } +} +</pre> + +<p>若要存取您的資料庫,請啟動 {@link +android.database.sqlite.SQLiteOpenHelper} 的子類別:</p> + +<pre> +FeedReaderDbHelper mDbHelper = new FeedReaderDbHelper(getContext()); +</pre> + + + + +<h2 id="WriteDbRow">將資訊置入資料庫中</h2> + +<p>透過將 {@link android.content.ContentValues} 物件傳遞至 {@link android.database.sqlite.SQLiteDatabase#insert insert()} 方法,可將資料插入至資料庫: +</p> + +<pre> +// Gets the data repository in write mode +SQLiteDatabase db = mDbHelper.getWritableDatabase(); + +// Create a new map of values, where column names are the keys +ContentValues values = new ContentValues(); +values.put(FeedEntry.COLUMN_NAME_ENTRY_ID, id); +values.put(FeedEntry.COLUMN_NAME_TITLE, title); +values.put(FeedEntry.COLUMN_NAME_CONTENT, content); + +// Insert the new row, returning the primary key value of the new row +long newRowId; +newRowId = db.insert( + FeedEntry.TABLE_NAME, + FeedEntry.COLUMN_NAME_NULLABLE, + values); +</pre> + +<p>{@link android.database.sqlite.SQLiteDatabase#insert insert()} 的第一個引數即為表格名稱。 +第二個引數將提供欄的名稱, + 在 {@link android.content.ContentValues} 為空時,架構可在該欄中插入 NULL (若您將其設為 {@code "null"},則在無值時,架構不會插入列)。 + +</p> + + + + +<h2 id="ReadDbRow">讀取資料庫中的資訊</h2> + +<p>若要從資料庫進行讀取,請使用 {@link android.database.sqlite.SQLiteDatabase#query query()} 方法,然後向其傳遞您的選取條件與所需的欄。該方法會合併 {@link android.database.sqlite.SQLiteDatabase#insert insert()} 與 {@link android.database.sqlite.SQLiteDatabase#update update()} 的元素,對您希望擷取的資料 (而非要插入的資料) 進行定義的欄清單除外。 + + + +將在 {@link android.database.Cursor} 物件中,為您傳回查詢結果。 +</p> + +<pre> +SQLiteDatabase db = mDbHelper.getReadableDatabase(); + +// Define a <em>projection</em> that specifies which columns from the database +// you will actually use after this query. +String[] projection = { + FeedEntry._ID, + FeedEntry.COLUMN_NAME_TITLE, + FeedEntry.COLUMN_NAME_UPDATED, + ... + }; + +// How you want the results sorted in the resulting Cursor +String sortOrder = + FeedEntry.COLUMN_NAME_UPDATED + " DESC"; + +Cursor c = db.query( + FeedEntry.TABLE_NAME, // The table to query + projection, // The columns to return + selection, // The columns for the WHERE clause + selectionArgs, // The values for the WHERE clause + null, // don't group the rows + null, // don't filter by row groups + sortOrder // The sort order + ); +</pre> + +<p>若要查看游標指示的列,請使用其中一種 {@link android.database.Cursor} move 方法,您必須始終先呼叫該方法,然後再開始讀取值。 +一般而言,您應呼叫 {@link android.database.Cursor#moveToFirst} 來執行啟動,如此會將「讀取位置」置於結果中的第一個項目。 + +對於每列,您可以呼叫其中一種 {@link android.database.Cursor} get 方法 (例如 {@link android.database.Cursor#getString +getString()} 或 {@link android.database.Cursor#getLong getLong()}),以讀取欄的值。 +對於每種 get 方法,您必須傳遞所需欄的索引位置,可以呼叫 {@link android.database.Cursor#getColumnIndex getColumnIndex()} 或 +{@link android.database.Cursor#getColumnIndexOrThrow getColumnIndexOrThrow()} 取得該位置。例如: + + +</p> + +<pre> +cursor.moveToFirst(); +long itemId = cursor.getLong( + cursor.getColumnIndexOrThrow(FeedEntry._ID) +); +</pre> + + + + +<h2 id="DeleteDbRow">刪除資料庫中的資訊</h2> + +<p>若要刪除表格中的列,您需要提供識別這些列的選取條件。 +資料庫 API 可提供建立選取條件的機制 (能防止 SQL 插入)。 +該機制會將選取規格分為選取子句與選取引數。 +子句可定義要查看的欄,您也可以藉此合併欄測試。 + +引數是要測試的值,繫結在子句中。由於對結果的處理方式不同於規則 SQL 陳述式,因此結果不會遭受 SQL 插入。 + +</p> + +<pre> +// Define 'where' part of query. +String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + " LIKE ?"; +// Specify arguments in placeholder order. +String[] selectionArgs = { String.valueOf(rowId) }; +// Issue SQL statement. +db.delete(table_name, selection, selectionArgs); +</pre> + + + +<h2 id="UpdateDbRow">更新資料庫</h2> + +<p>若您需要修改資料庫值的子集,請使用 {@link +android.database.sqlite.SQLiteDatabase#update update()} 方法。</p> + +<p>更新表格會合併 {@link +android.database.sqlite.SQLiteDatabase#insert insert()} 的內容值語法與 {@link android.database.sqlite.SQLiteDatabase#delete delete()} 的 {@code where} 語法。 +</p> + +<pre> +SQLiteDatabase db = mDbHelper.getReadableDatabase(); + +// New value for one column +ContentValues values = new ContentValues(); +values.put(FeedEntry.COLUMN_NAME_TITLE, title); + +// Which row to update, based on the ID +String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + " LIKE ?"; +String[] selectionArgs = { String.valueOf(rowId) }; + +int count = db.update( + FeedReaderDbHelper.FeedEntry.TABLE_NAME, + values, + selection, + selectionArgs); +</pre> + diff --git a/docs/html-intl/intl/zh-tw/training/basics/data-storage/files.jd b/docs/html-intl/intl/zh-tw/training/basics/data-storage/files.jd new file mode 100644 index 0000000..8b8d0a7 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/training/basics/data-storage/files.jd @@ -0,0 +1,379 @@ +page.title=儲存檔案 +page.tags=資料儲存空間 +helpoutsWidget=true + +trainingnavtop=true + +@jd:body + + +<div id="tb-wrapper"> +<div id="tb"> + +<h2>本課程示範</h2> +<ol> + <li><a href="#InternalVsExternalStorage">選擇內部或外部儲存空間</a></li> + <li><a href="#GetWritePermission">取得外部儲存空間的權限</a></li> + <li><a href="#WriteInternalStorage">將檔案儲存在內部儲存空間</a></li> + <li><a href="#WriteExternalStorage">將檔案儲存在外部儲存空間</a></li> + <li><a href="#GetFreeSpace">查詢可用空間</a></li> + <li><a href="#DeleteFile">刪除檔案</a></li> +</ol> + +<h2>您也應該閱讀</h2> +<ul> + <li><a href="{@docRoot}guide/topics/data/data-storage.html#filesInternal">使用內部儲存空間</a> +</li> + <li><a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">使用外部儲存空間</a> +</li> +</ul> + +</div> +</div> + +<p>Android 使用的檔案系統類似於其他平台上的磁碟式檔案系統。 +本課程將說明如何透過 Android 檔案系統,使用 {@link java.io.File} +API 讀取並寫入檔案。 +</p> + +<p>{@link java.io.File} 物件適用於以從頭到尾的順序,無一略過地讀取或寫入大量資料。 +該物件的用途很廣,例如非常適用於影像檔案或透過網路交換的項目。 +</p> + +<p>本課程將顯示如何在您的應用程式中執行與檔案相關的基本任務。本課程假設您已熟悉 Linux 檔案系統的基本概念,以及 +{@link java.io} 中的標準檔案輸入/輸出 API。 +</p> + + +<h2 id="InternalVsExternalStorage">選擇內部或外部儲存空間</h2> + +<p>所有 Android 裝置都有兩個檔案儲存區域:「內部」與「外部」儲存空間。這些名稱源自 Android 發展的初期,當時大多數裝置都提供內建靜態記憶體 (內部儲存空間),以及諸如 micro SD 卡等卸除式儲存媒體 (外部儲存空間)。有些裝置將永久儲存空間分為「內部」與「外部」分割區,因此即使沒有卸除式儲存媒體,也始終存在兩個儲存空間,不論外部儲存空間是否為卸除式媒體,API 行為都相同。以下清單將概述每個儲存空間的狀況。 + + + + + +</p> + +<div class="col-5" style="margin-left:0"> +<p><b>內部儲存空間:</b></p> +<ul> +<li>裝置始終具備內部儲存空間。</li> +<li>依預設,只有您的應用程式能存取此空間內儲存的檔案。</li> +<li>使用者解除安裝您的應用程式時,系統會從內部儲存空間移除您應用程式的所有檔案。 +</li> +</ul> +<p>若您希望確保使用者與其他應用程式都無法存取您的檔案,使用內部儲存空間是最佳選擇。 +</p> +</div> + +<div class="col-7" style="margin-right:0"> +<p><b>外部儲存空間:</b></p> +<ul> +<li>裝置並非始終具備外部儲存空間,因為使用者可以將外部儲存空間掛接為 USB 儲存裝置,在某些情況下也可以從裝置上移除外部儲存空間。 +</li> +<li>其他應用程式可以讀取外部儲存空間,因此您可能無法對該空間內儲存的檔案遭讀取的情況進行控制。 +</li> +<li>若使用者解除安裝您的應用程式,只有在您將應用程式的檔案儲存在 {@link android.content.Context#getExternalFilesDir +getExternalFilesDir()} 的目錄中時,系統才會從外部儲存空間移除您應用程式的檔案。 +</li> +</ul> +<p>對於不需要存取限制的檔案,以及您希望與其他應用程式共用的檔案,或允許使用者使用電腦存取的檔案,外部儲存空間是最佳的儲存位置。 + +</p> +</div> + + +<p class="note" style="clear:both"> +<strong>秘訣:</strong>雖然應用程式依預設會安裝在內部儲存空間,但是您可以在宣示說明中指定 <a href="{@docRoot}guide/topics/manifest/manifest-element.html#install">{@code +android:installLocation}</a> 屬性,以便可以將應用程式安裝在外部儲存空間。 + +在 APK 的大小很大,且使用者的外部儲存空間大於內部儲存空間時,使用者非常喜歡使用該選項。 +如需詳細資訊,請參閱<a href="{@docRoot}guide/topics/data/install-location.html">應用程式安裝位置</a>。 +</p> + + +<h2 id="GetWritePermission">取得外部儲存空間的權限</h2> + +<p>若要寫入至外部儲存空間,您必須在<a href="{@docRoot}guide/topics/manifest/manifest-intro.html">宣示說明檔案</a>中要求 {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} 權限: +</p> + +<pre> +<manifest ...> + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> + ... +</manifest> +</pre> + +<div class="caution"><p><strong>注意:</strong> +目前,所有應用程式無需特殊權限即可讀取外部儲存空間。 +但是,此狀況在將來的版本中將有所變更。若您的應用程式需要讀取外部儲存空間 (但不寫入該空間),您需要宣告 {@link +android.Manifest.permission#READ_EXTERNAL_STORAGE} 權限。 +若要確保您的應用程式仍以預期方式運作,您應立即宣告此權限,然後變更即會生效。 +</p> +<pre> +<manifest ...> + <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> + ... +</manifest> +</pre> +<p>但是,若您的應用程式使用 {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} 權限,則也以隱含方式具備外部儲存空間讀取權限。 +</p> +</div> + +<p>您無需任何權限即可將檔案儲存在內部儲存空間。 +您的應用程式始終具備內部儲存空間目錄中檔案的讀取與寫入權限。 +</p> + + + + + +<h2 id="WriteInternalStorage">將檔案儲存在內部儲存空間</h2> + +<p>將檔案儲存在內部儲存空間時,您可以呼叫以下兩種方法的其中之一,以 +{@link java.io.File} 擷取相應目錄:</p> + +<dl> + <dt>{@link android.content.Context#getFilesDir}</dt> + <dd>傳回代表您應用程式所用內部目錄的 {@link java.io.File}。</dd> + <dt>{@link android.content.Context#getCacheDir}</dt> + <dd>傳回代表您應用程式暫存快取檔案所用內部目錄的 {@link java.io.File}。 +請確保於不再需要檔案時刪除檔案,並針對您在任何指定時間所用的記憶體數量實作合理的大小限制,例如 1MB。 + +若系統所用的儲存空間開始不足,可能會刪除您的快取檔案而不提供警告。 +</dd> +</dl> + +<p>若要在上述其中一個目錄中建立新檔案,可以使用 {@link +java.io.File#File(File,String) File()} 建構函式,然後傳送會指定您內部儲存空間目錄的 {@link java.io.File} (由上述其中一種方法提供)。 +例如:</p> + +<pre> +File file = new File(context.getFilesDir(), filename); +</pre> + +<p>或者,您可以呼叫 {@link +android.content.Context#openFileOutput openFileOutput()},以取得寫入內部目錄中檔案的 {@link java.io.FileOutputStream}。 +例如,以下展示了如何將某些文字寫入至檔案: +</p> + +<pre> +String filename = "myfile"; +String string = "Hello world!"; +FileOutputStream outputStream; + +try { + outputStream = openFileOutput(filename, Context.MODE_PRIVATE); + outputStream.write(string.getBytes()); + outputStream.close(); +} catch (Exception e) { + e.printStackTrace(); +} +</pre> + +<p>或者,若您需要快取某些檔案,應改用 {@link +java.io.File#createTempFile createTempFile()}。例如,以下方法會從 {@link java.net.URL} 中擷取檔案名稱,然後在您應用程式的內部快取目錄中建立具有該名稱的檔案: + +</p> + +<pre> +public File getTempFile(Context context, String url) { + File file; + try { + String fileName = Uri.parse(url).getLastPathSegment(); + file = File.createTempFile(fileName, null, context.getCacheDir()); + catch (IOException e) { + // Error while creating file + } + return file; +} +</pre> + +<p class="note"><strong>注意:</strong> +您應用程式的內部儲存空間目錄由位於 Android 檔案系統特殊位置的應用程式套件名稱指定。嚴格來說,若將檔案模式設為可讀取,則其他應用程式可以讀取您的內部檔案。 + + +但是,其他應用程式也需要知道您的應用程式套件名稱與檔案名稱。 +除非您將檔案明確設為可讀取或可寫入,否則其他應用程式無法瀏覽您的內部目錄,也沒有讀取或寫入存取權。 +因此,只要您針對內部儲存空間中的檔案使用 {@link android.content.Context#MODE_PRIVATE},其他應用程式將永遠無法存取這些檔案。 + +</p> + + + + + +<h2 id="WriteExternalStorage">將檔案儲存在外部儲存空間</h2> + +<p>由於可能不具備外部儲存空間—例如使用者將儲存裝置掛接至 PC,或移除提供外部儲存空間的 SD 卡—,因此您始終應先驗證磁碟區可用,然後再對其執行存取。 + +您可以呼叫 {@link android.os.Environment#getExternalStorageState},以查詢外部儲存空間狀態。 +若傳回的狀態等於 {@link android.os.Environment#MEDIA_MOUNTED},則可以讀取並寫入檔案。 + +例如,以下方法可用於判斷儲存空間的可用性: +</p> + +<pre> +/* Checks if external storage is available for read and write */ +public boolean isExternalStorageWritable() { + String state = Environment.getExternalStorageState(); + if (Environment.MEDIA_MOUNTED.equals(state)) { + return true; + } + return false; +} + +/* Checks if external storage is available to at least read */ +public boolean isExternalStorageReadable() { + String state = Environment.getExternalStorageState(); + if (Environment.MEDIA_MOUNTED.equals(state) || + Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { + return true; + } + return false; +} +</pre> + +<p>雖然使用者與其他應用程式可以修改外部儲存空間,但是可在外部儲存空間儲存兩種類別的檔案: +</p> + +<dl> + <dt>公用檔案</dt> + <dd>這些檔案將供其他應用程式及使用者自由使用。 +若使用者解除安裝您的應用程式,這些檔案仍可供使用者使用。 + + <p>例如,由您的應用程式拍攝的相片或下載的其他檔案都是公用檔案。</p> + </dd> + <dt>私用檔案</dt> + <dd>這些檔案本屬於您的應用程式,在使用者解除安裝您的應用程式時應予以刪除。雖然嚴格來說,由於這些檔案位於外部儲存空間,因此可供使用者與其他應用程式存取,但實際上這些檔案對於您應用程式之外的使用者並無價值。使用者解除安裝您的應用程式時,系統會刪除您應用程式外部私用目錄中的所有檔案。 + + + + + <p>例如,您的應用程式下載的附加資源,或暫存媒體檔案都是私用檔案。</p> + </dd> +</dl> + +<p>若您希望將公用檔案儲存在外部儲存空間,請使用 +{@link android.os.Environment#getExternalStoragePublicDirectory +getExternalStoragePublicDirectory()} 方法取得代表外部儲存空間內相應目錄的 {@link java.io.File}。 +該方法採用對要儲存的檔案類型進行指定 (以便能合理區分這些檔案與其他公用檔案) 的引數,諸如 {@link android.os.Environment#DIRECTORY_MUSIC} 或 {@link +android.os.Environment#DIRECTORY_PICTURES}。 + +例如:</p> + +<pre> +public File getAlbumStorageDir(String albumName) { + // Get the directory for the user's public pictures directory. + File file = new File(Environment.getExternalStoragePublicDirectory( + Environment.DIRECTORY_PICTURES), albumName); + if (!file.mkdirs()) { + Log.e(LOG_TAG, "Directory not created"); + } + return file; +} +</pre> + + +<p>若您希望儲存應用程式私用的檔案,可以呼叫 {@link +android.content.Context#getExternalFilesDir getExternalFilesDir()},然後向其傳送名稱 (表示您希望使用的目錄類型),從而擷取相應目錄。 + +以此方式建立的每個目錄都會新增至父系目錄 (該目錄會封裝您應用程式的所有外部儲存空間檔案),並在使用者解除安裝您的應用程式時由系統刪除。 + +</p> + +<p>例如,以下所示的方法可用於建立個別相簿的目錄:</p> + +<pre> +public File getAlbumStorageDir(Context context, String albumName) { + // Get the directory for the app's private pictures directory. + File file = new File(context.getExternalFilesDir( + Environment.DIRECTORY_PICTURES), albumName); + if (!file.mkdirs()) { + Log.e(LOG_TAG, "Directory not created"); + } + return file; +} +</pre> + +<p>若預先定義的任何子目錄名稱都不適用於您的檔案,您可以改為呼叫 {@link +android.content.Context#getExternalFilesDir getExternalFilesDir()} 並傳送 {@code null}。此操作 +會傳回外部儲存空間內您應用程式私用目錄的根目錄。</p> + +<p>請記住,{@link android.content.Context#getExternalFilesDir getExternalFilesDir()} 會在使用者解除安裝您的應用程式時所刪除的目錄中建立目錄。若您希望要儲存的檔案在使用者解除安裝您的應用程式後仍可用—例如您的應用程式是相機,而使用者希望保留相片—,應改用 {@link android.os.Environment#getExternalStoragePublicDirectory +getExternalStoragePublicDirectory()}。 + + + +</p> + + +<p>不論是將 {@link +android.os.Environment#getExternalStoragePublicDirectory +getExternalStoragePublicDirectory()} 用於共用的檔案,還是將 {@link android.content.Context#getExternalFilesDir +getExternalFilesDir()} 用於您應用程式私用的檔案,請務必使用由 API 常數 (例如 {@link android.os.Environment#DIRECTORY_PICTURES}) 提供的目錄名稱。 + + +這些目錄名稱可確保系統正確處理檔案。 +例如,系統媒體掃描程式會將 {@link +android.os.Environment#DIRECTORY_RINGTONES} 中儲存的檔案視為鈴聲,而非音樂。 +</p> + + + + +<h2 id="GetFreeSpace">查詢可用空間</h2> + +<p>若您預先知道要儲存的資料量,可以呼叫 {@link java.io.File#getFreeSpace} 或 {@link +java.io.File#getTotalSpace} 以探明在不會導致 {@link +java.io.IOException} 的情況下空間是否充足。 +上述方法可分別提供儲存磁碟區內目前可用空間量與空間總量。 +該資訊還可以用於避免填充的儲存磁碟區超過特定臨界值。 +</p> + +<p>但是,系統不保證您可以寫入 {@link java.io.File#getFreeSpace} 所示的位元組數量。 +若傳回的數值較您要儲存的資料量略大,或檔案系統的已使用空間不到 90%,則繼續寫入可能是安全的。否則,可能不應寫入儲存空間。 + + +</p> + +<p class="note"><strong>注意:</strong>在儲存檔案之前,您無需檢查可用空間量。 +您可以嘗試立即寫入檔案,然後在發生 {@link java.io.IOException} 時執行捕捉即可。 +若您不知道需要的確切空間量,可能需要執行該作業。 +例如,若您在儲存檔案之前,將 PNG 影像轉化為 JPEG 以變更檔案的編碼,就不會預先知道檔案的大小。 + +</p> + + + + +<h2 id="DeleteFile">刪除檔案</h2> + +<p>不再需要檔案時,應一律刪除檔案。最直接的檔案刪除方式是讓開啟的檔案參考在自身上呼叫 {@link java.io.File#delete}。 +</p> + +<pre> +myFile.delete(); +</pre> + +<p>若檔案儲存在內部儲存空間,您也可以呼叫 {@link android.content.Context#deleteFile deleteFile()},讓 {@link android.content.Context} 尋找並刪除檔案: +</p> + +<pre> +myContext.deleteFile(fileName); +</pre> + +<div class="note"> +<p><strong>注意:</strong>使用者解除安裝您的應用程式時,Android 系統會刪除以下檔案: +</p> +<ul> +<li>您在內部儲存空間儲存的所有檔案</li> +<li>您使用 {@link +android.content.Context#getExternalFilesDir getExternalFilesDir()} 在外部儲存空間儲存的所有檔案。</li> +</ul> +<p>但是,您應定期手動刪除使用 {@link android.content.Context#getCacheDir()} 建立的所有快取檔案,並定期刪除不再需要的其他檔案。 + +</p> +</div> + diff --git a/docs/html-intl/intl/zh-tw/training/basics/data-storage/index.jd b/docs/html-intl/intl/zh-tw/training/basics/data-storage/index.jd new file mode 100644 index 0000000..9ff1fc0 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/training/basics/data-storage/index.jd @@ -0,0 +1,57 @@ +page.title=儲存資料 +page.tags=資料儲存空間,檔案,sql,資料庫,偏好設定 +helpoutsWidget=true + +trainingnavtop=true +startpage=true + +@jd:body + +<div id="tb-wrapper"> +<div id="tb"> + +<h2>相依性和先決條件</h2> +<ul> + <li>Android 1.6 (API 層級為 4) 或更高版本</li> + <li>熟悉地圖的索引鍵值集合</li> + <li>熟悉 Java 檔案 I/O API</li> + <li>熟悉 SQL 資料庫</li> +</ul> + +<h2>您也應該閱讀</h2> +<ul> + <li><a href="{@docRoot}guide/topics/data/data-storage.html">儲存選項</a></li> +</ul> + +</div> +</div> + +<p>在 {@link android.app.Activity#onPause onPause()} 期間,大多數 Android 應用程式都需要儲存資料 (即使僅儲存應用程式狀態的有關資訊),因此使用者的進度不會遺失。 +大多數非一般的應用程式還需要儲存使用者設定,某些應用程式必須管理檔案與資料庫中的大量資訊。 + +本課程將為您介紹 Android 中的主要資料儲存選項,包括: +</p> + +<ul> + <li>將簡單資料類型的索引鍵值配對儲存至共用偏好設定檔案 +</li> + <li>將任意檔案儲存至 Android 的檔案系統</li> + <li>使用由 SQLite 管理的資料庫</li> +</ul> + + +<h2>課程</h2> + +<dl> + <dt><b><a href="shared-preferences.html">儲存索引鍵值組</a></b></dt> + <dd>了解如何使用共用的偏好設定檔案將少量資訊儲存至索引鍵值配對。 +</dd> + + <dt><b><a href="files.html">儲存檔案</a></b></dt> + <dd>了解如何儲存基本檔案 (例如儲存通常循序讀取的很長一系列資料)。 +</dd> + + <dt><b><a href="databases.html">在 SQL 資料庫中儲存資料</a></b></dt> + <dd>了解如何使用 SQLite 資料庫讀取及寫入結構化資料。</dd> + +</dl> diff --git a/docs/html-intl/intl/zh-tw/training/basics/data-storage/shared-preferences.jd b/docs/html-intl/intl/zh-tw/training/basics/data-storage/shared-preferences.jd new file mode 100644 index 0000000..46f8f20 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/training/basics/data-storage/shared-preferences.jd @@ -0,0 +1,120 @@ +page.title=儲存索引鍵值組 +page.tags=資料儲存空間 +helpoutsWidget=true + +trainingnavtop=true + +@jd:body + + +<div id="tb-wrapper"> +<div id="tb"> + +<h2>本課程示範</h2> +<ol> + <li><a href="#GetSharedPreferences">取得 SharedPreferences 的控點</a></li> + <li><a href="#WriteSharedPreference">寫入至共用的偏好設定</a></li> + <li><a href="#ReadSharedPreference">從共用的偏好設定進行讀取</a></li> +</ol> + +<h2>您也應該閱讀</h2> +<ul> + <li><a href="{@docRoot}guide/topics/data/data-storage.html#pref">使用共用的偏好設定</a></li> +</ul> + +</div> +</div> + + +<p>若您希望儲存相對較小的索引鍵值集合,應使用 {@link android.content.SharedPreferences} API。 +{@link android.content.SharedPreferences} 物件指向包含索引鍵值配對的檔案,並提供讀取及寫入這些配對的簡單方法。 + +每個 {@link android.content.SharedPreferences} 檔案都由架構管理,可以是公用或私用檔案。 + +</p> + +<p>本課程將為您展示如何使用 {@link android.content.SharedPreferences} API 儲存及擷取簡單值。 +</p> + +<p class="note"><strong>注意:</strong>{@link android.content.SharedPreferences} API 僅用於讀取及寫入索引鍵值配對,不應將其與 {@link android.preference.Preference} API 混淆,後者可協助您建置應用程式設定的使用者介面 (然而這些 API 使用 {@link android.content.SharedPreferences} 作為其儲存應用程式設定的實作方式)。 + + + +如需有關使用 {@link +android.preference.Preference} API 的資訊,請參閱<a href="{@docRoot}guide/topics/ui/settings.html">設定</a>指南。</p> + +<h2 id="GetSharedPreferences">取得 SharedPreferences 的控點</h2> + +<p>您可以呼叫以下兩種方法的其中之一,以建立新的共用偏好設定檔案或存取既有的共用偏好設定檔案: +</p> +<ul> + <li>{@link android.content.Context#getSharedPreferences(String,int) +getSharedPreferences()} — 若您需要使用多個共用偏好設定檔案 (根據名稱進行識別,第一個參數將指定名稱),請使用此方法。 +您可以從應用程式中的任何 {@link android.content.Context} 呼叫此方法。 +</li> + <li>{@link android.app.Activity#getPreferences(int) getPreferences()} — 若您只需針對應用行為顯示使用一個共用偏好設定檔案,請從 {@link android.app.Activity} 使用此方法。 + +由於此方法會擷取屬於該應用行為顯示的預設共用偏好設定檔案,因此您無需提供名稱。 +</li> +</ul> + +<p>例如,以下程式碼會在 {@link android.app.Fragment} 內執行。該程式碼會存取共用偏好設定檔案 (根據資源字串 {@code R.string.preference_file_key} 識別),並使用私用模式開啟該檔案 (因此只有您的應用程式可以存取該檔案)。 + + +</p> + +<pre> +Context context = getActivity(); +SharedPreferences sharedPref = context.getSharedPreferences( + getString(R.string.preference_file_key), Context.MODE_PRIVATE); +</pre> + +<p>對您的共用偏好設定檔案進行命名時,您應使用能唯一識別您應用程式的名稱,例如 {@code "com.example.myapp.PREFERENCE_FILE_KEY"} +</p> + +<p>或者,若您針對應用行為顯示只需使用一個共用偏好設定檔案,可以使用 {@link android.app.Activity#getPreferences(int) getPreferences()} 方法: +</p> + +<pre> +SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); +</pre> + +<p class="caution"><strong>注意:</strong>若您使用 {@link android.content.Context#MODE_WORLD_READABLE} 或 {@link +android.content.Context#MODE_WORLD_WRITEABLE} 建立共用偏好設定檔案,則知道檔案識別碼的其他任何應用程式都能存取您的資料。 + +</p> + + +<h2 id="WriteSharedPreference">寫入至共用的偏好設定</h2> + +<p>若要寫入至共用偏好設定檔案,請針對您的 {@link android.content.SharedPreferences} 呼叫 {@link +android.content.SharedPreferences#edit},以建立 {@link +android.content.SharedPreferences.Editor}。</p> + +<p>傳遞您希望使用諸如 {@link +android.content.SharedPreferences.Editor#putInt putInt()} 及 {@link +android.content.SharedPreferences.Editor#putString putString()} 等方法寫入的索引鍵與值。然後呼叫 {@link +android.content.SharedPreferences.Editor#commit} 以儲存變更。例如:</p> + +<pre> +SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); +SharedPreferences.Editor editor = sharedPref.edit(); +editor.putInt(getString(R.string.saved_high_score), newHighScore); +editor.commit(); +</pre> + + +<h2 id="ReadSharedPreference">從共用的偏好設定進行讀取</h2> + +<p>若要擷取共用偏好設定檔案中的值,請呼叫諸如 {@link +android.content.SharedPreferences#getInt getInt()} 與 {@link +android.content.SharedPreferences#getString getString()} 等方法,然後針對您希望使用的值提供索引鍵,以及 (可選) 在索引鍵不存在時傳回的預設值。 + +例如:</p> + +<pre> +SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); +int defaultValue = getResources().getInteger(R.string.saved_high_score_default); +long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue); +</pre> + diff --git a/docs/html-intl/intl/zh-tw/training/basics/intents/filters.jd b/docs/html-intl/intl/zh-tw/training/basics/intents/filters.jd new file mode 100644 index 0000000..2088b27 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/training/basics/intents/filters.jd @@ -0,0 +1,236 @@ +page.title=允許其他應用程式啟動您的應用行為顯示 +page.tags=意圖 +helpoutsWidget=true + +trainingnavtop=true + +@jd:body + +<div id="tb-wrapper"> + <div id="tb"> + +<h2>本課程示範</h2> +<ol> + <li><a href="#AddIntentFilter">新增意圖篩選器</a></li> + <li><a href="#HandleIntent">在應用行為顯示中處理意圖</a></li> + <li><a href="#ReturnResult">傳回結果</a></li> +</ol> + +<h2>您也應該閱讀</h2> +<ul> + <li><a href="{@docRoot}training/sharing/index.html">共用簡單資料</a></li> + <li><a href="{@docRoot}training/secure-file-sharing/index.html">共用檔案</a> +</ul> + </div> +</div> + +<p>前兩課著重說明一個方面:從您的應用程式啟動其他應用程式的應用行為顯示。但是,若您的應用程式能執行可能適用於其他應用程式的行為,則應準備回應其他應用程式的行為要求。 + +例如,若您建置的社交應用程式可用於與使用者的好友分享訊息或相片,則支援 {@link android.content.Intent#ACTION_SEND} 意圖可為您帶來顯著受益,使用者藉此可從其他應用程式啟動「共用」行為,並啟動您的應用程式來執行該行為。 + + +</p> + +<p>若要允許其他應用程式啟動您的應用行為顯示,需要在您的宣示說明檔案中針對對應的 <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> 元素新增 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a> 元素。 +</p> + +<p>若您的應用程式安裝在裝置上,系統會識別您的意圖篩選器,並將資訊新增至安裝的所有應用程式都支援的意圖內部目錄中。在應用程式使用隱含意圖呼叫 {@link android.app.Activity#startActivity +startActivity()} 或 {@link android.app.Activity#startActivityForResult startActivityForResult()} 時,系統會找出能回應意圖的一或多項應用行為顯示。 + + + +</p> + + + +<h2 id="AddIntentFilter">新增意圖篩選器</h2> + +<p>若要正確定義您的應用行為顯示可以處理的意圖,您新增的每個意圖篩選器都應儘可能具體地說明應用行為顯示所接受行為與資料的類型。 + +</p> + +<p>若應用行為顯示的意圖篩選器執行 {@link android.content.Intent} 物件的以下條件,系統會將指定的 {@link android.content.Intent} 傳送至該應用行為顯示: +</p> + +<dl> + <dt>行為</dt> + <dd>對要執行的行為進行命名的字串。通常是平台所定義值 (例如 {@link android.content.Intent#ACTION_SEND} 或 {@link android.content.Intent#ACTION_VIEW}) 的其中之一。 + + <p>請在您的意圖篩選器中使用 <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a> 元素指定此項目。在此元素中指定的值必須是行為的完整字串名稱,而非 API 常數 (請參閱以下範例)。 + +</p></dd> + + <dt>資料</dt> + <dd>對意圖所關聯資料的描述。 + <p>請在意圖篩選器中使用 <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a> 元素指定此項目。在此元素中使用一或多個屬性,您可以僅指定 MIME 類型、URI 首碼、URI 配置,或指定這些項目的組合,以及表示所接受資料類型的其他項目。 + + +</p> + <p class="note"><strong>注意:</strong>若您不需要宣告 {@link android.net.Uri} 資料的有關詳情 (例如若您的應用行為顯示處理其他類型的「額外」資料,而非處理 URI),應僅指定 {@code android:mimeType} 屬性以宣告應用行為顯示處理的資料類型,例如 {@code text/plain} 或 {@code image/jpeg}。 + + +</p> +</dd> + <dt>類別</dt> + <dd>提供對處理意圖的應用行為顯示進行特性描述的其他方式,通常與使用者的手勢或應用行為顯示的啟動位置有關。 +系統支援多種不同的類別,但大多數類別很少使用。 +然而依預設,所有隱含意圖都與 {@link android.content.Intent#CATEGORY_DEFAULT} 一併定義。 + + <p>請在意圖篩選器中使用 <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a> 元素指定此項目。 +</p></dd> +</dl> + +<p>在意圖篩選器中,您可以宣告每個條件以及 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a> 元素中巢套的對應 XML 元素,以宣告應用行為顯示所接受的條件。 + +</p> + +<p>例如,若資料類型為文字或影像,以下應用行為顯示具備的意圖篩選器可處理 {@link +android.content.Intent#ACTION_SEND} 意圖:</p> + +<pre> +<activity android:name="ShareActivity"> + <intent-filter> + <action android:name="android.intent.action.SEND"/> + <category android:name="android.intent.category.DEFAULT"/> + <data android:mimeType="text/plain"/> + <data android:mimeType="image/*"/> + </intent-filter> +</activity> +</pre> + +<p>傳入的每項意圖只會指定一項行為與一種資料類型,但是在每個 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code +<intent-filter>}</a> 中,可以宣告 <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code +<action>}</a>、<a href="{@docRoot}guide/topics/manifest/category-element.html">{@code +<category>}</a> 與 <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code +<data>}</a> 元素的多個執行個體。 + +</p> + +<p>若兩個行為與資料配對在行為方面彼此排斥,您應建立單獨的意圖篩選器,以指定與哪些資料類型配對時可接受哪些行為。 + +</p> + +<p>例如,假設您的應用行為顯示可處理 {@link +android.content.Intent#ACTION_SEND} 與 {@link +android.content.Intent#ACTION_SENDTO} 意圖的文字與影像。在此情況下,您必須針對兩個行為定義兩個單獨的意圖篩選器,因為 {@link +android.content.Intent#ACTION_SENDTO} 意圖必須使用 {@link android.net.Uri} 資料指定接收者的地址 (使用 {@code send} 或 {@code sendto} URI 配置)。 + +例如:</p> + +<pre> +<activity android:name="ShareActivity"> + <!-- filter for sending text; accepts SENDTO action with sms URI schemes --> + <intent-filter> + <action android:name="android.intent.action.SENDTO"/> + <category android:name="android.intent.category.DEFAULT"/> + <data android:scheme="sms" /> + <data android:scheme="smsto" /> + </intent-filter> + <!-- filter for sending text or images; accepts SEND action and text or image data --> + <intent-filter> + <action android:name="android.intent.action.SEND"/> + <category android:name="android.intent.category.DEFAULT"/> + <data android:mimeType="image/*"/> + <data android:mimeType="text/plain"/> + </intent-filter> +</activity> +</pre> + +<p class="note"><strong>注意:</strong>若要接收隱含意圖,您必須在意圖篩選器中納入 {@link android.content.Intent#CATEGORY_DEFAULT} 類別。 +{@link +android.app.Activity#startActivity startActivity()} 與 {@link +android.app.Activity#startActivityForResult startActivityForResult()} 方法對所有意圖進行處理時,就像已宣告 {@link android.content.Intent#CATEGORY_DEFAULT} 類別一樣。 +若您在意圖篩選器中未宣告該類別,不會將任何隱含意圖解析為您的應用行為顯示。 +</p> + +<p>如需有關傳送及接收 {@link android.content.Intent#ACTION_SEND} 意圖 (執行社交共用行為) 的詳細資訊,請參閱有關<a href="{@docRoot}training/sharing/receive.html">接收其他應用程式的簡單資料</a>的課程。 +</p> + + +<h2 id="HandleIntent">在應用行為顯示中處理意圖</h2> + +<p>若要確定您應用行為顯示中將採用的行為,您可以讀取用於啟動該應用行為顯示的 {@link +android.content.Intent}。</p> + +<p>您的應用行為顯示啟動時,請呼叫 {@link android.app.Activity#getIntent()} 以擷取啟動該應用行為顯示的 {@link android.content.Intent}。 +在應用行為顯示的生命週期期間,您隨時可以執行該作業,但通常應在早期回呼 (例如 {@link android.app.Activity#onCreate onCreate()} 或 {@link android.app.Activity#onStart()}) 期間執行。 + +</p> + +<p>例如:</p> + +<pre> +@Override +protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.main); + + // Get the intent that started this activity + Intent intent = getIntent(); + Uri data = intent.getData(); + + // Figure out what to do based on the intent type + if (intent.getType().indexOf("image/") != -1) { + // Handle intents with image data ... + } else if (intent.getType().equals("text/plain")) { + // Handle intents with text ... + } +} +</pre> + + +<h2 id="ReturnResult">傳回結果</h2> + +<p>若您希望將結果傳回至呼叫您意圖的應用行為顯示,只需呼叫 {@link +android.app.Activity#setResult(int,Intent) setResult()} 以指定結果代碼及結果 {@link +android.content.Intent} 即可。在您的操作已完成,且使用者應返回原始的應用行為顯示時,請呼叫 {@link android.app.Activity#finish()} 以關閉 (並終結) 您的應用行為顯示。 +例如: +</p> + +<pre> +// Create intent to deliver some kind of result data +Intent result = new Intent("com.example.RESULT_ACTION", Uri.parse("content://result_uri"); +setResult(Activity.RESULT_OK, result); +finish(); +</pre> + +<p>您必須始終一併指定結果代碼與結果。結果通常是 {@link +android.app.Activity#RESULT_OK} 或 {@link android.app.Activity#RESULT_CANCELED}。然後,您可以視需要為其他資料提供 {@link android.content.Intent}。 +</p> + +<p class="note"><strong>注意:</strong>依預設,會將結果設為 {@link +android.app.Activity#RESULT_CANCELED}。因此,若使用者在完成行為之前以及在您設定結果之前按下 [後退] 按鈕<em></em>,原始應用行為顯示會收到「已取消」結果。 + +</p> + +<p>若您只需傳回表示其中一種結果選項的整數,可將結果代碼設為大於 0 的任意值。 +若您使用結果代碼以提供整數,且無需納入 {@link android.content.Intent},可以呼叫 {@link +android.app.Activity#setResult(int) setResult()},然後僅傳遞結果代碼。 +例如:</p> + +<pre> +setResult(RESULT_COLOR_RED); +finish(); +</pre> + +<p>在此情況下,可能只會有少數結果,因此結果代碼是本機定義的整數 (大於 0)。 +若您將結果傳回至您應用程式內的應用行為顯示,此功能會非常適用,因為接收結果的應用行為顯示可以參考公用常數,以確定結果代碼的值。 + +</p> + +<p class="note"><strong>注意:</strong>無需檢查是否已使用 {@link +android.app.Activity#startActivity startActivity()} 或 {@link +android.app.Activity#startActivityForResult startActivityForResult()} 啟動您的應用行為顯示。 +若啟動應用行為顯示的意圖希望產生結果,只需呼叫 {@link +android.app.Activity#setResult(int,Intent) setResult()} 即可。 +若原始應用行為已呼叫 {@link +android.app.Activity#startActivityForResult startActivityForResult()},則系統將向其傳遞您提供給 {@link android.app.Activity#setResult(int,Intent) setResult()} 的結果;否則,結果將被忽略。 + +</p> + + + + + + diff --git a/docs/html-intl/intl/zh-tw/training/basics/intents/index.jd b/docs/html-intl/intl/zh-tw/training/basics/intents/index.jd new file mode 100644 index 0000000..70492f4 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/training/basics/intents/index.jd @@ -0,0 +1,62 @@ +page.title=與其他應用程式互動 +page.tags=意圖,應用行為的顯示 +helpoutsWidget=true + +trainingnavtop=true +startpage=true + +@jd:body + +<div id="tb-wrapper"> +<div id="tb"> + +<h2>相依性和先決條件</h2> +<ul> + <li>了解應用行為顯示生命週期的基本知識 (請參閱<a href="{@docRoot}training/basics/activity-lifecycle/index.html">管理應用行為顯示生命週期</a>) +</li> +</ul> + + +<h2>您也應該閱讀</h2> +<ul> + <li><a href="{@docRoot}training/sharing/index.html">共用簡單資料</a></li> + <li><a href="{@docRoot}training/secure-file-sharing/index.html">共用檔案</a> + <li><a href="http://android-developers.blogspot.com/2009/11/integrating-application-with-intents.html">將應用程式與意圖整合 (部落格文章)</a> +</li> + <li><a href="{@docRoot}guide/components/intents-filters.html">意圖和意圖篩選器</a> +</li> +</ul> + +</div> +</div> + +<p>Android 應用程式通常具有多個<a href="{@docRoot}guide/components/activities.html">應用行為顯示</a>。每個應用行為顯示都會顯示使用者介面,使用者可藉此執行特定任務 (例如檢視地圖或拍照)。若要將使用者從一個應用行為顯示傳送至另一個應用行為顯示,您的應用程式必須使用 {@link +android.content.Intent} 來定義應用程式執行作業的「意圖」。 + +使用某方法 (例如 {@link +android.app.Activity#startActivity startActivity()}) 將 {@link android.content.Intent} 傳遞至系統時, +系統會使用 {@link +android.content.Intent} 來識別並啟動相應的應用程式元件。若使用意圖,應用程式甚至可以藉此啟動獨立應用程式中包含的應用行為顯示。 +</p> + +<p>{@link android.content.Intent} 可以是<em>明確的</em>,以啟動特定元件 +(特定 {@link android.app.Activity} 執行個體),也可以是<em>隱含的</em>,以啟動可處理預期行為 (例如「拍照」) 的元件。 +</p> + +<p>本課程將為您展示如何使用 {@link android.content.Intent} 來執行與其他應用程式的某些基本互動,例如啟動其他應用程式、接收該應用程式的結果,以及讓您的應用程式能回應其他應用程式的意圖。 + +</p> + +<h2>課程</h2> + +<dl> + <dt><b><a href="sending.html">將使用者傳送至其他應用程式</a></b></dt> + <dd>展示如何建立隱含意圖以啟動能執行行為的其他應用程式。 +</dd> + <dt><b><a href="result.html">從應用行為顯示取得結果</a></b></dt> + <dd>展示如何啟動其他應用行為顯示並接收應用行為顯示傳回的結果。</dd> + <dt><b><a href="filters.html">允許其他應用程式啟動您的應用行為顯示</a></b></dt> + <dd>展示如何透過定義對您的應用程式所接受的隱含意圖進行宣告的意圖篩選器,讓應用程式中的應用行為顯示可供其他應用程式使用。 +</dd> +</dl> + diff --git a/docs/html-intl/intl/zh-tw/training/basics/intents/result.jd b/docs/html-intl/intl/zh-tw/training/basics/intents/result.jd new file mode 100644 index 0000000..9fabe91 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/training/basics/intents/result.jd @@ -0,0 +1,178 @@ +page.title=從應用行為顯示取得結果 +page.tags=意圖 +helpoutsWidget=true + +trainingnavtop=true + +@jd:body + +<div id="tb-wrapper"> + <div id="tb"> + +<h2>本課程示範</h2> +<ol> + <li><a href="#StartActivity">啟動應用行為顯示</a></li> + <li><a href="#ReceiveResult">接收結果</a></li> +</ol> + +<h2>您也應該閱讀</h2> +<ul> + <li><a href="{@docRoot}training/sharing/index.html">共用簡單資料</a></li> + <li><a href="{@docRoot}training/secure-file-sharing/index.html">共用檔案</a> +</ul> + + </div> +</div> + +<p>啟動其他應用行為顯示不必是單向作業。您也可以啟動其他應用行為顯示,然後接收傳回的結果。 +若要接收結果,請呼叫 {@link android.app.Activity#startActivityForResult +startActivityForResult()} (而非 {@link android.app.Activity#startActivity +startActivity()})。</p> + +<p>例如,您的應用程式可以啟動相機應用程式,然後接收所拍攝的相片作為結果。或者,您可以啟動人員應用程式 (以便讓使用者選取連絡人),然後接收作為結果的連絡人詳細資料。 + +</p> + +<p>當然,必須將提供回應的應用行為顯示設計為傳回結果。執行時,該應用行為顯示會以其他 {@link android.content.Intent} 物件的形式傳送結果。 +您的應用行為顯示會在 {@link android.app.Activity#onActivityResult onActivityResult()} 回呼中接收該結果。 +</p> + +<p class="note"><strong>注意:</strong>呼叫 {@link android.app.Activity#startActivityForResult startActivityForResult()} 時,您可以使用明確或隱含的意圖。 +啟動您的其中一個應用行為顯示以接收結果時,您應使用明確的意圖,以確保收到預期結果。 + +</p> + + +<h2 id="StartActivity">啟動應用行為顯示</h2> + +<p>啟動應用行為顯示以接收結果時,您使用的 {@link android.content.Intent} 物件沒有任何特殊之處,但是您需要將附加整數引數傳遞至 {@link +android.app.Activity#startActivityForResult startActivityForResult()} 方法。 +</p> + +<p>該整數引數是識別您要求的「要求代碼」。在您接收結果 {@link android.content.Intent} 時,回呼會提供同一要求代碼,以便您的應用程式可以正確識別結果並判斷如何處理結果。 + +</p> + +<p>例如,以下展示了如何啟動應用行為顯示 (使用者可藉此挑選連絡人):</p> + +<pre> +static final int PICK_CONTACT_REQUEST = 1; // The request code +... +private void pickContact() { + Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts")); + pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers + startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST); +} +</pre> + + +<h2 id="ReceiveResult">接收結果</h2> + +<p>使用者處理隨後的應用行為顯示並返回時,系統會呼叫應用行為顯示的 {@link android.app.Activity#onActivityResult onActivityResult()} 方法。 +此方法包括三個引數: +</p> + +<ul> + <li>您傳遞至 {@link +android.app.Activity#startActivityForResult startActivityForResult()} 的要求代碼。</li> + <li>由第二個應用行為顯示指定的結果代碼。此代碼是 {@link +android.app.Activity#RESULT_OK} (若操作成功) 或 {@link +android.app.Activity#RESULT_CANCELED} (若因故使用者退出或操作失敗)。 +</li> + <li>攜帶結果資料的 {@link android.content.Intent}。</li> +</ul> + +<p>例如,以下為您展示了如何處理「挑選連絡人」意圖的結果:</p> + +<pre> +@Override +protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // Check which request we're responding to + if (requestCode == PICK_CONTACT_REQUEST) { + // Make sure the request was successful + if (resultCode == RESULT_OK) { + // The user picked a contact. + // The Intent's data Uri identifies which contact was selected. + + // Do something with the contact here (bigger example below) + } + } +} +</pre> + +<p>在此範例中,由 Android 的連絡人或人員應用程式傳回的結果 {@link android.content.Intent} 可提供內容 {@link android.net.Uri} (能識別使用者所選取的連絡人)。 + +</p> + +<p>若要成功處理結果,您必須了解結果 {@link android.content.Intent} 將採用的格式。 +若傳回結果的應用行為顯示是您的其中一個應用行為顯示,上述作業會非常簡單。 +Android 平台隨附的應用程式會針對特定結果資料提供您可以依賴的 API。 +例如,人員應用程式 (某些舊版上的連絡人應用程式) 會始終傳回含內容 URI (可識別選取的連絡人) 的結果,相機應用程式會在 {@code "data"} 額外項目中傳回 {@link android.graphics.Bitmap} (請參閱有關<a href="{@docRoot}training/camera/index.html">拍攝相片</a>的課程)。 + + +</p> + + +<h4>額外說明:讀取連絡人資料</h4> + +<p>上述程式碼展示如何從人員應用程式取得結果,並未詳述如何實際讀取結果的資料,因為這需要進行更高級的 +<a href="{@docRoot}guide/topics/providers/content-providers.html">內容提供者</a>相關討論。 + +但是,若您對此感到好奇,以下提供了另外一些程式碼,這些程式碼會展示如何查詢結果資料,以便取得所選連絡人的電話號碼: +</p> + +<pre> +@Override +protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // Check which request it is that we're responding to + if (requestCode == PICK_CONTACT_REQUEST) { + // Make sure the request was successful + if (resultCode == RESULT_OK) { + // Get the URI that points to the selected contact + Uri contactUri = data.getData(); + // We only need the NUMBER column, because there will be only one row in the result + String[] projection = {Phone.NUMBER}; + + // Perform the query on the contact to get the NUMBER column + // We don't need a selection or sort order (there's only one result for the given URI) + // CAUTION: The query() method should be called from a separate thread to avoid blocking + // your app's UI thread. (For simplicity of the sample, this code doesn't do that.) + // Consider using {@link android.content.CursorLoader} to perform the query. + Cursor cursor = getContentResolver() + .query(contactUri, projection, null, null, null); + cursor.moveToFirst(); + + // Retrieve the phone number from the NUMBER column + int column = cursor.getColumnIndex(Phone.NUMBER); + String number = cursor.getString(column); + + // Do something with the phone number... + } + } +} +</pre> + +<p class="note"><strong>注意:</strong>在 Android 2.3 (API 級別為 9) 版之前,若在 {@link android.provider.ContactsContract.Contacts Contacts Provider} (例如以上所示) 上執行查詢,需要您的應用程式宣告 {@link +android.Manifest.permission#READ_CONTACTS} 權限 (請參閱<a href="{@docRoot}guide/topics/security/security.html">安全性與權限</a>)。 + +但是,從 Android 2.3 版開始,在連絡人提供者傳回結果時,連絡人/人員應用程式會為您的應用程式授予讀取連絡人提供者的臨時權限。 + +該臨時權限僅適用於要求的特定連絡人,因此除非您已宣告 {@link +android.Manifest.permission#READ_CONTACTS} 權限,否則無法查詢並非由意圖的 {@link android.net.Uri} 指定的連絡人。 + +</p> + + + + + + + + + + + + + + + diff --git a/docs/html-intl/intl/zh-tw/training/basics/intents/sending.jd b/docs/html-intl/intl/zh-tw/training/basics/intents/sending.jd new file mode 100644 index 0000000..70e8316 --- /dev/null +++ b/docs/html-intl/intl/zh-tw/training/basics/intents/sending.jd @@ -0,0 +1,256 @@ +page.title=將使用者傳送至其他應用程式 +page.tags=意圖 +helpoutsWidget=true + +trainingnavtop=true + +@jd:body + + +<div id="tb-wrapper"> + <div id="tb"> + +<h2>本課程示範</h2> +<ol> + <li><a href="#Build">建置隱含意圖</a></li> + <li><a href="#Verify">驗證存在接收意圖的應用程式</a></li> + <li><a href="#StartActivity">使用意圖啟動應用行為顯示</a></li> + <li><a href="#AppChooser">顯示應用程式選擇器</a></li> +</ol> + +<h2>您也應該閱讀</h2> +<ul> + <li><a href="{@docRoot}training/sharing/index.html">共用簡單資料</a></li> +</ul> + + </div> +</div> + +<p>應用程式可以根據將要執行的「行為」,將使用者傳送至其他應用程式 +,這是 Android 最重要的功能之一。例如,若您希望在地圖上顯示應用程式中的企業地址,不必在應用程式中建置顯示地圖的應用行為顯示。 + +您可以改為使用 {@link android.content.Intent} 建立檢視地址的要求。 +隨後,Android 系統會啟動能在地圖上顯示地址的應用程式。 +</p> + +<p>正如第一課<a href="{@docRoot}training/basics/firstapp/index.html">建置您的第一個應用程式</a>中所述,您必須使用意圖在您應用程式中的應用行為顯示之間進行導覽。您執行此作業時通常具有<em>明確意圖</em>,該意圖可定義您希望啟動的元件的確切類別名稱。 + + +但是,若您希望使用單獨的應用程式執行諸如「檢視地圖」等行為,則必須使用<em>隱含意圖</em>。 +</p> + +<p>本課程將為您展示如何針對特定行為建立隱含意圖,以及如何使用該意圖啟動在其他應用程式中執行該行為的應用行為顯示。 +</p> + + + +<h2 id="Build">建置隱含意圖</h2> + +<p>隱含意圖不會宣告要啟動元件的類別名稱,而是宣告要執行的行為。 +該行為將指定您希望執行的動作,例如<em>檢視</em>、<em>編輯</em>、<em>傳送</em>或<em>取得</em>項目。 +意圖通常還包括與行為關聯的資料,例如您希望檢視的地址或希望傳送的電子郵件。視您希望建立的意圖而定,該資料可能是 {@link android.net.Uri} 或其他多種資料類型的其中之一,意圖也可能完全不需要資料。 + + +</p> + +<p>若您的資料是 {@link android.net.Uri},可以使用簡單的 {@link +android.content.Intent#Intent(String,Uri) Intent()} 建構函式來定義行為與資料。 +</p> + +<p>例如,以下範例將展示如何建立啟動電話的意圖 (使用 {@link +android.net.Uri} 資料指定電話號碼):</p> + +<pre> +Uri number = Uri.parse("tel:5551234"); +Intent callIntent = new Intent(Intent.ACTION_DIAL, number); +</pre> + +<p>您的應用程式透過呼叫 {@link android.app.Activity#startActivity +startActivity()} 來呼叫該意圖時,電話應用程式會啟動對指定電話號碼的撥號。</p> + +<p>以下將展示其他一些意圖及其行為與 {@link android.net.Uri} 資料配對: +</p> + +<ul> + <li>檢視地圖: +<pre> +// Map point based on address +Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California"); +// Or map point based on latitude/longitude +// Uri location = Uri.parse("geo:37.422219,-122.08364?z=14"); // z param is zoom level +Intent mapIntent = new Intent(Intent.ACTION_VIEW, location); +</pre> + </li> + <li>檢視網頁: +<pre> +Uri webpage = Uri.parse("http://www.android.com"); +Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage); +</pre> + </li> +</ul> + +<p>其他類型的隱含意圖需要「額外」資料提供其他資料類型 (例如字串)。 +您可以使用各種 {@link +android.content.Intent#putExtra(String,String) putExtra()} 方法新增一或多項額外資料。</p> + +<p>依預設,系統會根據包括的 {@link android.net.Uri} 資料,判斷意圖所需的相應 MIME 類型。 +若您未將 {@link android.net.Uri} 包括在意圖中,通常應使用 {@link android.content.Intent#setType setType()} 指定意圖所關聯資料的類型。 + +設定 MIME 類型會進一步指定哪些類型的應用行為顯示應接收意圖。 +</p> + +<p>以下展示的一些意圖將新增額外資料以指定所需行為:</p> + +<ul> + <li>傳送具有附件的電子郵件: +<pre> +Intent emailIntent = new Intent(Intent.ACTION_SEND); +// The intent does not have a URI, so declare the "text/plain" MIME type +emailIntent.setType(HTTP.PLAIN_TEXT_TYPE); +emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"jon@example.com"}); // recipients +emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Email subject"); +emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message text"); +emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://path/to/email/attachment")); +// You can also attach multiple items by passing an ArrayList of Uris +</pre> + </li> + <li>建立行事曆事件: +<pre> +Intent calendarIntent = new Intent(Intent.ACTION_INSERT, Events.CONTENT_URI); +Calendar beginTime = Calendar.getInstance().set(2012, 0, 19, 7, 30); +Calendar endTime = Calendar.getInstance().set(2012, 0, 19, 10, 30); +calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis()); +calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis()); +calendarIntent.putExtra(Events.TITLE, "Ninja class"); +calendarIntent.putExtra(Events.EVENT_LOCATION, "Secret dojo"); +</pre> +<p class="note"><strong>注意:</strong>針對行事曆事件的這一意圖僅支援至少為 14 的 API 級別。 +</p> + </li> +</ul> + +<p class="note"><strong>注意:</strong>請儘可能具體地定義 {@link +android.content.Intent},這一點非常重要。例如,若您希望使用 {@link android.content.Intent#ACTION_VIEW} 意圖顯示影像,應將 MIME 類型指定為 {@code image/*}。 + +如此可防止意圖觸發能「檢視」其他類型資料的應用程式 (例如地圖應用程式)。 +</p> + + + +<h2 id="Verify">驗證存在接收意圖的應用程式</h2> + +<p>雖然 Android 平台保證特定意圖將解析為內建應用程式 (例如電話、電子郵件或日曆應用程式) 的其中之一,但您應一律先納入驗證步驟,然後再呼叫意圖。 + +</p> + +<p class="caution"><strong>注意:</strong>若您呼叫意圖,而裝置上不提供能處理該意圖的任何應用程式, +則您的應用程式將當機。</p> + +<p>若要驗證存在可回應意圖的應用行為顯示,請呼叫 {@link +android.content.pm.PackageManager#queryIntentActivities queryIntentActivities()} 以取得能處理 {@link android.content.Intent} 的應用行為顯示清單。 +若傳回的 {@link +java.util.List} 非空,您可以安全使用意圖。例如:</p> + +<pre> +PackageManager packageManager = {@link android.content.Context#getPackageManager()}; +List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, + PackageManager.MATCH_DEFAULT_ONLY); +boolean isIntentSafe = activities.size() > 0; +</pre> + +<p>若 <code>isIntentSafe</code> 為 <code>true</code>,則至少有一個應用程式將回應意圖。 +若其為 <code>false</code>,則沒有任何應用程式能處理該意圖。</p> + +<p class="note"><strong>注意:</strong>對於使用該意圖的功能,若您需要在使用者嘗試使用該功能之前停用該功能,應在您的應用行為顯示第一次啟動時,執行這項檢查。 + +若您知道能處理該意圖的特定應用程式,還可為使用者提供應用程式下載連結 (請參閱如何<a href="{@docRoot}distribute/tools/promote/linking.html">在 Google +Play 上連結您的產品</a>)。 +</p> + + +<h2 id="StartActivity">使用意圖啟動應用行為顯示</h2> + +<div class="figure" style="width:200px;margin-top:-10px"> + <img src="{@docRoot}images/training/basics/intents-choice.png" alt="" /> + <p class="img-caption"><strong>圖 1.</strong>選取對話方塊 (在多個應用程式可處理意圖時顯示) 的範例。 +</p> +</div> + +<p>在您建立 {@link android.content.Intent} 並設定額外資訊後,請呼叫 {@link +android.app.Activity#startActivity startActivity()} 將其傳送至系統。若系統識別出有多個應用行為顯示可以處理意圖,會顯示對話方塊,供使用者選取要使用的應用程式,如圖 1 所示。 + +若只有一個應用行為顯示可以處理該意圖,系統會立即啟動該應用行為顯示。 +</p> + +<pre> +startActivity(intent); +</pre> + +<p>以下所示的完整範例將展示如何建立檢視地圖的意圖、驗證存在處理該意圖的應用程式,然後啟動該應用程式: +</p> + +<pre> +// Build the intent +Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California"); +Intent mapIntent = new Intent(Intent.ACTION_VIEW, location); + +// Verify it resolves +PackageManager packageManager = {@link android.content.Context#getPackageManager()}; +List<ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0); +boolean isIntentSafe = activities.size() > 0; + +// Start an activity if it's safe +if (isIntentSafe) { + startActivity(mapIntent); +} +</pre> + + + +<h2 id="AppChooser">顯示應用程式選擇器</h2> + +<div class="figure" style="width:200px;margin-top:-10px"> + <img src="{@docRoot}images/training/basics/intent-chooser.png" alt="" /> + <p class="img-caption"><strong>圖 2.</strong>選擇器對話方塊。</p> +</div> + +<p>請注意,若您將 {@link android.content.Intent} 傳遞至 {@link +android.app.Activity#startActivity startActivity()} 以啟動應用行為顯示,且有多個應用程式回應該意圖,則使用者可以選取依預設要使用的應用程式 (透過選取對話方塊底部的核取方塊,請參閱圖 1)。 + +若在執行行為時使用者通常希望每次使用同一應用程式,例如開啟網頁 (使用者可能只使用一個網頁瀏覽器) 或拍攝相片 (使用者可能更喜歡使用一個相機),則此功能非常有用。 + +</p> + +<p>但是,若有多個應用程式可以處理要執行的行為,且使用者可能更希望每次使用不同的應用程式 (例如對於「共用」行為,使用者可能會透過多個應用程式來共用項目),您應明確顯示選擇器對話方塊,如圖 2 所示。 + + +選擇器對話方塊會強制使用者選取行為每次使用的應用程式 (使用者無法選取行為的預設應用程式)。 + +</p> + +<p>若要顯示選擇器,請使用 {@link +android.content.Intent#createChooser createChooser()} 建立 {@link android.content.Intent},並將其傳遞至 {@link +android.app.Activity#startActivity startActivity()}。例如:</p> + +<pre> +Intent intent = new Intent(Intent.ACTION_SEND); +... + +// Always use string resources for UI text. +// This says something like "Share this photo with" +String title = getResources().getString(R.string.chooser_title); +// Create intent to show chooser +Intent chooser = Intent.createChooser(intent, title); + +// Verify the intent will resolve to at least one activity +if (intent.resolveActivity(getPackageManager()) != null) { + startActivity(chooser); +} +</pre> + +<p>以上範例會顯示對話方塊 (將回應意圖的應用程式清單傳遞至 {@link +android.content.Intent#createChooser createChooser()} 方法),並使用提供的文字作為對話方塊的標題。 +</p> + + + |