添加依賴
implementation 'com.alibaba:arouter-api:1.5.0'
annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'
配置module
defaultConfig { ...... javaCompileOptions { annotationProcessorOptions { arguments = [ AROUTER_MODULE_NAME : project.getName() ] } } }
上代碼
App完成初始化工作
public class App extends Application { private boolean isDebugArRouter = true; private static Context mContext; public static Context getContext(){ return mContext; } @Override public void onCreate() { super.onCreate(); mContext = getApplicationContext(); if (isDebugArRouter){ ARouter.openDebug(); ARouter.openLog(); } ARouter.init(App.this); } @Override public void onTerminate() { super.onTerminate(); ARouter.getInstance().destroy(); } }
BaseActivity 進行Arouter 注入
public class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ARouter.getInstance().inject(this); } }
攔截器
@Interceptor(priority = 1)//權限 數值越小權限越高 public class UseIInterceptor implements IInterceptor { private String TAG = "UseIInterceptor"; @Override public void process(Postcard postcard, InterceptorCallback callback) { if (postcard.getPath().equals("")){ Log.d(TAG, "process: 你要被攔截了!"); callback.onInterrupt(new Throwable("未知錯誤導致被攔截!")); }else{ callback.onContinue(postcard); } } @Override public void init(Context context) { Log.d(TAG, "init: 初始化攔截器"); } }
MainActivity
//路徑至少需要兩級 @Route(path = Constants.ACTIVITY_URL_MAIN) public class MainActivity extends BaseActivity { private Button button1; private String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button1 =findViewById(R.id.button1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ARouter.getInstance() .build(Constants.ACTIVITY_URL_TARGET) .withString("text","這是TargetActivity") .withInt("time",3) .navigation(MainActivity.this, 123,new NavigationCallback() { @Override public void onFound(Postcard postcard) { //目標路由被發現時調用 Log.d(TAG, "onFound: 發現路由"+postcard.getPath()); } @Override public void onLost(Postcard postcard) { //路由丟失后調用 Log.d(TAG, "onLost: 路由丟失"); } @Override public void onArrival(Postcard postcard) { //路由到達時調用 Log.d(TAG, "onArrival: 路由到達"); } @Override public void onInterrupt(Postcard postcard) { //路由被攔截后調用 Log.d(TAG, "onInterrupt: sorry啊 閣下被攔截了"); } }); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode){ case 123: Toast.makeText(this,"lalala",Toast.LENGTH_SHORT).show(); break; default: break; } } }
TargetActivity
@Route(path = Constants.ACTIVITY_URL_TARGET) public class TargetActivity extends BaseActivity { @Autowired(name = "text") String text; @Autowired(name = "time") int time; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_target); textView = findViewById(R.id.text); textView.setText(text+time); setResult(123); } }
完事兒~ ==