【问题标题】:Receiving data for custom url scheme in Android在 Android 中接收自定义 url 方案的数据
【发布时间】:2023-07-16 08:32:01
【问题描述】:

目前在我的应用程序中,我有自己的 URI 方案来检测用户何时单击特定 URI。

Manifest文件中使用的代码如下:

<intent-filter>
          <category android:name="android.intent.category.DEFAULT" />
          <category android:name="android.intent.category.BROWSABLE" />
          <data android:scheme="http" android:host="com.test/>
          <action android:name="android.intent.action.VIEW" />
  </intent-filter>

如果用户在浏览器中单击包含我的自定义 URI 的链接,它将弹出一个选项供用户选择我的应用程序。

但是,当我开始进行进一步处理时,我如何传递这些数据,它是我的应用程序的链接?基本上我如何将数据从浏览器传递到我的应用程序?

【问题讨论】:

  • 为什么要设置两次android.intent.action.VIEW?
  • @portfoliobuilder 应该是一次,猜猜写两次不会报错,所以会漏掉。

标签: android android-intent android-manifest


【解决方案1】:

假设你的网址是:http://twitter.com/status/1234
您可以使用以下方法获取数据。

  // http://twitter.com/status/1234
    Uri data = getIntent().getData();
    Log.d(TAG, data.toString());
    String scheme = data.getScheme(); // "http"
    Log.d(TAG, scheme);
    String host = data.getHost(); // "twitter.com"
    Log.d(TAG, host);
    String inurl = data.toString();
    List<String> params = data.getPathSegments();
    String first = params.get(0); // "status"
    String second = params.get(1); // "1234"

【讨论】:

  • 我总是在 Paths 中得到 null:( 但是数据是正确的而不是 null。
  • data.pathSegments 为空