自定义Notification 实现:
1 | // RemoteViews for notification |
1.使用 NotificationCompat 兼容各个版本差异性
2.RemoteViews 布局文件不支持 constraintlayout ,切记
3.在SDK 26之后必须要绑定Channel,所以通知要先创建Channel
1 | fun checkAndCreateChannel( |
自定义Notification 实现:
1 | // RemoteViews for notification |
1.使用 NotificationCompat 兼容各个版本差异性
2.RemoteViews 布局文件不支持 constraintlayout ,切记
3.在SDK 26之后必须要绑定Channel,所以通知要先创建Channel
1 | fun checkAndCreateChannel( |
我们知道,native层调用h5,在WebView中,如果java要调用js的方法,
Android4.4以前使用WebView.loadUrl("javascript:function()")。
Android4.4以后,使用以下方式
1 | webView.evaluateJavascript("javascript:function()", new ValueCallback<String>() { |
h5层如何调native,有以下几种形式
在4.2之前有安全隐患,JS可以动态获取到整个底层的实例信息,漏洞已经在Android 4.2上修复了,即使用@JavascriptInterface注解。
WebChromeClient对象中有三个方法,分别是onJsAlert,onJsConfirm,onJsPrompt,当js调用window对象的alert,confirm,prompt,WebChromeClient对象中的三个方法对应的就会被触发,进行拦截处理。
推荐使用onJsPrompt,使用频次最少,支持返回值。
1 | override fun onJsPrompt( |
这是Android提供给Js调试在Native代码里面打印日志信息的API,同时这也成了其中一种Js与Native代码通信的方法。在Js代码中调用console.log(‘xxx’)方法。
jsbridge://className:callbackId/methodName?json
假设我们需要调用native层的Logger类的log方法,参数是msg,执行完成后js层要有一个回调,那么地址就如下
jsbridge://Logger:callbackId/log?{"msg":"message from js."}
1)使用 StaggeredGridLayoutManager
1 | val layoutManager = StaggeredGridLayoutManager(2, RecyclerView.VERTICAL) |
2)如果需要Item之间的间隔,就需要自定义 ItemDecoration
1 | /** |
ARouter 的入口,初始化SDK ARouter.init(mApplication);:
1 | public static void init(Application application) { |
_ARouter.init():
implementation compileOnly和api
implementation和api是取代之前的compile的,其中api和compile是一样的效果,implementation有所不同,通过implementation依赖的库只能自己库本身访问,举个例子,A依赖B,B依赖C,如果B依赖C是使用的implementation依赖,那么在A中是访问不到C中的方法的,如果需要访问,请使用api依赖
compile only和provided效果是一样的,只在编译的时候有效, 不参与打包
runtimeOnly 和 apk效果一样,只在打包的时候有效,编译不参与
testImplementation和testCompile效果一样,在单元测试和打包测试apk的时候有效
debugImplementation和debugCompile效果相同, 在debug模式下有效
releaseImplementation和releaseCompile效果相同,只在release模式和打包release包情况下有效
1 | object StatusBarHelper { |
Update your browser to view this website correctly.&npsb;Update my browser now