【问题标题】:Launch android app when a link is tapped on SMS在 SMS 上点击链接时启动 android 应用程序
【发布时间】:2013-04-21 03:57:49
【问题描述】:

我不知道是否有很多人尝试过,但我正在尝试构建一个应用程序,该应用程序需要用户点击他/她收到的短信上的链接,这将启动 Android 应用程序。可以在android中做吗?如果是,我该怎么做?我知道这可以在IOS中完成。任何建议或帮助将不胜感激。谢谢你。

【问题讨论】:

    标签: android android-intent sms launching-application


    【解决方案1】:

    在您的清单中,在您要处理来自消息应用程序中单击的链接的传入数据的 Activity 下,定义如下内容:

    <activity android:name=".SomeActivityName" >
    
        <intent-filter>
            <category android:name="android.intent.category.DEFAULT" />
            <action android:name="android.intent.action.VIEW" />
            <data android:scheme="com.your_package.something" />
        </intent-filter>
    
    </activity>
    

    这里的android:scheme="" 将确保 Activity 会对其中包含的任何数据做出反应:

    <data android:scheme="com.your_package.something" />
    

    SomeActivityName名称用作说明。当然,您将使用自己的 :-)),您可以像这样运行检查:

    Uri data = getIntent().getData();
    String strData = data.toString();
    if (strScreenName.equals("com.your_package.something://"))  {
        // THIS IS OPTIONAL IN CASE YOU NEED TO VERIFY. THE ACTUAL USAGE IN MY APP IS BELOW THIS BLOCK
    }
    

    我的应用的类似用法:

    Uri data = getIntent().getData();
    strScreenName = data.toString()
            .replaceAll("com.some_thing.profile://", "")
            .replaceAll("@", "");
    

    我用它来处理我的应用程序中对 twitter @username 链接的点击。我需要去掉com.some_thing.profile://@ 以获取用户名以进行进一步处理。清单代码完全相同(仅更改了 namescheme)。

    【讨论】:

    • 好的,当我收到一条消息时(例如:myapp://get/256298xxxx)它应该突出显示文本上的 myapp://get/256298xxxx 部分。但事实并非如此。我应该如何解决这个问题?当部分 myapp://get/256298xxxx 甚至没有单独突出显示作为文本中按下的链接时,应用程序将如何启动
    • @nishan_vodoo:这是因为 myapp://get/256298xxxx 不是 SMS 应用程序解析它并将其显示为链接的有效 URL。充其量,它会将数字序列解析为电话号码。您必须在 SMS 中发送一个有效的 URL。看一个具体的例子:stackoverflow.com/a/3865145/450534.
    • 感谢大家花时间回答我的问题。
    • @Fred:是的。无论连接如何,此功能都有效。但是,如果打开的 Activity 需要 Internet,那就另当别论了。
    • 也许正确的是if (strData.equals而不是if (strScreenName.equals
    【解决方案2】:

    向您的应用添加intent-filter,以侦听遵循您希望启动应用的格式的链接。

    但是,这将是一个全局侦听器,任何符合格式的链接甚至在 SMS 应用程序之外都会触发您的应用程序。因此,如果用户在 Web 浏览器中点击类似的链接,您的应用将尝试响应它。

    此外,如果除了您的应用程序之外还有其他应用程序可以处理此链接,Android 将创建一个选择器,允许用户选择他们想要使用的任何应用程序。除了建议用户将您的应用设置为此类链接的默认处理程序之外,您无能为力。

    【讨论】:

      【解决方案3】:
        <intent-filter>
              <category android:name="android.intent.category.DEFAULT" />
              <action android:name="android.intent.action.VIEW" />
              <category android:name="android.intent.category.BROWSABLE"
              <data android:scheme="https" android:host="${hostName}" android:pathPattern="/.*" />
        </intent-filter>
      

      以前的答案都可以,但不要忘记指定模式。

      See more details here.

      还要在 Gradle 文件中定义您的主机名,例如:

      android {
          defaultConfig {
              manifestPlaceholders = [hostName:"subdomain.example.com"]
          }
      }
      

      更多关于manifestPlaceholdershere.的信息

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-16
        • 1970-01-01
        • 1970-01-01
        • 2014-09-13
        • 2013-06-12
        • 2016-04-17
        相关资源
        最近更新 更多