登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

给Activity定义URL

[复制链接]
来自: MrlLee 分类: Android精品源码 上传时间: 2016-9-8 15:35:48
Tag:release router Failed commit latest

项目介绍:

ActivityRouter



English README.md here



功能



支持给

[Java] 查看源文件 复制代码
Activity
定义URL,这样可以通过URL跳转到
[Java] 查看源文件 复制代码
Activity
,支持在浏览器以及app中跳入。



image



image



集成



根目录build.gradle



buildscript {
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.7'
}
}


项目app/build.gradle



apply plugin: 'android-apt'

dependencies {
compile 'com.github.mzule.activityrouter:activityrouter:1.1.6'
apt 'com.github.mzule.activityrouter:compiler:1.1.5'
}


[Java] 查看源文件 复制代码
AndroidManifest.xml
配置



<activity
android:name="com.github.mzule.activityrouter.router.RouterActivity"
android:theme="@android:style/Theme.NoDisplay">
<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="mzule" />
intent-filter>
activity>


在需要配置的

[Java] 查看源文件 复制代码
Activity
上添加注解



@Router("main")
public class MainActivity extends Activity {
...
}


这样就可以通过

[Java] 查看源文件 复制代码
mzule://main
来打开
[Java] 查看源文件 复制代码
MainActivity
了。



进阶



支持配置多个地址



@Router({"main", "root"})


[Java] 查看源文件 复制代码
mzule://main
[Java] 查看源文件 复制代码
mzule://root
都可以访问到同一个
[Java] 查看源文件 复制代码
Activity



支持获取url中
[Java] 查看源文件 复制代码
?
传递的参数



@Router("main")


上面的配置,可以通过

