Android使⽤URLScheme唤起APP
现如互联⽹的发展,单个app或者单个平台很难满⾜公司业务的需求,多平台合作或协作是⼤势所趋。并且未来IT业务的发展形势必然要朝着平台化共享化的⽅向发展。业务对于平台的依赖也会越来越强。平台之间的数据交换和共享是必然会发⽣的事情。
扯远了,把视线回归到APP本⾝。不同的APP之间也是需要进⾏数据交互。举个栗⼦简单说下URL Scheme
假如有这么⼀个场景,公司由于业务的发展,需要app⽤户在app内进⾏实名认证,恰好⽀付宝平台提供芝⿇实名认证功能。那么app就需要进⾏唤起⽀付宝app进⾏实名认证,实名认证完毕之后⽀付宝返回实名认证结果。这就完成了不同app之间进⾏了数据交互。
URL Scheme:
android中的scheme是⼀种页⾯内跳转协议,是⼀种⾮常好的实现机制,通过定义⾃⼰的scheme协议,可以⾮常⽅便跳转app中的各个页⾯;通过scheme协议,服务器可以定制化告诉App跳转那个页⾯,可以通过通知栏消息定制化跳转页⾯,可以通过H5页⾯跳转页⾯等。
URL Scheme协议格式:
栗⼦1:
baidu:8080/news?system=pc&id=45464
栗⼦2:
alipays://platformapi/startapp?appId=20000067
http 代表Scheme的协议
baidu代表作⽤于哪个地址域
8080代表路径的端⼝号
news代表Scheme指定的页⾯
system和id代表要传递的参数
URL Scheme使⽤⽅法:
⾸先要在Mainifest⽂件中对要启动的activity进⾏添加过滤器。
<activity
android:name="ample.helloworld.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<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="http" android:host="baidu" android:path="/news" android:port="8080"/>
</intent-filter> </activity>
在activity中进⾏接收参数:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
Intent intent = getIntent();
String scheme = Scheme();
String dataString = DataString();
Uri uri = Data();
System.out.println("scheme:" + scheme);
if (uri != null) {
//完整的url信息
String url = String();
//scheme部分
String schemes = Scheme();
//host部分
String host = Host();
//port部分
int port = Port();
安卓intent用法//访问路径
String path = Path();
//编码路径
String path1 = EncodedPath();
//query部分
String queryString = Query();
//获取参数值
String systemInfo = QueryParameter("system");
String QueryParameter("id");
System.out.println("host:" + host);
System.out.println("dataString:" + dataString);
System.out.println("id:" + id);
System.out.println("path:" + path);
System.out.println("path1:" + path1);
System.out.println("queryString:" + queryString);
}
}
}
调⽤⽅式:
⽹页上调⽤
<a href="baidu:8080/news?system=pc&id=45464">test</a>
native调⽤
if (hasApplication()) {
Intent action = new Intent(Intent.ACTION_VIEW);
StringBuilder builder = new StringBuilder();
builder.append("baidu:8080/news?system=pc&id=45464");
action.setData(Uri.String()));
startActivity(action);
}
/**
* 判断是否安装了应⽤
* @return true 为已经安装
*/
private boolean hasApplication() {
PackageManager manager = PackageManager();
Intent action = new Intent(Intent.ACTION_VIEW);
action.setData(Uri.parse(""));
List list = manager.queryIntentActivities(action, PackageManager.GET_RESOLVED_FILTER);
return list != null && list.size() > 0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论