這是基於地理位置分享的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中的使用,包含地圖申請、初始化、定位、搜索的范圍計算等。