通过电子邮件发送WhatsApp聊天时,如何让我的Android应用程序出现在应用选择器中?

时间:2015-10-11 16:46:45

标签: android email android-intent whatsapp

当我在WhatsApp中使用“电子邮件对话”功能时,我有兴趣让我的应用显示在所显示的应用列表中。

使用“电子邮件对话”WhatsApp功能登录手机时,我可以看到Gmail收到SEND_MULTIPLE意图:

I/ActivityManager(  859): START u0 {act=android.intent.action.SEND_MULTIPLE typ=text/* flg=0xb080001 pkg=com.google.android.gm cmp=com.google.android.gm/.ComposeActivityGmail (has clip) (has extras)} from uid 10114 on display 0

所以我想我需要为我的应用清单中的SEND_MULTIPLE操作添加一个意图过滤器。

目前我的AndroidManifest.xml是:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="co.xxx.xxx" >


<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme" >


    <activity
        android:name=".MyActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>


        <intent-filter>
            <action android:name="android.intent.action.SENDTO" />

            <data android:scheme="mailto" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <data android:scheme="mailto" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.SEND_MULTIPLE" />

            <data android:mimeType="*/*" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.SEND" />

            <data android:mimeType="*/*" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>

    </activity>

</application>

</manifest>

然而,当我通过Android Studio在手机中运行我的应用程序时,在尝试导出我的WhatsApp对话时它不会显示。相反,它在尝试共享我的画廊的图片时显示在app选择器中。

我在AndroidManifest中遗漏了什么,以防止在通过电子邮件发送我的WhatsApp会话时显示我的应用程序?我还需要向操作系统公布其他内容,以使我的应用程序可以出现在应用选择器中吗?

我尝试安装K-9 Mail应用。安装后,在WhatsApp中通过电子邮件发送聊天时,它不会显示在应用选择器中,但在K-9中设置帐户后,它会出现在选择器中。 K9是否有可能向操作系统宣布它已准备好发送电子邮件?

谢谢!

1 个答案:

答案 0 :(得分:13)

不幸的是,即使您的清单配置正确,也无法在通过电子邮件发送聊天时在应用选择器中看到您的应用,因为您的应用需要被WhatsApp列入白名单。 WhatsApp的应用程序选择器中仅提供所选的包名称。

例如,我们有一个包名为com.example.whatsappemailchat的应用。 AndroidManifest.xml就像这样:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.whatsappemailchat" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.whatsappemailchat.MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SENDTO"/>
                <data android:scheme="mailto"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SEND"/>
                <data android:mimeType="*/*"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SEND_MULTIPLE"/>
                <data android:mimeType="*/*"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <data android:scheme="mailto"/>

                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

这是build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "com.example.whatsappemailchat"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

一切都配置正确,我们运行我们的应用程序,但如果我们选择More > Email chat,我们的应用就不会出现。

现在,在我们applicationId中将com.google.android.gm.test更改为.test(Gmail的程序包名称加上build.gradle作为后缀,以避免与真实的Gmail发生冲突):

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "com.google.android.gm.test"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

现在运行我们的应用程序,打开WhatsApp,选择一个聊天,选择More > Email chat,我们的应用程序将在应用程序选择器中神奇地生成,如您在此屏幕截图中所示:

enter image description here

我可以确认WhatsApp将这些软件包名称列入白名单:

  • com.google.android.gm
  • com.fsck.k9
  • com.boxer.email
  • com.google.android.email

我认为唯一可行的解​​决方案是尝试联系WhatsApp并询问是否可以将您的软件包名称列入白名单。