一、什么是自定义URI
自定义URI是指我们可以通过定义一些特定的协议(如:myapp://)和特定的URI结构(如:myapp://page/home)来让其他应用或者网页调用我们的应用,从而实现应用间相互跳转的功能。自定义URI也被称为“Scheme URL”。
在Android平台上,我们可以通过定义intent-filter来监听指定的URI,并在URI被调用时启动相应的Activity。实现自定义URI功能需要完成以下两个步骤:
- 在AndroidManifest.xml文件中定义intent-filter,引导系统将这个URI转发到App相应的Activity中。
- 在相应的Activity中获取URI数据,并根据传递的参数执行相应的操作。
下面我们将对这两个步骤进行详细的介绍。
二、定义intent-filter
对于我们的应用,我们需要在AndroidManifest.xml文件中定义一个intent-filter。这个intent-filter定义了一个URI的规则,以及当这个URI被调用时,Android系统应该启动哪个Activity。下面是一个示例:
<activity android:name=".MainActivity"> <intent-filter> <data android:scheme="myapp" android:host="page" android:pathPrefix="/home" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> </intent-filter> </activity>
在上面的代码中,我们定义了一个Activity,并为这个Activity定义了一个intent-filter。其中,我们使用了data元素设置了这个URI的规则,scheme用于设置协议,host用于设置URI的主机名,pathPrefix用于设置路径匹配规则。我们设置的URI规则为“myapp://page/home”。
同时,在intent-filter中,我们还通过设置action和category元素来指示这个Activity是响应View Intent,并且支持在浏览器中打开这个URI。
三、获取URI数据并执行操作
在我们定义了intent-filter之后,我们需要在响应这个URI的Activity中获取URI数据。我们可以通过Intent对象的getData()方法来获取URI数据。下面是一个示例:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = getIntent(); Uri data = intent.getData(); if (data != null) { String host = data.getHost(); String path = data.getPath(); //todo 根据host和path执行相应的操作 } }
在上面的代码中,我们在Activity的onCreate()方法中,通过getIntent()方法获取到启动这个Activity的Intent对象,并通过getData()方法获取了URI数据。在获取到URI数据之后,我们可以通过host和path来判断调用这个URI时传递的参数,并根据参数来执行相应的操作。
四、小结
通过自定义URI,我们可以实现应用间相互跳转的功能。在Android平台上,我们可以通过定义intent-filter来监听指定的URI,并在URI被调用时启动相应的Activity。实现自定义URI功能需要完成两个步骤:在AndroidManifest.xml文件中定义intent-filter,引导系统将这个URI转发到App相应的Activity中;在相应的Activity中获取URI数据,并根据传递的参数执行相应的操作。