{"id":16347083,"url":"https://github.com/ospoon/jsbridge-se","last_synced_at":"2025-08-30T20:07:13.508Z","repository":{"id":105557029,"uuid":"558900612","full_name":"OSpoon/jsbridge-se","owner":"OSpoon","description":null,"archived":false,"fork":false,"pushed_at":"2022-10-28T14:52:15.000Z","size":19518,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-19T05:05:47.302Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OSpoon.png","metadata":{"files":{"readme":"readme.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-28T14:51:48.000Z","updated_at":"2022-10-28T14:52:41.000Z","dependencies_parsed_at":"2024-03-25T06:00:48.401Z","dependency_job_id":null,"html_url":"https://github.com/OSpoon/jsbridge-se","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/OSpoon/jsbridge-se","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OSpoon%2Fjsbridge-se","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OSpoon%2Fjsbridge-se/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OSpoon%2Fjsbridge-se/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OSpoon%2Fjsbridge-se/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OSpoon","download_url":"https://codeload.github.com/OSpoon/jsbridge-se/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OSpoon%2Fjsbridge-se/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272900157,"owners_count":25012033,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-30T02:00:09.474Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-11T00:39:37.060Z","updated_at":"2025-08-30T20:07:13.474Z","avatar_url":"https://github.com/OSpoon.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"### jsbridge-se使用指南 ###\n\n[演示APK下载地址](http://android.se.online/bdph)\n\n#### 1. 在模块级别的`build.gradle`添加jsbridge-se依赖\n\u003e 如无法更新全依赖包,请配置maven地址:https://dl.bintray.com/spoon2014/maven\n\n```\n//仅包含WebView中Js与Java交互,插件需按指定格式编写\nimplementation 'com.ospoon:jsbridge-se:1.0.17'\n\n//包含WebView中Js与Java交互和基础插件,节省开发\nimplementation 'com.ospoon:jsbridge-plugins-se:1.0.17'\n```\n\n#### 2. 创建插件 #####\n\n1. 新建插件Java类(如:ToastBridgeHandler),并继承自BaseBridgeHandler\n2. 在新建的插件Java类上使用注解`@BridgePlugin(name=\"xxx\")`标注插件名称\n3. 插件各部分简介\n    ```java\n    /*插件名称,js调用时会使用到*/\n    @BridgePlugin(name=\"toast\")\n    public class ToastBridgeHandler extends BaseBridgeHandler {\n    \n        /**\n         * 需申请权限列表\n         * 权限常量请在`com.yanzhenjie.permission.runtime.Permission`\n         * 中查看\n         * @return\n         */\n        @Override\n        public String[] authorization() {\n            return new String[0];\n        }\n    \n        /**\n         * 是否开启`onActivityResult`回调数据\n         * @return\n         */\n        @Override\n        public Boolean registerMaInterface() {\n            return false;\n        }\n    \n        /**\n         * 执行业务处理\n         * @param data\n         */\n        @Override\n        public void process(String data) {\n    \n        }\n    \n        /**\n         * 接收回调数据\n         * @param requestCode\n         * @param resultCode\n         * @param intent\n         */\n        @Override\n        public void onActivityResult(int requestCode, int resultCode, Intent intent) {\n    \n        }\n    }\n    ```\n4. 在`Application`的子类`onCreate`方法中注册插件\n    ```java\n    /*\n        参数支持同时传入多个\n    */\n    Bridge.INSTANCE.registerHandler(ToastBridgeHandler.class);\n    ```\n #### 3. 一键启动\n 1. BridgeWebViewActivity\n     ```java\n     BridgeWebViewActivity.start(this,\"http://192.168.199.163:9999\");\n     ```\n 2. X5WebViewActivity\n    ```java\n    X5WebViewActivity.start(this,\"http://192.168.199.163:9999\");\n    ```\n \n#### 4. JS调用Java([js-native-se](./vue-js-java/src/utils/js-native-se/readme.md)对调用进行了封装) ####\n```java\nwindow.WebViewJavascriptBridge.callHandler(\n    'toast'                     //桥注册的名称ID\n    , { text: '你好啊赛利亚', duration: 0 }        //传递给原生的参数\n    , function(responseData) {  //异步回调接口\n        console.log('native return-\u003e'+responseData);\n    }\n);\n```\n\n#### 5. 其他 ####\n1. 回调数据到Js\n\u003e 在定义的插件中可以取到callBack对象,用于将数据回调到H5\n使用方式:\n1. 成功情况:\n    ```java\n    callBack.onCallBack(ResultUtil.success(JSONObject));\n    ```\n2. 失败情况:\n    ```java\n    callBack.onCallBack(ResultUtil.error(\"1\",\"取消识别\"));\n    callBack.onCallBack(ResultUtil.error(\"1\",e.getMessage()));\n    ```\n2. 使用上下文\n    ```\n    在定义的插件中可以取到getActivity(), new Intent(getActivity(), CaptureActivity.class);\n    ```\n3. 启动一个带回调的Activity\n    ```\n    在定义的插件中可以取到getActivity(),尝试使用getActivity().startActivityForResult()操作\n    ```\n4. 申请权限\n    ```\n    申请权限已经在BaseBridgeHandler操作,只需要将申请的权限通过authorization()返回即可,注意权限使用了\n    `com.yanzhenjie.permission:support:2.0.0`,所以权限常量请在`com.yanzhenjie.permission.runtime.Permission`\n    中查看\n    ```\n\n#### 6. 特殊配置 ####\n1. 如需使用高德定位插件需配置高德定位apikey到app的AndroidManifest.xml\n    ```\n    \u003cmeta-data android:name=\"com.amap.api.v2.apikey\" android:value=\"xxx\"\u003e\n    \u003c/meta-data\u003e\n    ```\n2. 部分插件需使用到文件存储,需配置一下信息\n    `app/src/main/res/xml/provider_paths.xml`\n    ```xml\n    \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n    \u003cpaths xmlns:android=\"http://schemas.android.com/apk/res/android\"\u003e\n        \u003c!-- /storage/emulated/0/Download/com.bugly.upgrade.demo/.beta/apk--\u003e\n        \u003cexternal-path name=\"beta_external_path\" path=\"Download/\"/\u003e\n        \u003c!--/storage/emulated/0/Android/data/com.bugly.upgrade.demo/files/apk/--\u003e\n        \u003cexternal-path name=\"beta_external_files_path\" path=\"Android/data/\"/\u003e\n        \u003c!--对应外部内存卡根目录：Environment.getExternalStorageDirectory()--\u003e\n        \u003cexternal-path name=\"external-path\" path=\".\" /\u003e\n    \u003c/paths\u003e\n    ```\n    \n    `app的AndroidManifest.xml`\n    ```xml\n    \u003cprovider\n        android:name=\"android.support.v4.content.FileProvider\"\n        android:authorities=\"${applicationId}.fileProvider\"\n        android:exported=\"false\"\n        android:grantUriPermissions=\"true\"\u003e\n        \u003cmeta-data\n            android:name=\"android.support.FILE_PROVIDER_PATHS\"\n            android:resource=\"@xml/provider_paths\"/\u003e\n    \u003c/provider\u003e\n    ```\n3. 如需使用语音听写插件,需在Application中进行初始化Appid操作\n    ```java\n    //注册科大讯飞语音听写\n    SpeechUtility.createUtility(getApplicationContext(), SpeechConstant.APPID +\"=xxxxx\");\n    ```\n    如需进行移动统计需在app模块的`AndroidManifest.xml`中进行添加\n    ```xml\n    \u003c!-- 科大讯飞移动统计分析 --\u003e\n    \u003cmeta-data\n        android:name=\"IFLYTEK_APPKEY\"\n        android:value=\"'xxxxx'\" /\u003e\n    \u003cmeta-data\n        android:name=\"IFLYTEK_CHANNEL\"\n        android:value=\"xxxxx\" /\u003e\n    ```\n\n4. 如需使用`pushData`插件接收H5端的数据,插件中使用的广播形式,集成模块后定义广播接收器并动态注册接收数据\n    ```java\n    /**\n     * author : zhangxin\n     * date : 2020-03-27 14:30\n     * description : 用于接收js通过插件push到原生中的数据\n     */\n    public class MyBroadcastReceiver extends BroadcastReceiver {\n        @Override\n        public void onReceive(Context context, Intent intent) {\n            String event = intent.getStringExtra(\"event\");\n            String agentName = intent.getStringExtra(\"agentName\");\n            String agentCode = intent.getStringExtra(\"agentCode\");\n            String orgCode = intent.getStringExtra(\"orgCode\");\n            Log.i(\"BroadcastReceiver\", \"event::: \" + event + \"  agentName::: \" + agentName + \" agentCode::: \" + agentCode + \" orgCode::: \" + orgCode);\n        }\n    }\n    ```\n    \n    ```java\n    public class MainActivity extends Activity {\n    \n        MyBroadcastReceiver mMyBroadcastReceiver;\n    \n        @Override\n        protected void onCreate(Bundle savedInstanceState) {\n            super.onCreate(savedInstanceState);\n            setContentView(R.layout.activity_main);\n            //注册广播用于接收Js通过插件Push到原生的数据\n            mMyBroadcastReceiver = new MyBroadcastReceiver();\n            registerReceiver(mMyBroadcastReceiver, new IntentFilter(Constants.JSBRIDGEN22_JS_PUSH_DATA_ACTION));\n        }\n    \n        @Override\n        protected void onDestroy() {\n            unregisterReceiver(mMyBroadcastReceiver);\n            super.onDestroy();\n        }\n    }\n    ```\n\n5. 如需要使用分享功能请将微信分享的APPKEY配置到app的AndroidManifest.xml参照如下\n    ```xml\n    \u003c!-- 配置微信分享 APPKEY--\u003e\n    \u003cmeta-data\n        android:name=\"JSBRIDGE_N22_WECHAT_SHARE_KEY\"\n        android:value=\"wxba50597b5a9c762d\" /\u003e\n    ```\n\n\n\n 注意事项:\n 1. 页面提示ERR_CACHE_MISS:请设置网络权限`\u003cuses-permission android:name=\"android.permission.INTERNET\"/\u003e`\n 2. 页面提示ERR_CLEARTEXT_NOT_PERMITTED:请在`AndroidManifest.xml`的`application`节点增加`android:usesCleartextTraffic=\"true\"`\n 3. 如发生样式冲突请在app模块中的添加AndroidManifest.xml文件的application节点添加`tools:replace=\"android:theme\"`\n 4. 提交代码提示`validate-commit-msg: command not found`,请全局安装插件,执行命令:`cnpm install validate-commit-msg -g`,因内部包含vue项目中配置提交钩子\n\n使用方案为[JSBridge-Android](https://github.com/smallbuer/JSBridge-Android)\n\n发布地址[bintray](https://bintray.com/spoon2014)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fospoon%2Fjsbridge-se","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fospoon%2Fjsbridge-se","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fospoon%2Fjsbridge-se/lists"}