ActivityRouter
来源:互联网 发布:中科大算法导论 编辑:程序博客网 时间:2024/06/07 23:14
ActivityRouter
English README.md here
功能
支持给Activity
定义 URL,这样可以通过 URL 跳转到Activity
,支持在浏览器以及 app 中跳入。
集成
根目录 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.7' apt 'com.github.mzule.activityrouter:compiler:1.1.5'}
在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" /><!--改成自己的 scheme--> </intent-filter></activity>
在需要配置的Activity
上添加注解
@Router("main")public class MainActivity extends Activity { ...}
这样就可以通过mzule://main
来打开MainActivity
了。
进阶
支持配置多个地址
@Router({"main", "root"})
mzule://main
和mzule://root
都可以访问到同一个Activity
支持获取 url 中?
传递的参数
@Router("main")
上面的配置,可以通过mzule://main?color=0xff878798&name=you+are+best
来传递参数,在MainActivity#onCreate
中通过getIntent().getStringExtra("name")
的方式来获取参数,所有的参数默认为String
类型,但是可以通过配置指定参数类型,后面会介绍。
支持在 path 中定义参数
@Router("main/:color")
通过:color
的方式定义参数,参数名为color
,访问mzule://main/0xff878798
,可以在MainActivity#onCreate
通过getIntent().getStringExtra("color")
获取到 color 的值0xff878798
支持多级 path 参数
@Router("user/:userId/:topicId/:commentId")@Router("user/:userId/topic/:topicId/comment/:commentId")
上面两种方式都是被支持的,分别定义了三个参数,userId
,topicId
,commentId
支持指定参数类型
@Router(value = "main/:color", intParams = "color")
这样指定了参数color
的类型为int
,在MainActivity#onCreate
获取 color 可以通过getIntent().getIntExtra("color", 0)
来获取。支持的参数类型有int
,long
,short
,byte
,char
,float
,double
,boolean
,默认不指定则为String
类型。
支持优先适配
@Router("user/:userId")public class UserActivity extends Activity { ...}@Router("user/statistics")public class UserStatisticsActivity extends Activity { ...}
假设有上面两个配置,
不支持优先适配的情况下,mzule://user/statistics
可能会适配到@Router("user/:userId")
,并且userId=statistics
支持优先适配,意味着,mzule://user/statistics
会直接适配到@Router("user/statistics")
,不会适配前一个@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)); } }; }}
在Application
中实现RouterCallbackProvider
接口,通过provideRouterCallback()
方法提供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>
这样,http://mzule.com/main
和mzule://main
都可以映射到同一个 Activity,值得注意的是,在@Router
中声明http
协议地址时,需要写全称。
支持参数 transfer
@Router(value = "item", longParams = "id", transfer = "id=>itemId")
这里通过transfer = "id=>itemId"
的方式,设定了 url 中名称为id
的参数会被改名成itemId
放到参数Bundle
中,类型为long
. 值得注意的是,这里,通过longParams = "id"
或者longParams = "itemId"
都可以设置参数类型为long
.
支持应用内调用
Routers.open(context, "mzule://main/0xff878798")Routers.open(context, Uri.parse("mzule://main/0xff878798"))
通过Routers.open(Context, String)
或者Routers.open(Context, Uri)
可以直接在应用内打开对应的 Activity,不去要经过 RouterActivity 跳转,效率更高。
支持获取原始 url 信息
getIntent().getStringExtra(Routers.KEY_RAW_URL);
混淆配置
-keep class com.github.mzule.activityrouter.router.** { *; }
- ActivityRouter
- 1. ActivityRouter
- 组件化开发小帮手activityRouter
- 浅谈JavaScript中创建对象的几种方式
- windows 下环境变量 path 详解
- Java是纯面向对象的语言吗?
- Error:(1, 0) Plugin with id 'com.android.application' not found的解决方法
- ListView分页
- ActivityRouter
- BadBoy 手册
- zookeeper在window下使用
- 服务器是否支持断点续传
- UVA 1468 Restaurant ?
- 一款在线视频 App,基于 Material Design + MVP + RxJava + Retrofit + Realm + Glide
- ContentProvider和Uri详解
- UIWebView禁用长按选中复制等功能
- 四种常见的 POST 提交数据方式