mFragments;
23 | private String[] mTabTitles = {"一键求救", "位置服务", "健康监测","智能工具"};
24 |
25 | @Override
26 | protected void onCreate(Bundle savedInstanceState) {
27 | super.onCreate(savedInstanceState);
28 | setContentView(R.layout.activity_main);
29 | // initToolBar();
30 | initFragment();
31 |
32 | ViewPager viewPager = (ViewPager) findViewById(R.id.vp_main);
33 | TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_main);
34 |
35 | // 初始化Adapter
36 | MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), this);
37 | // 设置adapter将ViewPager和Fragment关联起来
38 | viewPager.setAdapter(adapter);
39 | // 将TabLayout和ViewPager关联,达到TabLayout和Viewpager、Fragment联动的效果
40 | tabLayout.setupWithViewPager(viewPager);
41 |
42 | }
43 |
44 | /**
45 | * 初始化toolBar
46 | */
47 | // private void initToolBar() {
48 | // Toolbar toolbar = (Toolbar) findViewById(R.id.tb_main);
49 | // // 指定ToolBar的标题
50 | // toolbar.setTitle("CoordinatorLayout");
51 | // // 将toolBar和actionBar进行关联
52 | // setSupportActionBar(toolbar);
53 | // }
54 |
55 | /**
56 | * 初始化Fragment
57 | */
58 | private void initFragment() {
59 | HelpFragment helpFragment = new HelpFragment();
60 | LocationFragment locationFragment = new LocationFragment();
61 | HealthFragment healthFragment = new HealthFragment();
62 | ToolFragment toolFragment = new ToolFragment();
63 | // 将四个fragment放入List里面管理,方便使用
64 | mFragments = new ArrayList<>();
65 | mFragments.add(helpFragment);
66 | mFragments.add(locationFragment);
67 | mFragments.add(healthFragment);
68 | mFragments.add(toolFragment);
69 | getSupportActionBar().setTitle("老年人便捷服务系统");
70 | }
71 |
72 |
73 | class MyFragmentPagerAdapter extends FragmentPagerAdapter {
74 | private Context context;
75 |
76 | public MyFragmentPagerAdapter(FragmentManager fm, Context context) {
77 | super(fm);
78 | this.context = context;
79 | }
80 |
81 | @Override
82 | public Fragment getItem(int position) {
83 | // 获取指定位置的Fragment对象
84 | return mFragments.get(position);
85 | }
86 |
87 | @Override
88 | public int getCount() {
89 | // ViewPager管理页面的数量
90 | return mFragments.size();
91 | }
92 |
93 | @Override
94 | public CharSequence getPageTitle(int position) {
95 | // 设置indicator的标题(TabLayout中tab的标题)
96 | return mTabTitles[position];
97 | }
98 | }
99 | }
100 |
--------------------------------------------------------------------------------
/app/src/main/java/com/liu/oldsystem/view/SelectRemindWayPopup.java:
--------------------------------------------------------------------------------
1 | package com.liu.oldsystem.view;
2 |
3 | import android.content.Context;
4 | import android.graphics.drawable.BitmapDrawable;
5 | import android.view.Gravity;
6 | import android.view.LayoutInflater;
7 | import android.view.MotionEvent;
8 | import android.view.View;
9 | import android.view.View.OnClickListener;
10 | import android.view.View.OnTouchListener;
11 | import android.view.WindowManager;
12 | import android.widget.PopupWindow;
13 | import android.widget.TextView;
14 |
15 | import com.liu.oldsystem.R;
16 |
17 |
18 | public class SelectRemindWayPopup implements OnClickListener {
19 | private TextView remaind_way1, remaind_way2;
20 | public PopupWindow mPopupWindow;
21 | private SelectRemindWayPopupOnClickListener selectRemindWayPopupListener;
22 |
23 | public PopupWindow getmPopupWindow() {
24 | return mPopupWindow;
25 | }
26 |
27 | private Context mContext;
28 |
29 | @SuppressWarnings("deprecation")
30 | public SelectRemindWayPopup(Context context) {
31 | mContext = context;
32 | mPopupWindow = new PopupWindow(context);
33 | mPopupWindow.setBackgroundDrawable(new BitmapDrawable());
34 | mPopupWindow.setWidth(WindowManager.LayoutParams.FILL_PARENT);
35 | mPopupWindow.setHeight(WindowManager.LayoutParams.FILL_PARENT);
36 | mPopupWindow.setTouchable(true);
37 | mPopupWindow.setFocusable(true);
38 | mPopupWindow.setOutsideTouchable(true);
39 | mPopupWindow.setAnimationStyle(R.style.AnimBottom);
40 | mPopupWindow.setContentView(initViews());
41 |
42 | mPopupWindow.getContentView().setOnTouchListener(new OnTouchListener() {
43 |
44 | @Override
45 | public boolean onTouch(View v, MotionEvent event) {
46 | mPopupWindow.setFocusable(false);
47 | mPopupWindow.dismiss();
48 | return true;
49 | }
50 | });
51 |
52 | }
53 |
54 | public View initViews() {
55 | View view = LayoutInflater.from(mContext).inflate(R.layout.selectremindway_pop_window,
56 | null);
57 |
58 | remaind_way1 = (TextView) view.findViewById(R.id.tv_drugway_1);
59 | remaind_way2 = (TextView) view.findViewById(R.id.tv_drugway_2);
60 | remaind_way1.setOnClickListener(this);
61 | remaind_way2.setOnClickListener(this);
62 | return view;
63 | }
64 |
65 | @Override
66 | public void onClick(View v) {
67 | switch (v.getId()) {
68 | case R.id.tv_drugway_1:
69 | selectRemindWayPopupListener.obtainMessage(0);
70 | break;
71 | case R.id.tv_drugway_2:
72 | selectRemindWayPopupListener.obtainMessage(1);
73 | break;
74 | default:
75 | break;
76 | }
77 | dismiss();
78 |
79 | }
80 |
81 | public interface SelectRemindWayPopupOnClickListener {
82 | void obtainMessage(int flag);
83 | }
84 |
85 | public void setOnSelectRemindWayPopupListener(SelectRemindWayPopupOnClickListener l) {
86 | this.selectRemindWayPopupListener = l;
87 | }
88 |
89 | public void dismiss() {
90 | if (mPopupWindow != null && mPopupWindow.isShowing()) {
91 | mPopupWindow.dismiss();
92 | }
93 | }
94 |
95 | public void showPopup(View rootView) {
96 | // 第一个参数是要将PopupWindow放到的View,第二个参数是位置,第三第四是偏移值
97 | mPopupWindow.showAtLocation(rootView, Gravity.BOTTOM, 0, 0);
98 | }
99 | }
100 |
--------------------------------------------------------------------------------
/app/src/main/java/com/liu/oldsystem/location/OverlayManager.java:
--------------------------------------------------------------------------------
1 | package com.liu.oldsystem.location;
2 |
3 | import com.baidu.mapapi.map.BaiduMap;
4 | import com.baidu.mapapi.map.BaiduMap.OnPolylineClickListener;
5 | import com.baidu.mapapi.map.MapStatusUpdateFactory;
6 | import com.baidu.mapapi.map.Marker;
7 | import com.baidu.mapapi.map.Overlay;
8 | import com.baidu.mapapi.map.OverlayOptions;
9 | import com.baidu.mapapi.model.LatLngBounds;
10 |
11 | import java.util.ArrayList;
12 | import java.util.List;
13 |
14 | import static com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
15 |
16 | /**
17 | * 该类提供一个能够显示和管理多个Overlay的基类
18 | *
19 | * 复写{@link #getOverlayOptions()} 设置欲显示和管理的Overlay列表
20 | *
21 | *
22 | * 通过
23 | * {@link com.baidu.mapapi.map.BaiduMap#setOnMarkerClickListener(com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener)}
24 | * 将覆盖物点击事件传递给OverlayManager后,OverlayManager才能响应点击事件。
25 | *
26 | * 复写{@link #onMarkerClick(com.baidu.mapapi.map.Marker)} 处理Marker点击事件
27 | *
28 | */
29 | public abstract class OverlayManager implements OnMarkerClickListener, OnPolylineClickListener {
30 |
31 | BaiduMap mBaiduMap = null;
32 | private List mOverlayOptionList = null;
33 |
34 | List mOverlayList = null;
35 |
36 | /**
37 | * 通过一个BaiduMap 对象构造
38 | *
39 | * @param baiduMap
40 | */
41 | public OverlayManager(BaiduMap baiduMap) {
42 | mBaiduMap = baiduMap;
43 | // mBaiduMap.setOnMarkerClickListener(this);
44 | if (mOverlayOptionList == null) {
45 | mOverlayOptionList = new ArrayList();
46 | }
47 | if (mOverlayList == null) {
48 | mOverlayList = new ArrayList();
49 | }
50 | }
51 |
52 | /**
53 | * 覆写此方法设置要管理的Overlay列表
54 | *
55 | * @return 管理的Overlay列表
56 | */
57 | public abstract List getOverlayOptions();
58 |
59 | /**
60 | * 将所有Overlay 添加到地图上
61 | */
62 | public final void addToMap() {
63 | if (mBaiduMap == null) {
64 | return;
65 | }
66 |
67 | removeFromMap();
68 | List overlayOptions = getOverlayOptions();
69 | if (overlayOptions != null) {
70 | mOverlayOptionList.addAll(getOverlayOptions());
71 | }
72 |
73 | for (OverlayOptions option : mOverlayOptionList) {
74 | mOverlayList.add(mBaiduMap.addOverlay(option));
75 | }
76 | }
77 |
78 | /**
79 | * 将所有Overlay 从 地图上消除
80 | */
81 | public final void removeFromMap() {
82 | if (mBaiduMap == null) {
83 | return;
84 | }
85 | for (Overlay marker : mOverlayList) {
86 | marker.remove();
87 | }
88 | mOverlayOptionList.clear();
89 | mOverlayList.clear();
90 |
91 | }
92 |
93 | /**
94 | * 缩放地图,使所有Overlay都在合适的视野内
95 | *
96 | * 注: 该方法只对Marker类型的overlay有效
97 | *
98 | *
99 | */
100 | public void zoomToSpan() {
101 | if (mBaiduMap == null) {
102 | return;
103 | }
104 | if (mOverlayList.size() > 0) {
105 | LatLngBounds.Builder builder = new LatLngBounds.Builder();
106 | for (Overlay overlay : mOverlayList) {
107 | // polyline 中的点可能太多,只按marker 缩放
108 | if (overlay instanceof Marker) {
109 | builder.include(((Marker) overlay).getPosition());
110 | }
111 | }
112 | mBaiduMap.setMapStatus(MapStatusUpdateFactory
113 | .newLatLngBounds(builder.build()));
114 | }
115 | }
116 |
117 | }
118 |
--------------------------------------------------------------------------------
/app/src/main/java/com/liu/oldsystem/util/Utility.java:
--------------------------------------------------------------------------------
1 | package com.liu.oldsystem.util;
2 |
3 | import android.text.TextUtils;
4 |
5 |
6 | import com.google.gson.Gson;
7 | import com.liu.oldsystem.db.City;
8 | import com.liu.oldsystem.db.County;
9 | import com.liu.oldsystem.db.Province;
10 | import com.liu.oldsystem.gson.Weather;
11 |
12 | import org.json.JSONArray;
13 | import org.json.JSONException;
14 | import org.json.JSONObject;
15 |
16 | public class Utility {
17 |
18 | /**
19 | * 解析和处理服务器返回的省级数据
20 | */
21 | public static boolean handleProvinceResponse(String response) {
22 | if (!TextUtils.isEmpty(response)) {
23 | try {
24 | JSONArray allProvinces = new JSONArray(response);
25 | for (int i = 0; i < allProvinces.length(); i++) {
26 | JSONObject provinceObject = allProvinces.getJSONObject(i);
27 | Province province = new Province();
28 | province.setProvinceName(provinceObject.getString("name"));
29 | province.setProvinceCode(provinceObject.getInt("id"));
30 | province.save();
31 | }
32 | return true;
33 | } catch (JSONException e) {
34 | e.printStackTrace();
35 | }
36 | }
37 | return false;
38 | }
39 |
40 | /**
41 | * 解析和处理服务器返回的市级数据
42 | */
43 | public static boolean handleCityResponse(String response, int provinceId) {
44 | if (!TextUtils.isEmpty(response)) {
45 | try {
46 | JSONArray allCities = new JSONArray(response);
47 | for (int i = 0; i < allCities.length(); i++) {
48 | JSONObject cityObject = allCities.getJSONObject(i);
49 | City city = new City();
50 | city.setCityName(cityObject.getString("name"));
51 | city.setCityCode(cityObject.getInt("id"));
52 | city.setProvinceId(provinceId);
53 | city.save();
54 | }
55 | return true;
56 | } catch (JSONException e) {
57 | e.printStackTrace();
58 | }
59 | }
60 | return false;
61 | }
62 |
63 | /**
64 | * 解析和处理服务器返回的县级数据
65 | */
66 | public static boolean handleCountyResponse(String response, int cityId) {
67 | if (!TextUtils.isEmpty(response)) {
68 | try {
69 | JSONArray allCounties = new JSONArray(response);
70 | for (int i = 0; i < allCounties.length(); i++) {
71 | JSONObject countyObject = allCounties.getJSONObject(i);
72 | County county = new County();
73 | county.setCountyName(countyObject.getString("name"));
74 | county.setWeatherId(countyObject.getString("weather_id"));
75 | county.setCityId(cityId);
76 | county.save();
77 | }
78 | return true;
79 | } catch (JSONException e) {
80 | e.printStackTrace();
81 | }
82 | }
83 | return false;
84 | }
85 |
86 | /**
87 | * 将返回的JSON数据解析成Weather实体类
88 | */
89 | public static Weather handleWeatherResponse(String response) {
90 | try {
91 | JSONObject jsonObject = new JSONObject(response);
92 | JSONArray jsonArray = jsonObject.getJSONArray("HeWeather");
93 | String weatherContent = jsonArray.getJSONObject(0).toString();
94 | return new Gson().fromJson(weatherContent, Weather.class);
95 | } catch (Exception e) {
96 | e.printStackTrace();
97 | }
98 | return null;
99 | }
100 |
101 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/liu/oldsystem/calendar/BeforeOrAfterCalendarView.java:
--------------------------------------------------------------------------------
1 | package com.liu.oldsystem.calendar;
2 |
3 | import android.content.Context;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.widget.LinearLayout;
7 | import android.widget.RelativeLayout;
8 |
9 | import com.liu.oldsystem.R;
10 | import com.liu.oldsystem.util.TimeUtil;
11 |
12 | import java.util.ArrayList;
13 | import java.util.List;
14 |
15 | /**
16 | * Created by fySpring
17 | * Date : 2017/2/21
18 | * To do :查看当前日期前七天或后七天日历
19 | */
20 |
21 | public class BeforeOrAfterCalendarView extends RelativeLayout {
22 |
23 | private List dayList = new ArrayList<>();
24 | private List dateList = new ArrayList<>();
25 |
26 | protected List itemViewList = new ArrayList<>();
27 | protected Context mContext;
28 | protected LinearLayout calenderViewLl;
29 | protected int curPosition;
30 |
31 | public BeforeOrAfterCalendarView(Context context) {
32 | super(context);
33 | this.mContext = context;
34 | init();
35 | }
36 |
37 | private void init() {
38 | View view = LayoutInflater.from(mContext).inflate(R.layout.before_or_after_calendar_layout, this);
39 |
40 | calenderViewLl = (LinearLayout) view.findViewById(R.id.boa_calender_view_ll);
41 |
42 | setBeforeDateViews();
43 |
44 | initItemViews();
45 | }
46 |
47 | /**
48 | * 设置之前的日期显示
49 | */
50 | private void setBeforeDateViews() {
51 | //获取日期列表
52 | dateList.addAll(TimeUtil.getBeforeDateListByNow());
53 | dayList.addAll(TimeUtil.dateListToDayList(dateList));
54 | }
55 |
56 | private void initItemViews() {
57 | for (int i = 0; i < dateList.size(); i++) {
58 | int day = dayList.get(i);
59 | String curItemDate = dateList.get(i);
60 | final RecordsCalenderItemView itemView;
61 | if(day == TimeUtil.getCurrentDay()){
62 | itemView = new RecordsCalenderItemView(mContext, "今天", String.valueOf(day), i, curItemDate);
63 | }else{
64 | itemView = new RecordsCalenderItemView(mContext, TimeUtil.getCurWeekDay(curItemDate), String.valueOf(day), i, curItemDate);
65 | }
66 |
67 | itemViewList.add(itemView);
68 | calenderViewLl.addView(itemView);
69 |
70 | itemView.setOnCalenderItemClick(new RecordsCalenderItemView.OnCalenderItemClick() {
71 | @Override
72 | public void onCalenderItemClick() {
73 | curPosition = itemView.getPosition();
74 | switchPositionView(curPosition);
75 |
76 | //点击事件
77 | if (calenderClickListener != null) {
78 | calenderClickListener.onClickToRefresh(curPosition,dateList.get(curPosition));
79 | }
80 | }
81 | });
82 | }
83 |
84 | switchPositionView(6);
85 |
86 | }
87 |
88 | private void switchPositionView(int position) {
89 | for (int i = 0; i < itemViewList.size(); i++) {
90 | if (position == i) {
91 | itemViewList.get(i).setChecked(true);
92 | } else {
93 | itemViewList.get(i).setChecked(false);
94 | }
95 | }
96 | }
97 |
98 | private BoaCalenderClickListener calenderClickListener;
99 |
100 | public interface BoaCalenderClickListener {
101 | void onClickToRefresh(int position, String curDate);
102 | }
103 |
104 | public void setOnBoaCalenderClickListener(BoaCalenderClickListener calenderClickListener) {
105 | this.calenderClickListener = calenderClickListener;
106 | }
107 | }
108 |
--------------------------------------------------------------------------------
/app/src/main/java/com/liu/oldsystem/service/AutoUpdateService.java:
--------------------------------------------------------------------------------
1 | package com.liu.oldsystem.service;
2 |
3 | import android.app.AlarmManager;
4 | import android.app.PendingIntent;
5 | import android.app.Service;
6 | import android.content.Intent;
7 | import android.content.SharedPreferences;
8 | import android.os.IBinder;
9 | import android.os.SystemClock;
10 | import android.preference.PreferenceManager;
11 |
12 | import com.liu.oldsystem.gson.Weather;
13 | import com.liu.oldsystem.util.HttpUtil;
14 | import com.liu.oldsystem.util.Utility;
15 |
16 | import java.io.IOException;
17 |
18 | import okhttp3.Call;
19 | import okhttp3.Callback;
20 | import okhttp3.Response;
21 |
22 | public class AutoUpdateService extends Service {
23 |
24 | @Override
25 | public IBinder onBind(Intent intent) {
26 | return null;
27 | }
28 |
29 | @Override
30 | public int onStartCommand(Intent intent, int flags, int startId) {
31 | updateWeather();
32 | updateBingPic();
33 | AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
34 | int anHour = 8 * 60 * 60 * 1000; // 这是8小时的毫秒数
35 | long triggerAtTime = SystemClock.elapsedRealtime() + anHour;
36 | Intent i = new Intent(this, AutoUpdateService.class);
37 | PendingIntent pi = PendingIntent.getService(this, 0, i, 0);
38 | manager.cancel(pi);
39 | manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pi);
40 | return super.onStartCommand(intent, flags, startId);
41 | }
42 |
43 | /**
44 | * 更新天气信息。
45 | */
46 | private void updateWeather(){
47 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
48 | String weatherString = prefs.getString("weather", null);
49 | if (weatherString != null) {
50 | // 有缓存时直接解析天气数据
51 | Weather weather = Utility.handleWeatherResponse(weatherString);
52 | String weatherId = weather.basic.weatherId;
53 | String weatherUrl = "http://guolin.tech/api/weather?cityid=" + weatherId + "&key=bc0418b57b2d4918819d3974ac1285d9";
54 | HttpUtil.sendOkHttpRequest(weatherUrl, new Callback() {
55 | @Override
56 | public void onResponse(Call call, Response response) throws IOException {
57 | String responseText = response.body().string();
58 | Weather weather = Utility.handleWeatherResponse(responseText);
59 | if (weather != null && "ok".equals(weather.status)) {
60 | SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(AutoUpdateService.this).edit();
61 | editor.putString("weather", responseText);
62 | editor.apply();
63 | }
64 | }
65 |
66 | @Override
67 | public void onFailure(Call call, IOException e) {
68 | e.printStackTrace();
69 | }
70 | });
71 | }
72 | }
73 |
74 | /**
75 | * 更新必应每日一图
76 | */
77 | private void updateBingPic() {
78 | String requestBingPic = "http://guolin.tech/api/bing_pic";
79 | HttpUtil.sendOkHttpRequest(requestBingPic, new Callback() {
80 | @Override
81 | public void onResponse(Call call, Response response) throws IOException {
82 | String bingPic = response.body().string();
83 | SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(AutoUpdateService.this).edit();
84 | editor.putString("bing_pic", bingPic);
85 | editor.apply();
86 | }
87 |
88 | @Override
89 | public void onFailure(Call call, IOException e) {
90 | e.printStackTrace();
91 | }
92 | });
93 | }
94 |
95 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/liu/oldsystem/help/TelphoneActivity.java:
--------------------------------------------------------------------------------
1 | package com.liu.oldsystem.help;
2 |
3 | import android.content.Intent;
4 | import android.net.Uri;
5 | import android.support.v7.app.AppCompatActivity;
6 | import android.os.Bundle;
7 | import android.view.MenuItem;
8 | import android.view.View;
9 | import android.widget.Button;
10 | import android.widget.EditText;
11 | import android.widget.TextView;
12 | import android.widget.Toast;
13 |
14 | import com.liu.oldsystem.MainActivity;
15 | import com.liu.oldsystem.R;
16 | import com.liu.oldsystem.db.ContactPerson;
17 |
18 | import org.litepal.crud.DataSupport;
19 |
20 | import java.util.List;
21 |
22 | public class TelphoneActivity extends AppCompatActivity {
23 | private EditText infoNameText;
24 | private EditText infoUserTelphoneText;
25 | private static boolean judge = false;
26 |
27 | @Override
28 | protected void onCreate(Bundle savedInstanceState) {
29 | super.onCreate(savedInstanceState);
30 | setContentView(R.layout.activity_telphone);
31 | getSupportActionBar().setDisplayHomeAsUpEnabled(true);
32 | getSupportActionBar().setTitle("电话求救");
33 | final EditText tel = (EditText)findViewById(R.id.phonetel);
34 | Button tel_help = (Button) findViewById(R.id.tel_help);
35 | tel_help.setOnClickListener(new View.OnClickListener() {
36 | @Override
37 | public void onClick(View v) {
38 | dialPhoneNumber(tel.getText().toString().trim());
39 | }
40 | });
41 | Button personSearchButton = (Button) findViewById(R.id.person_search);
42 | personSearchButton.setOnClickListener(new View.OnClickListener() {
43 | @Override
44 | public void onClick(View v) {
45 | judge = true;
46 | List people = DataSupport.findAll(ContactPerson.class);
47 | String temp = "";
48 | for (ContactPerson person: people) {
49 | if(person.getIsContact().equals("是"))
50 | temp += "联系人编号:"+person.getId()+"\n姓名:"+person.getName()+"\n"+"电话:"+person.getTel() +"\n\n\n";
51 | }
52 | if(temp == "")
53 | temp = "当前未保存任何联系人,无紧急联系人信息!!!";
54 | // Toast.makeText(TelphoneActivity.this,"所有联系人查找成功!!!",Toast.LENGTH_SHORT).show();
55 | Intent intent = new Intent(TelphoneActivity.this, UrgentInfoActivity.class);
56 | intent.putExtra("search_info", temp);
57 | startActivity(intent);
58 | finish();
59 | }
60 | });
61 |
62 | this.initView();
63 | Intent intent = this.getIntent();
64 | String infoUserName = intent.getStringExtra(UrgentInfoActivity.INFO_USER_NAME);
65 | String infoPerSign = intent.getStringExtra(UrgentInfoActivity.INFO_USER_TEL);
66 | if(judge) {
67 | infoNameText.setText(infoUserName);
68 | infoUserTelphoneText.setText(infoPerSign);
69 | }
70 | }
71 |
72 | private void dialPhoneNumber(String phoneNumber) {
73 | Intent intent =new Intent(Intent.ACTION_DIAL,Uri.parse("tel:"+phoneNumber));
74 | startActivity(intent);
75 | }
76 |
77 | private void initView() {
78 | infoNameText = (EditText) this.findViewById(R.id.telnname);
79 | infoUserTelphoneText = (EditText) this.findViewById(R.id.phonetel);
80 | }
81 |
82 | @Override
83 | public boolean onOptionsItemSelected(MenuItem item) {
84 | switch (item.getItemId()) {
85 | case android.R.id.home:
86 | // Intent intent =new Intent(TelphoneActivity.this,MainActivity.class);
87 | // startActivity(intent);
88 | finish();
89 | break;
90 | default:
91 | break;
92 | }
93 | return super.onOptionsItemSelected(item);
94 | }
95 | }
96 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_telphone.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
12 |
13 |
19 |
26 |
27 |
28 |
32 |
38 |
45 |
46 |
47 |
52 |
53 |
62 |
63 |
68 |
69 |
73 |
82 |
83 |
84 |
88 |
89 |
100 |
101 |
102 |
103 |
104 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_navigation.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
10 |
11 |
12 |
13 |
17 |
23 |
30 |
31 |
37 |
38 |
42 |
51 |
52 |
53 |
58 |
59 |
64 |
74 |
75 |
76 |
86 |
87 |
92 |
93 |
94 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | # 老年人便捷服务系统用户手册
3 |
4 | **1.首先,点击APP图标,出现如下系统欢迎界面。**
5 |
6 | 
7 |
8 |
9 |
10 | **2. 进入系统后,可以左右滑动,查看整体模块界面,分别是一键求救页面、位置服务页面、健康监测页面和智能工具页面。**
11 |
12 | 
13 | 
14 | 
15 | 
16 |
17 |
18 |
19 | **3.点击一键求救模块中摔倒识别按钮,系统会对用户手机当前屏幕向右、向上、向外加速度进行监测,当达到系统设定的摔倒加速度值时,系统自动跳转到识别求救页面,供用户自行选择求救。**
20 |
21 | 
22 |
23 |
24 |
25 |
26 | **4.点击一键求救页面紧急联系人设置按钮,即可进行联系人添加、修改、删除、查询单个联系人、查询所有联系人信息。**
27 |
28 | 
29 |
30 |
31 | **5.点击一键求救页面电话求救按钮,出现界面首先出现用户默认的紧急联系人姓名和电话信息,如果用户打算修改,可以点击紧急联系人查询按钮,系统从后台数据库查询所有状态为紧急联系人的姓名和电话,用户选择填写,填写完毕后,点击紧急联系人修改按钮即可返回电话求救页面,并成功修改紧急联系人信息。最后,点击求救按钮,可以直接电话求救。**
32 |
33 | 
34 |
35 |
36 |
37 | **6.点击一键求救页面短信求救按钮,出现如下界面,点击获取介绍人电话,系统从后台数据库查询出所哟状态为紧急联系人电话和姓名信息,点击获取定位按钮,系统在发送内容一栏直接出现用户当前定位信息。最后,用户可以点击群发按钮,系统会向相应用户发送求救短信,每条短信内容会利用各个紧急联系人姓名信息进行智能发送。**
38 |
39 | 
40 |
41 |
42 | **7.点击位置服务实时定位按钮,即可获取用户当前具体位置信息。**
43 |
44 | 
45 |
46 |
47 |
48 |
49 | **8.点击位置服务路线导航按钮,首先自动定位出用户当前位置,并默认设定为起点,用户此时点击地图中某一地点,系统自动解析出具体位置,设定为目的地,最后点击搜索路线按钮,即可出现具体路线规划。**
50 |
51 | 
52 |
53 | **线路规划功能调用百度地图APP实现,即用户界面把自己当前定位和预定到达目的地传递给百度地图APP客户端,直接实现线路规划。(PS:本项目选择的功能为自己实现方式,不过具体实现代码在上述功能模块中有写)**
54 |
55 | 
56 |
57 |
58 |
59 |
60 |
61 |
62 | **9.点击位置服务天气查询按钮,首先用户需要选择当前具体所在地省、市、县的具体信息,选择完毕后,即可查看所在地一周之内的天气信息,如果要变更地点,可以点击界面左上角按钮,进行地点信息变换。**
63 |
64 | 
65 |
66 |
67 |
68 |
69 |
70 |
71 | **10.点击位置服务页面摇一摇定位按钮,用户摇一摇手机即可跳转到实时定位页面。**
72 |
73 | 
74 |
75 |
76 |
77 |
78 | **11.点击健康监测页面计步器功能按钮,系统后台会开启自动计算用户当前行走步数统计服务,只要应用不关闭,计步功能将会一直在后台开启。另外,界面最上端日期,点击不同的日期,将会出现对应日期的行走步数统计信息。**
79 |
80 | 
81 |
82 |
83 |
84 |
85 | **12.点击健康监测备忘录功能按钮,首先输入备忘录内容,点击保存按钮,即可保存到后台数据库,点击查看所有备忘信息即可查看备忘录信息。最后,用户首先选择提醒时间,设置重复方式和铃声方式,到达具体时间后,系统会以闹钟形式提醒用户查看备忘录信息。(PS:Android5.0以后系统内关于闹钟设置API,具体提醒时间会有2分钟左右的时间误差)**
86 |
87 | 
88 |
89 |
90 |
91 |
92 | **13.点击健康监测睡眠监测功能按钮,用户按钮界面打卡时间提示进行起床打卡和睡前打卡即可。系统会把用户打卡信息存入后台数据库。点击统计结果查看即可查看具体信息。**
93 |
94 | 
95 |
96 |
97 |
98 |
99 | **14.点击健康监测页面心率检测功能按钮,用户需要把自己某一手指的指尖覆盖摄像头30秒,系统即可测试出用户的心率值。(PS:测试结果可能有较大误差)**
100 |
101 | 
102 |
103 |
104 |
105 | **15.点击智能工具页面手电筒功能按钮,即可打开和关闭手机自带的手电灯光。**
106 |
107 | **16.点击智能工具页面放大镜功能按钮,即可放大和缩小摔倒识别界面、所有联系人信息界面、紧急联系人查询界面以及所有备忘信息界面显示文字大小。**
108 |
109 | **17.点击智能工具页面调节亮度功能按钮,即可进行用户手机显示页面亮度大小调节。最大亮度值为255,最小亮度值为20。**
110 | 
111 |
112 |
--------------------------------------------------------------------------------
/app/src/main/java/com/liu/oldsystem/calendar/RecordsCalenderItemView.java:
--------------------------------------------------------------------------------
1 | package com.liu.oldsystem.calendar;
2 |
3 | import android.content.Context;
4 | import android.graphics.Color;
5 | import android.view.LayoutInflater;
6 | import android.view.View;
7 | import android.view.ViewGroup;
8 | import android.widget.LinearLayout;
9 | import android.widget.RelativeLayout;
10 | import android.widget.TextView;
11 |
12 | import com.liu.oldsystem.R;
13 | import com.liu.oldsystem.health.StepActivity;
14 |
15 | /**
16 | * 查看一周内每天的历史纪录日历Item布局
17 | */
18 |
19 | public class RecordsCalenderItemView extends RelativeLayout {
20 | private static final String TAG = "RecordsCalenderItemView";
21 |
22 | private Context mContext;
23 |
24 | private LinearLayout itemLl;
25 | private View lineView;
26 | private TextView weekTv;
27 | private RelativeLayout dateRl;
28 | private TextView dateTv;
29 | //日期时间
30 | private String weekStr, dateStr;
31 | private int position;
32 |
33 | //当前item 的时间 ,如 2017年02月07日 , 用以判断当前item是否可以被点击
34 | protected String curItemDate;
35 |
36 |
37 | OnCalenderItemClick itemClick = null;
38 |
39 | public interface OnCalenderItemClick {
40 | public void onCalenderItemClick();
41 | }
42 |
43 | public void setOnCalenderItemClick(OnCalenderItemClick itemClick) {
44 | this.itemClick = itemClick;
45 | }
46 |
47 |
48 | public RecordsCalenderItemView(Context context, String week, String date, int position, String curItemDate) {
49 | super(context);
50 | this.mContext = context;
51 | this.weekStr = week;
52 | this.dateStr = date;
53 | this.position = position;
54 | this.curItemDate = curItemDate;
55 | init();
56 | }
57 |
58 | private void init() {
59 | LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
60 | final View itemView = inflater.inflate(R.layout.records_calender_item_view, this);
61 | itemLl = (LinearLayout) itemView.findViewById(R.id.records_calender_item_ll);
62 | weekTv = (TextView) itemView.findViewById(R.id.records_calender_item_week_tv);
63 | lineView = itemView.findViewById(R.id.calendar_item_line_view);
64 | dateRl = (RelativeLayout) itemView.findViewById(R.id.records_calender_item_date_rl);
65 | dateTv = (TextView) itemView.findViewById(R.id.records_calender_item_date_tv);
66 |
67 | //如果日期是今天的话设为选中 目前有BUG
68 |
69 | // if(curItemDate.equals(TimeUtil.getCurrentDate())){
70 | // dateTv.setBackgroundResource(R.drawable.ic_blue_round_border_bg);
71 | // dateTv.getBackground().setAlpha(255);
72 | // }else{
73 | // if(dateTv.getBackground() != null){
74 | // dateTv.getBackground().setAlpha(0);
75 | // }
76 | // }
77 |
78 |
79 | weekTv.setTextSize(15);
80 | lineView.setVisibility(GONE);
81 |
82 | weekTv.setText(weekStr);
83 | dateTv.setText(dateStr);
84 |
85 | itemView.setLayoutParams(new LayoutParams((StepActivity.screenWidth) / 7,
86 | ViewGroup.LayoutParams.MATCH_PARENT));
87 |
88 | itemView.setOnClickListener(new OnClickListener() {
89 | @Override
90 | public void onClick(View v) {
91 | itemClick.onCalenderItemClick();
92 | }
93 | });
94 |
95 | }
96 |
97 | //返回当前项的id
98 | public int getPosition() {
99 | return position;
100 | }
101 |
102 | public void setChecked(boolean checkedFlag) {
103 |
104 | if (checkedFlag) {
105 | //当前item被选中后样式
106 | weekTv.setTextColor(getResources().getColor(R.color.main_text_color));
107 | dateTv.setTextColor(getResources().getColor(R.color.white));
108 | dateRl.setBackgroundResource(R.mipmap.ic_blue_round_bg);
109 | } else {
110 | //当前item未被选中样式
111 | weekTv.setTextColor(getResources().getColor(R.color.gray_default_dark));
112 | dateTv.setTextColor(getResources().getColor(R.color.gray_default_dark));
113 | //设置背景透明
114 | dateRl.setBackgroundColor(Color.TRANSPARENT);
115 | }
116 |
117 | }
118 | }
119 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_urgent_info.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
12 |
13 |
19 |
26 |
27 |
28 |
32 |
38 |
45 |
46 |
47 |
52 |
53 |
63 |
64 |
69 |
70 |
74 |
83 |
84 |
85 |
90 |
94 |
95 |
99 |
100 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------