【问题标题】:Open my app from a link从链接打开我的应用
【发布时间】:2015-09-24 12:56:12
【问题描述】:

在我的应用程序中,服务器发送此链接:appname://veryfy?email=test@mail.com&token=asdf-asdf-asdf-xcfghfgh,但是否可以获得email= test@mail.comtoken = sdfdkgdkgjgfd 之类的值。

到目前为止,我只在清单中添加了这个意图过滤器,但没有调用应用程序:

<intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <action android:name="android.intent.action.SEND"/>
                <category android:name="android.intent.category.DEFAULT"/>

                <data android:mimeType="text/plain" android:scheme="appname://"/>
            </intent-filter>

请注意,当在浏览器中单击链接时,这应该会打开我的应用程序

【问题讨论】:

  • 注意拼写:apname vs. appname
  • @Henry 完成,感谢您的留言
  • @DarkoPetkovski 我已经用你得到的网址编辑了我的答案。

标签: android android-intent android-filter android-implicit-intent


【解决方案1】:

您可以通过像这样获取 Activity 的 Intent 来获取电子邮件和令牌:

    <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                    <action android:name="android.intent.action.SEND"/>
                    <category android:name="android.intent.category.DEFAULT"/>

                    <data android:mimeType="text/plain" android:scheme="https" 
                     android:host="api.myapp.com"
                     android:pathPrefix="/api/v2/verify"/>
       </intent-filter>

Intent intent = getIntent();
Uri data = intent.getData();
String email = data.getQueryParameter("email");
String token = data.getQueryParameter("token");

【讨论】:

    【解决方案2】:

    过滤器中的方案应该只是 appname,而不是 appname://

    android:scheme="appname"
    

    【讨论】:

      【解决方案3】:

      试试这个

          <activity
                android:name=".MainActivity"
                android:label="@string/title_activity_main" 
                android:exported="true">
              <intent-filter>
                              <action android:name="android.intent.action.MAIN" />
                              <category android:name="android.intent.category.LAUNCHER" />
                              <action android:name="android.intent.action.SEND"/>
                              <category android:name="android.intent.category.DEFAULT"/>
      
                              <data android:mimeType="text/plain" android:scheme="appname"/>
                 </intent-filter>
      </activity>
      

      要获取您的 url 参数,请将其写入您的活动中

      Uri data = getIntent().getData();
      String scheme = data.getScheme(); 
      String host = data.getHost(); 
      List<String> params = data.getPathSegments();
      String first = params.get(0); 
      String second = params.get(1); 
      

      【讨论】:

      • 其实我刚刚注意到这不是我得到的链接,我可以解析这个:https://api.myapp.com/api/v2/verify?email=test@gmail.com&amp;token=1231-0444-44e0-bb69-4192fd0fec6b
      【解决方案4】:

      试试这个:

      <intent-filter>
                  <action android:name="android.intent.action.MAIN" />
                  <category android:name="android.intent.category.LAUNCHER" />
                  <action android:name="android.intent.action.VIEW"/>
                  <category android:name="android.intent.category.DEFAULT"/>
                  <data android:mimeType="text/plain" android:scheme="appname"/>
      </intent-filter>
      

      以及网络上的链接:

      <a href="appname://veryfy?email=test@mail.com&token=asdf-asdf-asdf-xcfghfgh">
      

      在您的 Activity 中获取数据:

      // check if this intent is started via custom scheme link
      Intent intent = getIntent();
      String action = intent.getAction();
      if (action != null && action.equals(Intent.ACTION_VIEW) {
         Uri uri = intent.getData();
         String scheme = uri.getScheme();
         if (scheme.equals("appname") {
            String email = uri.getQueryParameter("email");
            String token = uri.getQueryParameter("token");
         }
      }
      

      【讨论】:

      • 你知道我怎样才能得到电子邮件和令牌吗?
      • 其实我刚刚注意到这不是我得到的链接,我可以解析这个:api.myapp.com/api/v2/…‌​b69-4192fd0fec6b
      • 好的,然后用“https”更改您的方案。如果您想将该方案用于其他事情,则不会发生冲突,您可以验证主机是否是 web 的。 if(uri.getHost() .equals("api.myapp.com") ...
      猜你喜欢
      • 2019-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多