Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

techChoiceOfAndroid/ActivityRouter

Open more actions menu
 
 

Repository files navigation

ActivityRouter

功能

支持给Activity定义URL,这样可以通过URL跳转到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.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://mainmzule://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/mainmzule://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.** { *; }

许可

Apache License 2.0

联系我

任何相关问题都可以通过以下方式联系我。

  1. 提 issue
  2. 新浪微博 http://weibo.com/mzule
  3. 个人博客 https://mzule.github.io/
  4. 邮件 "mzule".concat("4j").concat("@").concat("gmail.com")

About

Router activities.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Java 100.0%
Morty Proxy This is a proxified and sanitized view of the page, visit original site.