這是基於地理位置分享的Android App,附上發布平台地址:
安智:http://www.anzhi.com/soft_2613436.html
應用寶:http://android.myapp.com/myapp/detail.htm?apkName=com.onemecould.mapwoqu





項目使用Android studio 開發,內部采用面向接口開發,infrastructure中封裝接口調用,集成阿里雲對象存儲(OSS),支持服務端切換存儲方式。app包中主要為業務邏輯、adapter、view.支持文字和圖片的發布,可以選擇本地圖片或拍照。根據地理位置搜索分享信息,能收藏和評論分享內容,可打開地圖分享信息,也可在地圖中查看分享的地理位置。可修改個人資料,支持QQ和微博賬號登錄。
項目源代碼結構:


MainApplication
程序入口,初始化,包含騰訊Bugly、Bmob、Universal Image Loader、友盟平台以及存儲方案的獲取:
@Override
public void onCreate() {
super.onCreate();
mContext = getApplicationContext();
initBugly();
initImageLoader();
Bmob.initialize(mContext, "appid");
BmobInstallation.getCurrentInstallation(mContext).save();
BmobPush.startWork(mContext);
}
//友盟平台配置
{
PlatformConfig.setQQZone("appid","app_secret");
PlatformConfig.setSinaWeibo("appid","app_secret");
}
//Bugly配置
private void initBugly(){
CrashReport.initCrashReport(getApplicationContext(),"app_id",false);
}
//上傳時調用
public static void initUploadConfig(final InitUploadConfigListener listener){
//......省略......
}
infrastructure
接口層,封裝所有請求操作,所有請求與數據返回通過回調處理。封裝了返回的listener接口以及錯誤消息類用來統一接收數據和處理錯誤。

這里接口的使用是通過反射獲取接口實例:
private Object createInterface(String name,Context context){
try {
if(context!=null){
Constructor constructor=Class.forName(name).getConstructor(Context.class);
Object instance=constructor.newInstance(mCurrentContext);
return instance;
}
return Class.forName(name).newInstance();
}catch (NoSuchMethodException e){
e.printStackTrace();
}catch (InstantiationException e){
e.printStackTrace();
}catch (IllegalAccessException e){
e.printStackTrace();
}catch (ClassNotFoundException e){
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}
return null;
}
public IUserInfoService createIUserInfo(){
String name=String.format("%1$s.%2$sUserInfoService",dataStoreBasicPackagePath,DB);
Object dInterface=createInterface(name,mCurrentContext);
if(dInterface!=null){
return (IUserInfoService)dInterface;
}
return null;
}
createIUserInfo()中的dataStoreBasicPackagePath為包路徑,DB用來區分接口,以后更換接口時只需要按照新的DB字符串創建接口類.
app層
包含業務邏輯與展示層,activity或fragment中調用infrastructure層接口,最后將數據顯示。
整體來說,項目結構簡單,對於初學者來說很好理解,項目中也沒有涉及其他新的技術,下一篇繼續講解百度地圖Api在android中的使用,包含地圖申請、初始化、定位、搜索的范圍計算等。
