# 网约车
**Repository Path**: daxiaa/online_car_hailing
## Basic Information
- **Project Name**: 网约车
- **Description**: 网约车
- **Primary Language**: Android
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 4
- **Created**: 2020-07-30
- **Last Updated**: 2025-10-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# mylink-netcar-client-android
#### 介绍
Mylink网约车android客户端
#### 软件架构
约车SDK包括司机端aar、乘客端aar和共享库aar
司机端和乘客端采用了相同的架构,其中共享库提供了一些两端都需要的一些方法和工具类
项目采用了MVVM架构,Activity,Fragment,Dialog、Widget以及XML文件共同称为View,用于UI显示。ViewModel用作View和Model交互的桥梁。Model作为数据的具象化载体,封装了网络请求和访问本地数据的方法。
大致来说,每个View对应一个ViewModel,ViewModel持有零个至多个LiveData,View通过监听LiveData中的数据而做出相应的UI上的改变。其中DataRepository类中提供了共享的LiveData,用于ViewModel与ViewModel之间共享数据。DataBinding用于绑定数据和设置监听事件。
网络请求采用Retrofit+OkHttp实现,异步请求使用的是协程。
#### 安装教程
1,将sdk拷贝到主模块的libs目录下
2,复制version.gralde到项目的根目录中,并在build.gradle中添加如下代码:
apply from:"version.gradle"
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
google()
jcenter()
maven {
url 'https://maven.fabric.io/public'
}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.1'
classpath 'com.google.gms:google-services:4.2.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'io.fabric.tools:gradle:1.31.0' // Crashlytics plugin
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenCentral()
google()
jcenter()
}
}
在模块的根目录的build.gradle中添加相关依赖:
repositories {
flatDir {
dirs'libs'
}
}
dependencies {
// ...
implementation(name:'shared-release', ext:'aar')
implementation(name:'driver-release', ext:'aar')
implementation(name:'passenger-release', ext:'aar')
implementation "com.google.android.material:material:$rootProject.ext.versions.material"
implementation "androidx.constraintlayout:constraintlayout:$rootProject.ext.versions.constraintLayout"
//glide
implementation "com.github.bumptech.glide:glide:$rootProject.ext.versions.glide"
kapt "com.github.bumptech.glide:compiler:$rootProject.ext.versions.glide"
//
// implementation 'com.google.guava:guava:27.0.1-jre'
//google map
implementation "com.google.android.gms:play-services-maps:$rootProject.ext.versions.playService"
implementation "com.google.android.gms:play-services-location:$rootProject.ext.versions.playService"
implementation "com.google.maps.android:android-maps-utils:$rootProject.ext.versions.mapUtil"
implementation "com.google.android.libraries.places:places:$rootProject.ext.versions.places"
//recyclerview
implementation "androidx.recyclerview:recyclerview:$rootProject.ext.versions.recyclerview"
//retrofit
implementation "com.squareup.retrofit2:retrofit:$rootProject.ext.versions.retrofit2"
implementation "com.squareup.retrofit2:converter-gson:$rootProject.ext.versions.retrofit2"
implementation "com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:$rootProject.ext.versions.coroutinesAdapter"
implementation "com.squareup.okhttp3:okhttp:$rootProject.ext.versions.okhttp"
implementation "com.squareup.okhttp3:logging-interceptor:$rootProject.ext.versions.logginginterceptor"
//lifecycle
implementation "androidx.lifecycle:lifecycle-extensions:$rootProject.ext.versions.lifecycle"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$rootProject.ext.versions.lifecycle"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$rootProject.ext.versions.lifecycle"
//kotlin
implementation "androidx.core:core-ktx:$rootProject.ext.versions.ktx"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
//coroutines
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$rootProject.ext.versions.coroutines"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$rootProject.ext.versions.coroutines"
//firebase
implementation "com.google.firebase:firebase-messaging:$rootProject.ext.versions.firebaseMessage"
implementation "com.crashlytics.sdk.android:crashlytics:$rootProject.ext.versions.crashlytics"
//ARouter
implementation "com.alibaba:arouter-api:$rootProject.ext.versions.arouter"
kapt rootProject.ext.arouterAnnotation
api ("com.github.gzu-liyujiang.AndroidPicker:WheelPicker:$rootProject.ext.versions.wheelPicker") {
exclude group: 'com.android.support'
}
api "org.greenrobot:eventbus:$rootProject.ext.versions.eventBus"
implementation ("com.google.android:flexbox:$rootProject.ext.versions.flexbox"){
exclude group: 'org.jetbrains.kotlin', module: 'kotlin-gradle-plugin'
exclude group: 'com.android.tools.build', module: 'gradle'
}
}
apply plugin: 'com.google.gms.google-services'
3,初始化
添加google_maps_key到strings.xml文件中,name必须为google_maps_key
在Application中进行初始化
ARouter.init(this)
SdkManager.setApplicationContext(this)
获取到FirebaseId后设置
SdkManager.setFireBaseId(fireBaseToken)
#### 使用说明
1,接入卡片
根据需要在xml中引入
或
2,登入卡片
用户登录APP后或者重新登录后,调用
SdkManager.setMyLinkToken(myLinkToken)
同时,调用乘客卡片的
passengerFragment?.passengerLogin()
进行登入
如果当前用户是司机,需要调用:
driverCardFragment?.setCoordinate(Coordinates(location.latitude, location.longitude))
传入司机当前坐标
3,FCM调用
复制以下代码到FirebaseMessagingService的onMessageReceived的方法中
SdkManager.onMessageReceived(this, remoteMessage)
同时,在项目入口页加入以下代码:
private fun onBroadcastReceiverClick() {
var bundle = intent.extras
if (bundle != null) {
var messageType = bundle?.get("messageType")
if (messageType != null) {
val orderId = bundle?.get("orderId").toString()
val status = bundle?.get("status").toString().toInt()
when (messageType.toString().toInt()) {
1 -> //司机
ARouter.getInstance().build(ARouterPath.DRIVER_MAIN)
.withString("orderId", orderId)
.withInt("status", status)
.navigation()
2 -> //乘客收到推送
ARouter.getInstance().build(ARouterPath.PASS_MAIN)
.withString("orderId", orderId)
.withInt("status", status)
.navigation()
}
}
}
}
并在onCreate时调用
4,多语言
SdkManager.setLangueage(LANGUAGE_EN)
#### 生成aar并测试sdk使用
执行 gradlew asR 命令
去driver、passenger、shared 3个module中的build/outputs目录下拿到aar文件
将aar文件放到APP module中libs目录
更改APP module中的build.gradle,具体如下:
注释掉 dependencies中
api project(':passenger')
api project(':driver')
同时,打开dependencies中其他注释
#### 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
#### 码云特技
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目
4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目
5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
7. 打包命令 gradlew uploadArchives