日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Android項目實戰之百度地圖地點簽到功能

瀏覽:238日期:2022-06-07 16:13:18

前言:先寫個簡單的地點簽到功能,如果日后有時間細寫的話,會更加好好研究一下百度地圖api,做更多邏輯判斷。

這里主要是調用百度地圖中的場景定位中的簽到場景。通過官方文檔進行api集成。通過GPS的定位功能,獲取地理位置,時間,用戶名進行存儲。之后通過日歷顯示歷史簽到記錄。

效果圖:

Android項目實戰之百度地圖地點簽到功能

Android項目實戰之百度地圖地點簽到功能 Android項目實戰之百度地圖地點簽到功能

/**百度地圖sdk**/ implementation files(’libs/BaiduLBS_Android.jar’) /**日歷選擇器**/ implementation ’com.prolificinteractive:material-calendarview:1.4.3’

簽到布局:

<?xml version='1.0' encoding='utf-8'?><LinearLayout xmlns:android='http://schemas.android.com/apk/res/android' xmlns:app='http://schemas.android.com/apk/res-auto' xmlns:tools='http://schemas.android.com/tools' android:layout_width='match_parent' android:layout_height='match_parent' android:background='@color/color_ffffff' android:orientation='vertical' tools:context='.activity.SignInActivity'> <LinearLayout android:layout_width='match_parent' android:layout_height='match_parent' android:layout_margin='20dp' android:orientation='vertical'> <TextView android: android:layout_width='match_parent' android:layout_height='wrap_content' android:textColor='@color/color_000000' android:textSize='18sp' /> <TextView android:layout_width='match_parent' android:layout_height='wrap_content' android:text='@string/check_in_area' /> <View /> <LinearLayout android: android:layout_width='match_parent' android:layout_height='wrap_content' android:layout_margin='5dp' android:orientation='horizontal' android:visibility='gone'> <ImageView android:layout_width='40dp' android:layout_height='40dp' android:layout_margin='5dp' android:src='http://m.b3g6.com/bcjs/@mipmap/sign_in_address' /> <LinearLayout android:layout_width='match_parent' android:layout_height='wrap_content' android:orientation='vertical'> <TextView android: android:layout_width='match_parent' android:layout_height='wrap_content' android:layout_margin='2dp' android:textColor='@color/color_000000' android:textSize='20sp' /> <LinearLayout android:layout_width='wrap_content' android:layout_height='wrap_content' android:orientation='horizontal'> <TextView android:layout_width='match_parent' android:layout_height='wrap_content' android:layout_marginLeft='5dp' android:text='@string/sign_in_time' /> <TextView android: android:layout_width='match_parent' android:layout_height='wrap_content' /> </LinearLayout> <TextView android: android:layout_width='match_parent' android:layout_height='wrap_content' /> <Button android: android:layout_width='120dp' android:layout_height='40dp' android:layout_centerHorizontal='true' android:layout_marginTop='10dp' android:background='@drawable/btn_round_border' android:text='@string/sign_again' android:textAllCaps='false' android:textColor='@color/colorPrimary' android:textSize='15sp' /> </LinearLayout> </LinearLayout> <Button android:android:layout_gravity='center_vertical|center_horizontal' android:layout_marginTop='50dp' android:background='@drawable/btn_negative_nomal' android:text='@string/signIn' android:visibility='gone' /> </LinearLayout> </LinearLayout>

SignInActivity.java

