如何取得 Android app 的 Package Name 並透過 Intent 發送訊息

在 Android 手機的應用上,拜各種類型 App 的發達之故,現在我們可以透過這些 App 發送像是文字訊息、聲音訊息、圖片與影片等等各式不同的資料。一般日常的應用即可常常看到諸如 透過facebook發送透過LINE 發送等等這些「 透過特定 App 發送 」的請求,這要怎麼做到呢?

其實這與 Android 透過 Share Intent 來發送並沒有太大的區別,只不過 Share Intent 會自動幫我們撈出目前安裝的 App 中,有哪些 App 是能夠支援我們所要發送的請求的;而透過指定特定 App 發送資料,就得必須要先知道該 App 的 Package Name 為何,才有辦法在建立 Intent 的時候指派進去,系統才知道屆時直接呼叫起這個 App 來發送,另外,如此一來也能夠利用 startActivityForResult 針對特定的 App 的回傳值撰寫對應的程式邏輯。

取得 App Package Name 的方法:

  • 透過 Google Play 網站(推薦!):
    1. 前往該 App 的頁面,以 LINE 為例的話,便是 https://play.google.com/store/apps/details?id=jp.naver.line.android
    2. URL 中的 id=jp.naver.line.android 這個 id 的參數便是 Package Name 了!
  • 透過 Manifest.xml:若是能夠取得該 App 的 .apk 檔案的話,直接將其透過解壓縮軟體解壓縮後,便可以得到 Manifest.xml
  • 透過 ADB shell
    1. 將該 App 安裝至手機中,並且透過 USB 連接手機,利用 adb devices 確認 ADB 是否與裝置連接成功
    2. 執行 adb shell
    3. 執行 pm list packages -f 取得目前所有安裝在手機上的 app 的 package name
  • 透過PackageManager:在程式邏輯中實作取得

呼叫特定 Intent 發送訊息的方法:

利用下列範例即可透過欲指定的 App 來發送訊息、圖片、影像等:

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "Your Message Here");
sendIntent.setType("text/plain");
sendIntent.setPackage("Package Name Here");
startActivity(sendIntent);
comments powered by Disqus