为什么Intent.ACTION_SENDTO包含该应用程序作为选项

时间:2019-03-26 09:24:05

标签: android android-intent

“我的导航抽屉”包含一个用于通过电子邮件与开发人员联系的选项。为此,我根据文档提供了代码。但是,单击“联系开发人员”时,显示的选项包括我的应用程序,该应用程序无法发送电子邮件。我已经在网上搜索了此问题,但未找到任何相关内容。如何将用户的选项限制为仅电子邮件应用程序? 下面包括MainActivity.java中的方法和AndroidManfiest中的intent-filter。

MainActivity.java

    //METHOD: Allow user's to send email to developer
    public void composeEmail() {
        Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
        emailIntent.setData(Uri.parse("mailto:")); // only email apps should handle this
        emailIntent.putExtra(Intent.EXTRA_EMAIL, "contact@developer.com");
        emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Email subject");
        if (emailIntent.resolveActivity(getPackageManager()) != null) {
            startActivity(emailIntent);
        }
    }

AndroidManifest.xml

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

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <!--Intent filter for sending email-->
            <intent-filter>
                <action android:name="android.intent.action.SENDTO" />
                <data android:scheme="mailto" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>

1 个答案:

答案 0 :(得分:0)

@Mike M.的答案正确。

  

第二个意图过滤器表示您的应用程序确实可以处理电子邮件。您不需要它就可以发送电子邮件。删除它,您的应用程序将不再显示为选项。 – Mike M。

我不必要地从文档中复制了示例意图过滤器:。将AndroidManifest.xml编辑为以下代码已解决了该问题。

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