成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

Android項目實戰(zhàn)之百度地圖地點簽到功能

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

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

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

效果圖:

Android項目實戰(zhàn)之百度地圖地點簽到功能

Android項目實戰(zhàn)之百度地圖地點簽到功能 Android項目實戰(zhàn)之百度地圖地點簽到功能

/**百度地圖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://www.piao2010.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(); } /** * 查詢今日簽到狀態(tài) */ 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); // 注冊監(jiān)聽 mLocationService.registerListener(mListener); LocationClientOption option = mLocationService.getOption(); // 簽到場景 只進行一次定位返回最接近真實位置的定位結(jié)果(定位速度可能會延遲1-3s) option.setLocationPurpose(LocationClientOption.BDLocationPurpose.SignIn); // 設(shè)置定位參數(shù) mLocationService.setLocationOption(option); } /***** * * 定位結(jié)果回調(diào),重寫onReceiveLocation方法 * */ private BDAbstractLocationListener mListener = new BDAbstractLocationListener() { /** * 定位請求回調(diào)函數(shù) * * @param location 定位結(jié)果 */ @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(); //獲取詳細(xì)地址信息 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: } } /** * 更新簽到數(shù)據(jù) * @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)); } } }); } /** * 保存簽到數(shù)據(jù) * @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; } //簽到只需調(diào)用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://www.piao2010.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)); }}

總結(jié)

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

