<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                > 編寫:[kesenhoo](https://github.com/kesenhoo) - 原文:[http://developer.android.com/training/basics/intents/filters.html](http://developer.android.com/training/basics/intents/filters.html) 前兩節課主要講了從一個app啟動另外一個app。但如果我們的app的功能對別的app也有用,那么其應該做好響應的準備。例如,如果創建了一個social app,它可以分享messages 或者 photos 給好友,那么最好我們的app能夠接收`ACTION_SEND` 的intent,這樣當用戶在其他app觸發分享功能的時候,我們的app能夠出現在待選對話框。 通過在manifest文件中的[`<activity>`](http://developer.android.com/guide/topics/manifest/activity-element.html)標簽下添加[`<intent-filter>`](http://developer.android.com/guide/topics/manifest/intent-filter-element.html)的屬性,使其他的app能夠啟動我們的[activity](# "An activity represents a single screen with a user interface.")。 當app被安裝到設備上時,系統可以識別intent filter并把這些信息記錄下來。當其他app使用implicit intent執行 startActivity() 或者 startActivityForResult()時,系統會自動查找出那些可以響應該intent的[activity](# "An activity represents a single screen with a user interface.")。 ### 添加Intent Filter 為了盡可能確切的定義[activity](# "An activity represents a single screen with a user interface.")能夠handle的intent,每一個intent filter都應該盡可能詳盡的定義好action與data。 若[activity](# "An activity represents a single screen with a user interface.")中的intent filter滿足以下intent對象的標準,系統就能夠把特定的intent發送給[activity](# "An activity represents a single screen with a user interface."): - **Action**:一個想要執行的動作的名稱。通常是系統已經定義好的值,如`ACTION_SEND`或`ACTION_VIEW`。在intent filter中通過[`<action>`](http://developer.android.com/guide/topics/manifest/action-element.html)指定它的值,值的類型必須為字符串,而不是API中的常量(看下面的例子) - **Data**:Intent附帶數據的描述。在intent filter中通過[`<data>`](http://developer.android.com/guide/topics/manifest/data-element.html)指定它的值,可以使用一個或者多個屬性,我們可以只定義MIME type或者是只指定URI prefix,也可以只定義一個URI scheme,或者是他們綜合使用。 > **Note:** 如果不想handle Uri 類型的數據,那么應該指定 android:mimeType 屬性。例如 text/plain or image/jpeg. - **Category**:提供一個附加的方法來標識這個[activity](# "An activity represents a single screen with a user interface.")能夠handle的intent。通常與用戶的手勢或者是啟動位置有關。系統有支持幾種不同的categories,但是大多數都很少用到。而且,所有的implicit intents都默認是 CATEGORY_DEFAULT 類型的。在intent filter中用[`<category>`](http://developer.android.com/guide/topics/manifest/category-element.html)指定它的值。 在我們的intent filter中,可以在`<intent-filter>`元素中定義對應的XML元素來聲明我們的[activity](# "An activity represents a single screen with a user interface.")使用何種標準。 例如,這個有intent filter的[activity](# "An activity represents a single screen with a user interface."),當數據類型為文本或圖像時會處理`ACTION_SEND`的intent。 ~~~ <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> ~~~ 每一個發送出來的intent只會包含一個action與data類型,但handle這個intent的[activity](# "An activity represents a single screen with a user interface.")的 `<intent-filter>`可以聲明多個`<action>`, `<category>`與`<data>` 。 如果任何的兩對action與data是互相矛盾的,就應該創建不同的intent filter來指定特定的action與type。 例如,假設我們的[activity](# "An activity represents a single screen with a user interface.")可以handle 文本與圖片,無論是`ACTION_SEND`還是`ACTION_SENDTO` 的intent。在這種情況下,就必須為兩個action定義兩個不同的intent filter。因為`ACTION_SENDTO` intent 必須使用 Uri 類型來指定接收者使用 send 或 sendto 的地址。例如: ~~~ <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> ~~~ > **Note:**為了接受implicit intents, 必須在我們的intent filter中包含 CATEGORY_DEFAULT 的category。startActivity()和startActivityForResult()方法將所有intent視為聲明了CATEGORY_DEFAULT category。如果沒有在的intent filter中聲明CATEGORY_DEFAULT,[activity](# "An activity represents a single screen with a user interface.")將無法對implicit intent做出響應。 更多sending 與 receiving ACTION_SEND intents執行social sharing行為的,請查看上一課:[接收](#)[Activity](# "An activity represents a single screen with a user interface.")返回的結果(Getting a Result from an [Activity](# "An activity represents a single screen with a user interface.")) ### 在[Activity](# "An activity represents a single screen with a user interface.")中Handle發送過來的Intent 為了決定采用哪個action,我們可以讀取Intent的內容。 可以執行[getIntent()](http://developer.android.com/reference/android/app/Activity.html#getIntent()) 來獲取啟動我們[activity](# "An activity represents a single screen with a user interface.")的那個intent。我們可以在[activity](# "An activity represents a single screen with a user interface.")生命周期的任何時候去執行這個方法,但最好是在`onCreate()`或者`onStart()`里面去執行。 ~~~ @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 ... } } ~~~ ### 返回Result 如果想返回一個result給啟動的那個[activity](# "An activity represents a single screen with a user interface."),僅僅需要執行[setResult()](http://developer.android.com/reference/android/app/Activity.html#setResult(int, android.content.Intent)),通過指定一個result code與result intent。操作完成之后,用戶需要返回到原來的[activity](# "An activity represents a single screen with a user interface."),通過執行finish() 關閉被喚起的[activity](# "An activity represents a single screen with a user interface.")。 ~~~ // 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(); ~~~ 我們必須總是指定一個result code。通常不是`RESULT_OK`就是`RESULT_CANCELED`。我們可以通過Intent 來添加需要返回的數據。 > **Note:**默認的result code是`RESULT_CANCELED`.因此,如果用戶在沒有完成操作之前點擊了back key,那么之前的[activity](# "An activity represents a single screen with a user interface.")接受到的result code就是"canceled"。 如果只是純粹想要返回一個int來表示某些返回的result數據之一,則可以設置result code為任何大于0的數值。如果我們返回的result只是一個int,那么連intent都可以不需要返回了,可以調用`setResult()`然后只傳遞result code如下: ~~~ setResult(RESULT_COLOR_RED); finish(); ~~~ > **Note:**我們沒有必要在意自己的[activity](# "An activity represents a single screen with a user interface.")是被用startActivity() 還是 startActivityForResult()方法所叫起的。系統會自動去判斷該如何傳遞result。在不需要的result的case下,result會被自動忽略。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看