[Java] 查看源文件 复制代码
mzule://main?color=0xff878798&name=you+are+best
来传递参数,在
[Java] 查看源文件 复制代码
MainActivity#onCreate
中通过
[Java] 查看源文件 复制代码
getIntent().getStringExtra(\"name\")
的方式来获取参数,所有的参数默认为
[Java] 查看源文件 复制代码
String
类型,但是可以通过配置指定参数类型,后面会介绍。



支持在path中定义参数



@Router("main/:color")


通过

[Java] 查看源文件 复制代码
:color
的方式定义参数,参数名为
[Java] 查看源文件 复制代码
color
,访问
[Java] 查看源文件 复制代码
mzule://main/0xff878798
,可以在
[Java] 查看源文件 复制代码
MainActivity#onCreate
通过
[Java] 查看源文件 复制代码
getIntent().getStringExtra(\"color\")
获取到color的值
[Java] 查看源文件 复制代码
0xff878798



支持多级path参数



@Router("user/:userId/:topicId/:commentId")

@Router("user/:userId/topic/:topicId/comment/:commentId")


上面两种方式都是被支持的,分别定义了三个参数,

[Java] 查看源文件 复制代码
userId
,
[Java] 查看源文件 复制代码
topicId
,
[Java] 查看源文件 复制代码
commentId



支持指定参数类型



@Router(value = "main/:color", intParams = "color")


这样指定了参数

[Java] 查看源文件 复制代码
color
的类型为
[Java] 查看源文件 复制代码
int
,在
[Java] 查看源文件 复制代码
MainActivity#onCreate
获取color可以通过
[Java] 查看源文件 复制代码
getIntent().getIntExtra(\"color\", 0)
来获取。支持的参数类型有
[Java] 查看源文件 复制代码
int
,
[Java] 查看源文件 复制代码
long
,
[Java] 查看源文件 复制代码
short
,
[Java] 查看源文件 复制代码
byte
,
[Java] 查看源文件 复制代码
char
,
[Java] 查看源文件 复制代码
float
,
[Java] 查看源文件 复制代码
double
,
[Java] 查看源文件 复制代码
boolean
,默认不指定则为
[Java] 查看源文件 复制代码
String
类型。



支持优先适配



@Router("user/:userId")
public class UserActivity extends Activity {
...
}

@Router("user/statistics")
public class UserStatisticsActivity extends Activity {
...
}


假设有上面两个配置,



不支持优先适配的情况下,

[Java] 查看源文件 复制代码
mzule://user/statistics
可能会适配到
[Java] 查看源文件 复制代码
@Router(\"user/:userId\")
,并且
[Java] 查看源文件 复制代码
userId=statistics



支持优先适配,意味着,

[Java] 查看源文件 复制代码
mzule://user/statistics
会直接适配到
[Java] 查看源文件 复制代码
@Router(\"user/statistics\")
,不会适配前一个
[Java] 查看源文件 复制代码
@Router(\"user/:userId\")



支持Callback



public class App extends Application implements RouterCallbackProvider {
@Override
public RouterCallback provideRouterCallback() {
return new SimpleRouterCallback() {
@Override
public void beforeOpen(Context context, Uri uri) {
context.startActivity(new Intent(context, LaunchActivity.class));
}

@Override
public void afterOpen(Context context, Uri uri) {
}

@Override
public void notFound(Context context, Uri uri) {
context.startActivity(new Intent(context, NotFoundActivity.class));
}

@Override
public void error(Context context, Uri uri, Throwable e) {
context.startActivity(ErrorStackActivity.makeIntent(context, uri, e));
}
};
}
}


[Java] 查看源文件 复制代码
Application
中实现
[Java] 查看源文件 复制代码
RouterCallbackProvider
接口,通过
[Java] 查看源文件 复制代码
provideRouterCallback()
方法提供
[Java] 查看源文件 复制代码
RouterCallback
,具体API如上。



支持Http(s)协议



@Router({"http://mzule.com/main", "main"})


AndroidManifest.xml



<activity
android:name="com.github.mzule.activityrouter.router.RouterActivity"
android:theme="@android:style/Theme.NoDisplay">
...
<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="mzule.com" />
intent-filter>
activity>


这样,

[Java] 查看源文件 复制代码
http://mzule.com/main
[Java] 查看源文件 复制代码
mzule://main
都可以映射到同一个Activity,值得注意的是,在
[Java] 查看源文件 复制代码
@Router
中声明
[Java] 查看源文件 复制代码
http
协议地址时,需要写全称。



支持参数transfer



@Router(value = "item", longParams = "id", transfer = "id=>itemId")


这里通过

[Java] 查看源文件 复制代码
transfer = \"id=>itemId\"
的方式,设定了url中名称为
[Java] 查看源文件 复制代码
id
的参数会被改名成
[Java] 查看源文件 复制代码
itemId
放到参数
[Java] 查看源文件 复制代码
Bundle
中,类型为
[Java] 查看源文件 复制代码
long
. 值得注意的是,这里,通过
[Java] 查看源文件 复制代码
longParams = \"id\"
或者
[Java] 查看源文件 复制代码
longParams = \"itemId\"
都可以设置参数类型为
[Java] 查看源文件 复制代码
long
.



支持应用内调用



Routers.open(context, "mzule://main/0xff878798")
Routers.open(context, Uri.parse("mzule://main/0xff878798"))


通过

[Java] 查看源文件 复制代码
Routers.open(Context, String)
或者
[Java] 查看源文件 复制代码
Routers.open(Context, Uri)
可以直接在应用内打开对应的Activity,不去要经过RouterActivity跳转,效率更高。



支持获取原始 url 信息



getIntent().getStringExtra(Routers.KEY_RAW_URL);


混淆配置



-keep class com.github.mzule.activityrouter.router.** { *; }




相关源码推荐:

我来说两句
所有评论(38)
fancy 2016-9-8 15:41:10
写的真的很不错
回复
九酒 2016-9-8 15:54:43
好好 学习了 确实不错
回复
春城计算机 2016-9-8 16:01:14
感谢大神~
回复
葫芦_eRDJw 2016-9-8 16:09:14
mark,收藏了
回复
rebecca 2016-9-8 16:26:24
支持,感谢,祝巴士越来越好~
回复
ILI 2016-9-8 16:37:04
感谢分享,安卓巴士有你更精彩:lol
回复
孙林 2016-9-8 16:40:03
感谢分享,安卓巴士有你更精彩:)
回复
12345下一页
提取码:  下载次数:27 状态:已购或VIP 售价:10(原价:10)金钱 下载权限:限制会员 
2550 0 27
代码贡献英雄榜
用户名 下载数
联系我们
首页/微信公众账号投稿

帖子代码编辑/版权问题

QQ:435399051,769657487

如何获得代码达人称号

如何成为签约作者

联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表