如何指定URL Deeplink Android清单

时间:2019-01-10 21:36:28

标签: android xml android-manifest android-deep-link

问题是我不知道如何通过此链接“ my.app//id=819”进行深链接

我尝试了一些数据变体,但无法理解路径模式

<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="my.app" 
        android:host="id" 
        android:pathPattern="=.*"/>

期望是午餐意图,并获取id的值

2 个答案:

答案 0 :(得分:0)

使用<intent-filter>,您可以指定活动应处理的网址。一旦系统检测到您的应用程序中的活动能够处理url,就会打开该活动,您就可以获取Extra.getData()对象中的数据。

在您的AndroidManifest.xml文件中:

<activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
        <intent-filter android:label="My app preview">
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>

            <data
                android:host="www.myapp.com/api/id"
                android:pathPrefix="/api/" <!-- optional, you can skip this field if your url doesn't have prefix-->
                android:scheme="http"/>
            <data
                android:host="www.myapp.com/api/id"
                android:pathPrefix="/api/" <!-- optional, you can skip this field -->
                android:scheme="https"/>
        </intent-filter>
</activity>

在您的活动中:

public class MainActivity extends Activity {    
       Bundle bundle = getIntent.getExtras();

       @Override
       protected void onCreate(@Nullable Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           handleExtra(getIntent());
       }

       // If your app is in opened in background and you attempt to open an url, it 
       // will call this function instead of onCreate()
       @Override
       protected void onNewIntent(Intent intent) {
           super.onNewIntent(intent);
           setIntent(intent);
           handleExtra(getIntent());
       }

       private void handleExtra(Intent intent) {
           String myID = intent.getData().getLastPathSegment();
           ....
       }
}

答案 1 :(得分:0)

您的意思是类似my.app//host?id=819,对吧?

您在my.app//host周围构建了意图过滤器,不包含参数。

Add intent filters for incoming links

<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="my.app"
          android:host="host" />
</intent-filter>

然后在活动中,您可以解析参数Read data from incoming intents

Intent intent = getIntent();
Uri data = intent.getData();

data中,您可以使用Uri#getQueryParameter()819中获取id

String id = data.getQueryParameter("id");