Android---接收來自其他應用程式的內容

來源:互聯網
上載者:User

就像你的應用程式能夠把資料發送給其他應用程式一樣,它也可以很容易的接收來自其他應用程式的資料。在接收來自其他應用程式的資料時,需要考慮使用者如何跟你的應用程式進行互動,以及你的應用程式想要接收的資料類型。例如,一個社交網路應用程式應該對接收常值內容感興趣,如感興趣的來自另外一個應用程式的Web網址(URL)。Android的Google+應用程式會接收文本和圖片(一張或多張)。使用這個應用程式,使用者可以輕鬆的啟動Google+來發送來自Android圖庫應用中的圖片。

更新你的清單

Intent過濾器會通知系統,一個應用程式組件會接收什麼樣的Intent對象。在資訊清單檔中,使用<intent-filter>元素定義一個Intent過濾器。例如,如果你的應用程式要處理接收的文本、任意類型的圖片(一張或多張),你應該像下面這樣定義資訊清單檔:

<activityandroid:name=".ui.MyActivity">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SEND_MULTIPLE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>
</activity>

注意:有關Intent過濾器和Intent解析的更多資訊請看Intent和Intent過濾器

當另外一個應用程式通過構造一個Intent對象,並把它傳遞給startActivity()來共用這些東西時,你的應用程式就會作為一個清單項目被列在Intent選取器中。如果使用者選擇了你的應用程式,對應的Activity(上例中的.ui.MyActivity)就被啟動。然後你就可以在你的代碼和UI中處理相應的內容了。

處理輸入的內容

要處理由Intent對象所發送的內容,就要從調用getIntent()方法來獲得Intent對象開始。一旦你獲得了這個對象,就可以檢查它的內容來判斷下一步的工作。要記住,如果被啟動的Activity是來自系統的其他部分,如Launcher,那麼在檢查Intent對象時,需要對此加以考慮。

void onCreate (Bundle savedInstanceState){
    ...
    // Get intent, action and MIME type
    Intent intent = getIntent();
    String action = intent.getAction();
    String type = intent.getType();
 
    if (Intent.ACTION_SEND.equals(action) && type != null) {
        if ("text/plain".equals(type)) {
            handleSendText(intent); // Handle text being sent
        } else if (type.startsWith("image/")) {
            handleSendImage(intent); // Handle single image being sent
        }
    } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {
        if (type.startsWith("image/")) {
            handleSendMultipleImages(intent); // Handle multiple images being sent
        }
    } else {
        // Handle other intents, such as being started from the home screen
    }
    ...
}
 
void handleSendText(Intent intent) {
    String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
    if (sharedText != null) {
        // Update UI to reflect text being shared
    }
}
 
void handleSendImage(Intent intent) {
    Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
    if (imageUri != null) {
        // Update UI to reflect image being shared
    }
}
 
void handleSendMultipleImages(Intent intent) {
    ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
    if (imageUris != null) {
        // Update UI to reflect multiple images being shared
    }
}

警告:要額外仔細的檢查輸入的資料,因為你不知道其他的應用程式會給你發送什麼內容。例如,MIME類型可能被錯誤的設定,或者被發送的圖片可能超大。還要記住的時,二進位的資料要在獨立的線程中處理,而不是在主線程(UI)中。

更新UI可以像填寫EditText控制項一樣簡單,或者是應用與複雜的感興趣的圖片過濾。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.