iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 13
0
自我挑戰組

向Android APP開發說Hello系列 第 13

Day 13. App間的資訊傳遞 - Intent

  • 分享至 

  • xImage
  •  

Day12中,我們已經有了一個介面能夠依據使用者輸入的資訊,來計算並顯示便當數量、價格以及是否加購塑膠袋的清單,但是如果要真正送出這個清單(例如透過email),該怎麼做呢?

Intent

Intent,是一個用於傳訊(message)的物件,在另一個app特定的動作要求下執行在另一個app裡的activity。可查詢Common Intent來看常用的Intent有哪些。

Email Intent

Email Intent符合我們的需求,其中:
Action(動作常數)有3種:

  • ACTION_SENDTO (無附件)
  • ACTION_SEND (一個附件)
  • ACTION_SEND_MULTIPLE (多個附件)

Extras(額外資料)有6類:

  • Intent.EXTRA_EMAIL (收件者欄位的string array)
  • Intent.EXTRA_CC (CC欄位的string array)
  • Intent.EXTRA_BCC (BCC欄位的string array)
  • Intent.EXTRA_SUBJECT (主旨的string)
  • Intent.EXTRA_TEXT (內容的string)
  • Intent.EXTRA_STREAM (指向附件的URI)

使用在便當訂購app上

  • Action 選擇 ACTION_SENDTO
  • Extras 選擇 EXTRA_SUBJECTEXTRA_TEXT
  • 在原本的submitOrder()方法內,加入email Intent。
    • 特別要注意的是,為了避免裝置內沒有適當的app來接收這個Intent,需要加入以下code,當有適當的app接收這個intent時,再把Intent傳送給startActivity()來啟動另一個app的Activity
if (intent.resolveActivity(getPackageManager()) != null) {
       startActivity(intent);
   }
    //送出訂單
    public void submitOrder(View view){
        //取得是否加購塑膠袋
        CheckBox plasticBagCheckBox = findViewById(R.id.addPlasticBag_checkbox);
        boolean hasPlasticBag = plasticBagCheckBox.isChecked();
        Log.v("MainActivity", "has plastic bag: " + hasPlasticBag);

        //取得顧客姓名
        EditText customerNameInput = findViewById(R.id.text_input_name);
        String customerName = customerNameInput.getText().toString();

        int price = calculatePrice();

        if(hasPlasticBag==true){
            price += 2;
        }

        String priceMessage = createOrderSummary(price, hasPlasticBag, customerName);
        //displayMessage(priceMessage); //這行用不到了,註解掉
        
        // 加入Intent
        Intent intent = new Intent(Intent.ACTION_SENDTO);
        intent.setData(Uri.parse("mailto:")); // only email apps should handle this
        intent.putExtra(Intent.EXTRA_SUBJECT,  customerName + "先生/小姐 的訂單"); //主旨
        intent.putExtra(Intent.EXTRA_TEXT,  priceMessage); //內容
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivity(intent);
        }
    }

可觀察運作的結果:
在按下送出訂單鈕後,系統將把我們的資訊放入gmail app中,此時只要填入收件者名稱後,就可以送出了。
Alt Text

References


上一篇
Day 12. ScrollView與EditText
下一篇
Day 14. App語言轉換 - Localization
系列文
向Android APP開發說Hello30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言