public class SignInActivity extends BaseActivity { @BindView(R.id.sign_calendar) TextView signCalender; @BindView(R.id.line_sign_result) LinearLayout lineSignResult; @BindView(R.id.sign_in_result) TextView signInResult; @BindView(R.id.sign_in_time) TextView signInTime; @BindView(R.id.sign_address) TextView signAddress; @BindView(R.id.btn_sign_in) Button btnSignIn; private LocationService mLocationService; private boolean isAgain = false; SignIn signIn = new SignIn(); MyUser myUser = BmobUser.getCurrentUser(MyUser.class); @Override protected int contentViewID() { return R.layout.activity_sign_in; } @Override protected void initialize() { setTopTitle(getString(R.string.signIn), true); setLeftBtnFinish(); setDate(); setLocation(); querySignInState(); } /** * 查詢今日簽到狀態 */ private void querySignInState() { BmobQuery<SignIn> signInBmobQuery = new BmobQuery<SignIn>(); signInBmobQuery.addWhereEqualTo('username', myUser.getUsername()); signInBmobQuery.addWhereEqualTo('date', FormatUtils.getDateTimeString(Calendar.getInstance().getTime(), FormatUtils.template_Date)); signInBmobQuery.findObjects(new FindListener<SignIn>() { @Override public void done(List<SignIn> object, BmobException e) { if (e == null) { if (object.isEmpty()){ isAgain = false; btnSignIn.setVisibility(View.VISIBLE); } else { isAgain = true; SignIn signIn = object.get(0); btnSignIn.setVisibility(View.GONE); lineSignResult.setVisibility(View.VISIBLE); signAddress.setText(signIn.getAddress()); signInTime.setText(signIn.getTime()); signInResult.setText(getString(R.string.sign_in_success)); } } else { isAgain = false; } } }); } private void setLocation() { // 初始化 LocationClient mLocationService = new LocationService(this); // 注冊監聽 mLocationService.registerListener(mListener); LocationClientOption option = mLocationService.getOption(); // 簽到場景 只進行一次定位返回最接近真實位置的定位結果(定位速度可能會延遲1-3s) option.setLocationPurpose(LocationClientOption.BDLocationPurpose.SignIn); // 設置定位參數 mLocationService.setLocationOption(option); } /***** * * 定位結果回調,重寫onReceiveLocation方法 * */ private BDAbstractLocationListener mListener = new BDAbstractLocationListener() { /** * 定位請求回調函數 * * @param location 定位結果 */ @Override public void onReceiveLocation(BDLocation location) { if (null != location && location.getLocType() != BDLocation.TypeServerError && location.getLocType() != BDLocation.TypeOffLineLocationFail && location.getLocType() != BDLocation.TypeCriteriaException) { String address = location.getAddrStr(); //獲取詳細地址信息 if (!isAgain) { saveSignIn(address); } else { updateSignIn(address); } } else { signInResult.setText(getString(R.string.sign_in_failure)); } } }; private void setDate() { String dateString = FormatUtils.getDateTimeString(Calendar.getInstance().getTime(), FormatUtils.template_Date); String weekString = DateUtils.getDayOfWeek(); String CalendarString = dateString + ' ' + weekString; signCalender.setText(CalendarString); } @OnClick({R.id.btn_sign_in, R.id.btn_sign_again}) public void onClick(View view) { switch (view.getId()) { case R.id.btn_sign_in: signIn(); break; case R.id.btn_sign_again: isAgain = true; signIn(); break; default: } } /** * 更新簽到數據 * @param address */ private void updateSignIn(String address) { Calendar calendar = Calendar.getInstance(); SignIn newSignIn = new SignIn(); newSignIn.setUsername(myUser.getUsername()); newSignIn.setAddress(address); signIn.setDate(FormatUtils.getDateTimeString(calendar.getTime(), FormatUtils.template_Date)); signIn.setTime(FormatUtils.getDateTimeString(calendar.getTime(), FormatUtils.template_Time)); newSignIn.update(signIn.getObjectId(), new UpdateListener() { @Override public void done(BmobException e) { if (e == null) { signAddress.setText(address); signInTime.setText(FormatUtils.getDateTimeString(Calendar.getInstance().getTime(), FormatUtils.template_Time)); signInResult.setText(getString(R.string.sign_in_success)); ToastUtils.showShort(SignInActivity.this, getString(R.string.sign_in_success)); } else { ToastUtils.showShort(SignInActivity.this, getString(R.string.sign_in_failure)); } } }); } /** * 保存簽到數據 * @param address */ private void saveSignIn(String address) { Calendar calendar = Calendar.getInstance(); signIn.setUsername(myUser.getUsername()); signIn.setAddress(address); signIn.setDate(FormatUtils.getDateTimeString(calendar.getTime(), FormatUtils.template_Date)); signIn.setTime(FormatUtils.getDateTimeString(calendar.getTime(), FormatUtils.template_Time)); signIn.save(new SaveListener<String>() { @Override public void done(String s, BmobException e) { if (e == null) { btnSignIn.setVisibility(View.GONE); lineSignResult.setVisibility(View.VISIBLE); signAddress.setText(address); signInTime.setText(FormatUtils.getDateTimeString(Calendar.getInstance().getTime(), FormatUtils.template_Time)); signInResult.setText(getString(R.string.sign_in_success)); ToastUtils.showShort(SignInActivity.this, getString(R.string.sign_in_success)); } else { ToastUtils.showShort(SignInActivity.this, getString(R.string.sign_in_failure)); } } }); } /** * 簽到 */ private void signIn() { if (mLocationService.isStart()) { mLocationService.requestLocation(); return; } //簽到只需調用startLocation即可 mLocationService.start(); } @Override protected void onDestroy() { super.onDestroy(); if (mLocationService != null) { mLocationService.unregisterListener(mListener); mLocationService.stop(); } }}

歷史簽到布局

<?xml version='1.0' encoding='utf-8'?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android='http://schemas.android.com/apk/res/android' xmlns:app='http://schemas.android.com/apk/res-auto' xmlns:tools='http://schemas.android.com/tools' android:layout_width='match_parent' android:layout_height='match_parent' android:background='@color/color_ffffff' tools:context='.activity.MySignInActivity'> <LinearLayout android:layout_width='match_parent' android:layout_height='match_parent' android:layout_margin='10dp' android:orientation='vertical'> <com.prolificinteractive.materialcalendarview.MaterialCalendarView android: android:layout_width='match_parent' android:layout_height='300dp' android:background='@color/white' android:clipChildren='false' app:mcv_calendarMode='month' app:mcv_dateTextAppearance='@style/MaterialCalendarTextStyelNormal' app:mcv_firstDayOfWeek='sunday' app:mcv_selectionColor='#D203A9F4' app:mcv_showOtherDates='all' app:mcv_tileSize='match_parent' app:mcv_tileWidth='match_parent' /> <View /> <LinearLayout android: android:layout_width='match_parent' android:layout_height='wrap_content' android:layout_margin='15dp' android:visibility='gone' android:orientation='horizontal'> <ImageView android:layout_width='40dp' android:layout_height='40dp' android:layout_margin='5dp' android:src='http://m.b3g6.com/bcjs/@mipmap/sign_in_address' /> <LinearLayout android:layout_width='match_parent' android:layout_height='wrap_content' android:orientation='vertical'> <LinearLayout android:layout_width='match_parent' android:layout_height='wrap_content'> <TextView android:layout_width='wrap_content' android:layout_height='wrap_content' android:textColor='@color/color_000000' android:textSize='18sp' android:text='@string/sign_in_time'/> <TextView android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:textColor='@color/color_000000' android:textSize='18sp' android:layout_marginLeft='5dp'/> <TextView android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:textColor='@color/color_000000' android:textSize='18sp' android:layout_marginLeft='5dp'/> </LinearLayout> <TextView android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_marginLeft='5dp'/> </LinearLayout> </LinearLayout> </LinearLayout></androidx.constraintlayout.widget.ConstraintLayout>

MySignInActivity.java

public class MySignInActivity extends BaseActivity implements OnDateSelectedListener { @BindView(R.id.my_sign_in_date) TextView mySignInDate; @BindView(R.id.my_sign_in_time) TextView mySignInTime; @BindView(R.id.my_sign_in_address) TextView mySignInAddress; @BindView(R.id.line_my_sign_in) LinearLayout lineMySignIn; @BindView(R.id.materialCalendarView_sign_in) MaterialCalendarView widget; MyUser myUser = BmobUser.getCurrentUser(MyUser.class); private List<CalendarDay> calendarDays = new ArrayList<>(); @Override protected int contentViewID() { return R.layout.activity_my_sign_in; } @Override protected void initialize() { setTopTitle(getString(R.string.my_sign_in), true); setLeftBtnFinish(); widget.setSelectedDate(CalendarDay.today()); widget.state().edit().setMaximumDate(CalendarDay.today()).commit(); widget.setOnDateChangedListener(this); initDate(); querySignInState(Calendar.getInstance()); } private void initDate() { BmobQuery<SignIn> signInBmobQuery = new BmobQuery<SignIn>(); signInBmobQuery.addWhereEqualTo('username', myUser.getUsername()); signInBmobQuery.findObjects(new FindListener<SignIn>() { @Override public void done(List<SignIn> object, BmobException e) { if (e == null) { if (!object.isEmpty()) { for (SignIn signIn : object) { Date date = DateUtils.strToDate(signIn.getDate() + ' ' + signIn.getTime()); calendarDays.add(CalendarDay.from(date)); } widget.addDecorator(new EventDecorator(ContextCompat.getColor(MySignInActivity.this, R.color.color_1396aa), calendarDays)); } } else { LogUtils.e(e.getMessage()); ToastUtils.showShort(MySignInActivity.this, getString(R.string.query_failure)); } } }); } @Override public void onDateSelected(@NonNull MaterialCalendarView widget, @NonNull CalendarDay date, boolean selected) { querySignInState(date.getCalendar()); } private void querySignInState(Calendar calendar) { BmobQuery<SignIn> signInBmobQuery = new BmobQuery<SignIn>(); signInBmobQuery.addWhereEqualTo('username', myUser.getUsername()); signInBmobQuery.addWhereEqualTo('date', FormatUtils.getDateTimeString(calendar.getTime(), FormatUtils.template_Date)); signInBmobQuery.findObjects(new FindListener<SignIn>() { @Override public void done(List<SignIn> object, BmobException e) { if (e == null) { if (!object.isEmpty()) { lineMySignIn.setVisibility(View.VISIBLE); SignIn signIn = object.get(0); mySignInDate.setText(signIn.getDate()); mySignInTime.setText(signIn.getTime()); mySignInAddress.setText(signIn.getAddress()); } else { lineMySignIn.setVisibility(View.GONE); } } else { ToastUtils.showShort(MySignInActivity.this, getString(R.string.query_failure)); } } }); } }

日歷小圓點裝飾,重寫 DayViewDecorator

public class EventDecorator implements DayViewDecorator { private int color; private HashSet<CalendarDay> dates; public EventDecorator(int color, Collection<CalendarDay> dates) { this.color = color; this.dates = new HashSet<>(dates); } @Override public boolean shouldDecorate(CalendarDay day) { return dates.contains(day); } @Override public void decorate(DayViewFacade view) { view.addSpan(new DotSpan(7, color)); }}

總結

到此這篇關于Android項目實戰之地點簽到功能(百度地圖)的文章就介紹到這了,更多相關android 地點簽到內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: 百度 地圖
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品成人3p一区二区三区| 日韩精品一区二区三区中文 | 日韩天堂av| 色一区二区三区四区| 国产精品观看| 国产精品资源| 国产精品伊人| 国产精品一区二区99| 日韩成人午夜精品| 国产欧美视频在线| 国产免费av国片精品草莓男男| 亚洲欧美专区| 国产日产一区| 偷拍亚洲精品| 久久99免费视频| 精品久久久久中文字幕小说| 91精品国产自产在线丝袜啪| 性一交一乱一区二区洋洋av| 亚洲精品福利电影| 视频一区日韩| 欧美网站在线| 99久久久久久中文字幕一区| 日韩中文字幕一区二区高清99| 日韩国产一区二区| 国产丝袜一区| 精品中文一区| 精品国产欧美日韩| 天堂资源在线亚洲| av亚洲一区二区三区| 国产乱码精品| 亚洲天堂免费电影| 久久亚洲欧美| 岛国av在线网站| 亚洲精品欧美| 久久亚洲成人| 国产精品成人a在线观看| 国产精品色网| 日韩成人综合| 欧美激情福利| 亚洲一二三区视频| 久久免费大视频| 欧美一级鲁丝片| 欧美亚洲tv| 欧美一区三区| 精品五月天堂| 精品三级久久| 巨乳诱惑日韩免费av| 亚洲精品看片| 国产精品午夜一区二区三区| 免费在线观看不卡| 国产精品白浆| 亚洲午夜电影| 人人爱人人干婷婷丁香亚洲| 色偷偷偷在线视频播放| 婷婷综合在线| 精品久久97| 丝袜美腿亚洲一区| 精品一区二区三区中文字幕视频| 一本大道色婷婷在线| 18国产精品| 激情综合网五月| 日韩大片在线| 国产色噜噜噜91在线精品| 午夜在线精品偷拍| 欧美日韩中文字幕一区二区三区| 国产精品一站二站| 日韩一区二区三区四区五区 | 久久av导航| 欧美视频二区| 日韩精品中文字幕一区二区| 亚洲中字黄色| 六月婷婷一区| 最新国产拍偷乱拍精品| 亚洲先锋成人| 欧美日韩精品免费观看视完整 | 欧美日韩一区二区综合| 欧美一级鲁丝片| 日韩成人亚洲| 欧美亚洲国产激情| 欧美视频一区| 国产精品v一区二区三区| 奇米狠狠一区二区三区| 国产日韩在线观看视频| 国产精品第一国产精品| 欧美成人一二区| 欧美国产专区| 91一区二区三区四区| 亚洲天堂av影院| 欧美亚洲在线日韩| 国产美女精品| 亚洲久草在线| 久久这里只有| 日本韩国欧美超级黄在线观看| 亚洲经典在线| 亚洲天堂免费| 美女尤物国产一区| 日韩在线观看| 国产精品嫩草99av在线| 亚洲精品裸体| 精品视频一区二区三区四区五区| 欧美成人精品一级| 国产成人精品亚洲日本在线观看| 亚洲一区国产一区| 欧美日韩一区二区三区四区在线观看 | 日韩中文在线播放| 久久久久久黄| 久久xxxx| 国产精品任我爽爆在线播放| 岛国av在线播放| 亚洲免费专区| 欧美黄色网页| 国产日产一区| 国产精品女主播一区二区三区| 卡一卡二国产精品| 亚洲尤物av| 丰满少妇一区| 午夜在线播放视频欧美| 久久精品亚洲一区二区| 尤物在线精品| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 亚洲少妇自拍| 国产亚洲电影| 中文在线一区| 日韩在线观看一区| 国产精品xxxav免费视频| 国产精品日本欧美一区二区三区| 狠狠久久伊人中文字幕| 免费在线观看一区二区三区| 国产日韩三级| 亚洲人成网77777色在线播放 | 蜜桃伊人久久| 精品理论电影在线| 国产精品一区二区美女视频免费看| 久久中文视频| 久久不见久久见免费视频7| 99国内精品| 精品捆绑调教一区二区三区| 69堂精品视频在线播放| 在线精品视频一区| 久久婷婷激情| 日韩精选在线| 久久理论电影| 免费看日韩精品| 久久久精品午夜少妇| 久久久久久色 | 丝袜美腿亚洲一区| 国产精品久久久久久久久久白浆 | 尹人成人综合网| 亚洲精品九九| 精品国产欧美日韩| 成人精品亚洲| 亚洲免费专区| 97精品一区| 日韩综合一区二区三区| 精品淫伦v久久水蜜桃| 欧美~级网站不卡| 欧美欧美黄在线二区| 中文久久精品| 尤物在线精品| 欧美综合社区国产| 91成人精品| 精品视频一区二区三区在线观看 | 1024精品一区二区三区| 亚州av乱码久久精品蜜桃| 日韩专区一卡二卡| 久久91视频| 日韩欧美中文字幕电影| 激情婷婷久久| 国产成人调教视频在线观看| 五月国产精品| 蜜臀av免费一区二区三区| av资源中文在线| 日韩av中文在线观看| 亚洲三级毛片| 日韩黄色免费网站| 欧美日韩1区| 国产精品亚洲四区在线观看| 亚洲色诱最新| 亚洲性视频h| 国产h片在线观看| 国产精品观看| 国产精品黄网站| 久久久久观看| 欧美日韩精品一本二本三本 | 成人国产精选| 欧美1区2区3| 国产乱码精品一区二区亚洲| 99riav国产精品| 黑人精品一区| 高清不卡亚洲| 国产精品久久久久77777丨| 国产精品igao视频网网址不卡日韩 | 欧美日韩在线精品一区二区三区激情综合| 只有精品亚洲| 日本成人手机在线| 欧美激情久久久久久久久久久| 在线天堂中文资源最新版| 日韩综合在线| 国产精品人人爽人人做我的可爱| 日本一区福利在线|