使用匕首在 Android mvp 上实施 GoogleApiClient?

Implementing GoogleApiClient on Android mvp using dagger?

我有几个问题,

首先,当我阅读一些文章时,我应该在 activity、

中实现 LocationListener、ConnectionCallback、OnConnectionFailedListener 接口

将这些类的实现分开放在不同的文件中是否正确?

像下面这样吗?

public class LocationListener implements 
           com.google.android.gms.location.LocationListener {
@Inject
Location mLastLocation;
@Override
public void onLocationChanged(Location location) {
    // Assign the new location
    mLastLocation = location;
    // Displaying the new location on UI
 }
}

在我的 activity 我处理 Showing the mLastLocation properties 中是否正确?

//Fields
@Inject
GoogleApiClient client;
Location mLastLocation;
//Fields
  mLastLocation = LocationServices.FusedLocationApi.getLastLocation(client);

第二,provider方法应该怎么写?,我猜是这样的,大家有什么推荐的吗?

//Constructor
public LocationModule(Context context, GoogleApiClient.ConnectionCallbacks callback, GoogleApiClient.OnConnectionFailedListener listener) {
    this.context = context;
    this.callback = callback;
    this.listener = listener;
}
@Provides
@Singleton
GoogleApiClient providesGoogleApi() {
    return new GoogleApiClient.Builder(context)
            .addOnConnectionFailedListener(listener)
            .addConnectionCallbacks(callback)
            .addApi(LocationServices.API)
            .build();
}

最后,我应该在哪里处理 android 6 及以上设备的权限?,是在视图上还是在演示者上?

听说View一定傻到不用测试了,我应该如何守住这个原则?

如果有人能给我一个参考,或者 github 示例代码,与我的情况相匹配,那就太好了。

首先,您可以将 MVP 视图层视为纯 Android 模块,这意味着与 Android 操作系统的任何通信(如请求权限)都必须使用该层处理,结果回到演示者那里决定下一步做什么。

关于分离那些 class 的实现,当我寻找 class 的一些代码时,我自己喜欢分离 classes 以获得更清晰的可视化!我认为没有人可以提出最佳实践建议,因为这取决于您的模块和实现。根据 Clean Code book,在这种类型的决策情况下,您必须更多地考虑代码的可读性。

最后,关于 LocationModule,它是完全正确的,但如果我处在你的位置,我什至会在更高级别的组件(例如 ApplicationComponent)中请求上下文,并且从 LocationModule 构造函数中删除它。

//Constructor
public LocationModule(GoogleApiClient.ConnectionCallbacks callback, GoogleApiClient.OnConnectionFailedListener listener) {
    this.callback = callback;
    this.listener = listener;
}

@Provides
@Singleton
GoogleApiClient providesGoogleApi(Context context) {
    return new GoogleApiClient.Builder(context)
            .addOnConnectionFailedListener(listener)
            .addConnectionCallbacks(callback)
            .addApi(LocationServices.API)
            .build();
}

可以使用更高模块中的相关提供程序提供上下文。

这是一个示例存储库,在这方面可以真正帮助您:

https://github.com/mmirhoseini/fyber_mobile_offers