【问题标题】:Android detect when user clicks on a e-mail in a webviewAndroid 检测用户何时点击 web 视图中的电子邮件
【发布时间】:2016-04-29 09:20:56
【问题描述】:

我有一个具有自定义构建的电子邮件客户端功能的应用程序。电子邮件正文显示在 web 视图中。 如果电子邮件正文中有电子邮件地址,则 web 视图会检测到它并使其可点击。当用户点击电子邮件地址时,Android 会显示一个提示,询问用户想要打开哪个电子邮件应用程序。

当我的应用程序尝试打开电子邮件意图/应用程序时是否可以捕获它?我想为它打开我自己的 Activity。

【问题讨论】:

  • 这意味着您想在点击电子邮件的邮件应用中显示您的应用列表?
  • 不,我希望如果用户在我的应用程序内点击电子邮件链接,我可以通过显示我自己的活动来处理它,而不是打开电子邮件应用程序。
  • 所以您必须只为您的应用处理此事件,而不是其他应用?
  • 这与应用程序外无关。在我的应用程序中有一个 Webview 可以包含电子邮件地址。如果用户点击它。 Android 尝试打开电子邮件应用程序。我想防止这种情况并自己处理。所以如果用户点击一封电子邮件,我想像这样执行我的方法:handleEmailLink(Bundle bundle)
  • 你必须使用深度链接才能做到这一点

标签: android email android-intent webview


【解决方案1】:

在您的清单中添加以下意图过滤器以使其工作。

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

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

            <data
               android:scheme="http" />
        </intent-filter>

【讨论】:

  • 这不起作用,我认为这不是正确的解决方案。请解释你的答案。
【解决方案2】:

我考虑过并决定让我的应用程序支持发送电子邮件。因此,如果用户尝试启动电子邮件意图来发送邮件,我的应用程序现在也会显示为电子邮件应用程序。

感谢@Ravi 给我带来了这个想法。

我使用过这个意图过滤器:

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

【讨论】:

    【解决方案3】:

    可以通过编程覆盖 shouldOverrideUrlLoading 函数。

    override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean
    

    然后检查用户是否点击了mailto链接:

    if(url.startsWith("mailto:")) {
        println("MAIL CLICKED INSIDE WEBVIEW")   
      }
    

    【讨论】:

      猜你喜欢
      • 2020-09-21
      • 2016-08-18
      • 2011-05-04
      • 2012-05-14
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      相关资源
      最近更新 更多