標(biāo)簽: 百度 地圖
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲网站在线| 国产制服丝袜一区| 国产高清精品久久久久| 国产女优一区| 亚洲精品国久久99热| 欧美精品二区| 欧美韩日一区二区三区| 91视频国产观看| 欧美xxxxx牲另类人与| 韩国三级电影一区二区| 欧美性视频一区二区三区| 日本女人一区二区三区| 色8久久精品久久久久久蜜| 香蕉av福利精品导航 | 性感少妇一区| 亚洲制服丝袜一区| 老鸭窝亚洲一区二区三区| 一区二区三区小说| 亚洲一区黄色| 日韩高清不卡一区二区| 日本乱人伦aⅴ精品| 蜜桃av噜噜一区| 欧美人体做爰大胆视频| 国产在线不卡一卡二卡三卡四卡| 欧美日韩免费电影| 国产精品综合一区二区三区| 欧美日韩精品免费观看视频| 激情欧美一区二区三区在线观看| 3751色影院一区二区三区| 丁香婷婷深情五月亚洲| 26uuu国产在线精品一区二区| 欧美va天堂| 中文字幕一区二区三区四区不卡 | 69av一区二区三区| 国产精品香蕉一区二区三区| 欧美一级高清大全免费观看| 91在线免费播放| 亚洲天堂中文字幕| 麻豆av一区二区三区| 久久国产婷婷国产香蕉| 91精品欧美一区二区三区综合在 | 91免费版在线| 国产精品丝袜91| 99re热精品| 天天综合色天天综合色h| 精品视频一区 二区 三区| 国产成人在线看| 中文在线资源观看网站视频免费不卡| 国产日韩精品久久| 日本aⅴ亚洲精品中文乱码| 欧美一区二区久久久| 欧美jizzhd精品欧美喷水| 亚洲主播在线播放| 欧美日韩中字一区| av午夜一区麻豆| 玉米视频成人免费看| 欧美亚日韩国产aⅴ精品中极品| 成人免费黄色大片| 亚洲精品乱码久久久久久黑人| 日本福利一区二区| 成人精品国产一区二区4080| 国产精品国产三级国产普通话蜜臀 | 欧美三级韩国三级日本三斤 | 日韩福利视频导航| 精品精品国产高清a毛片牛牛| 精品不卡一区二区三区| 免费看精品久久片| 久久青草欧美一区二区三区| 99精品免费| 精品在线免费观看| 国产性天天综合网| 免费精品视频| 成人高清视频在线| 一区二区三区四区不卡视频| 欧美性欧美巨大黑白大战| 91麻豆视频网站| 午夜久久久久久久久| 91精品综合久久久久久| 国精品一区二区三区| 另类专区欧美蜜桃臀第一页| 国产日产欧美一区| 欧美亚洲综合在线| 亚洲香蕉网站| 精品亚洲国产成人av制服丝袜| 久久久久久久精| 香蕉久久夜色精品国产| 成人av资源在线观看| 一区二区三区蜜桃网| 日韩一区二区中文字幕| 日韩视频在线播放| 成人激情校园春色| 亚洲成人第一页| 精品国产一区二区三区四区四| 亚洲欧美日韩国产一区| 成人激情av网| 午夜视频一区二区三区| 久久久久久久久一| 欧美日韩久久不卡| 黄色成人在线网站| 国产剧情一区在线| 亚洲国产中文字幕| 久久久国产综合精品女国产盗摄| 91久久精品一区二区三| 国产精品地址| 丁香五精品蜜臀久久久久99网站 | 亚洲乱码日产精品bd| 欧美一级日韩一级| 亚洲一区二区四区| 午夜精品亚洲| 国产精品夜夜爽| 日韩电影一二三区| 亚洲人成在线观看一区二区| 亚洲精品在线免费观看视频| 欧美在线一二三四区| 一道本一区二区| 欧美黄免费看| 粉嫩一区二区三区在线看| 午夜精品久久久久久久99水蜜桃| 国产精品女主播av| 精品乱码亚洲一区二区不卡| 91成人国产精品| 一区二区三区精品国产| 91网站最新地址| 激情六月婷婷久久| 亚洲午夜三级在线| 国产精品国产精品国产专区不蜜 | 国产中文一区二区三区| 亚洲午夜久久久| 国产欧美日韩亚州综合| 91精品国产综合久久久久久久| 久久狠狠久久综合桃花| 一区福利视频| 欧美一区三区二区在线观看| 国产成人av资源| 久久狠狠亚洲综合| 婷婷久久综合九色综合伊人色| 亚洲视频免费观看| 国产日产欧美一区| 久久青草国产手机看片福利盒子 | 综合久久久久久| 久久久久久99久久久精品网站| 91精品国产乱码久久蜜臀| 色悠悠亚洲一区二区| 一区二区三区三区在线| 欧美午夜免费| 欧美 日韩 国产一区二区在线视频| 国产91清纯白嫩初高中在线观看| 精品一区二区综合| 久久99久久99小草精品免视看| 日本午夜精品一区二区三区电影| 亚洲一区二区三区视频在线 | 国产成人欧美日韩在线电影| 奇米影视在线99精品| 婷婷开心久久网| 亚洲成a人v欧美综合天堂| 亚洲男人的天堂av| 自拍偷拍亚洲综合| 中文字幕亚洲区| 综合久久国产九一剧情麻豆| 国产精品超碰97尤物18| 国产精品网站导航| 国产精品久久久久久久第一福利 | 亚洲四区在线观看| 中文字幕一区二区三区精华液| 国产精品麻豆久久久| 国产精品嫩草影院com| 中文一区二区在线观看| 中文字幕欧美日韩一区| 国产精品久久久久影视| 亚洲欧洲日韩av| 日韩美女啊v在线免费观看| 亚洲日本丝袜连裤袜办公室| 亚洲视频免费在线| 亚洲欧美日韩电影| 一区二区三区国产豹纹内裤在线| 一区二区三区欧美久久| 亚洲一区二区av电影| 亚洲午夜久久久| 五月婷婷另类国产| 久久精品国产一区二区三区免费看| 日韩激情中文字幕| 久久狠狠亚洲综合| 国产精品中文字幕日韩精品| 成人爽a毛片一区二区免费| 成人听书哪个软件好| 成人的网站免费观看| 91在线视频观看| 国产精品av久久久久久麻豆网| 亚洲第一毛片| 国产精品免费一区二区三区观看| 久久精品盗摄| 欧美优质美女网站| 69堂成人精品免费视频| 精品国产sm最大网站| 中文字幕av一区二区三区免费看| 亚洲视频 欧洲视频| 午夜精品久久久| 国产一区欧美二区| 91香蕉视频在线| 亚洲黄色影院|