zoukankan      html  css  js  c++  java
  • android 实践项目四

                    android 实践项目四

    本周主要是开发android baidumap实现公交的查询

    1、权限的取得和对屏幕的支持

     1     <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" >
     2     </uses-permission>
     3     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
     4     </uses-permission>
     5     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
     6     </uses-permission>
     7     <uses-permission android:name="android.permission.INTERNET" >
     8     </uses-permission>
     9     <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" >
    10     </uses-permission>
    11     <!-- <uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission> -->
    12     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
    13     </uses-permission>
    14     <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    15     <uses-permission android:name="android.permission.WAKE_LOCK" >
    16     </uses-permission>
    17     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    18     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    19     <uses-permission android:name="android.permission.ACCESS_GPS" />
    20     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    21     <uses-permission android:name="android.permission.READ_CONTACTS" />
    22     <uses-permission android:name="android.permission.CALL_PHONE" />
    23     <uses-permission android:name="android.permission.READ_SMS" />
    24     <uses-permission android:name="android.permission.SEND_SMS" />
    25     <!-- SDK1.5需要android.permission.GET_TASKS权限判断本程序是否为当前运行的应用? -->
    26     <uses-permission android:name="android.permission.GET_TASKS" />
    27     <uses-permission android:name="android.permission.CAMERA" >
    28     </uses-permission>
    29     <uses-permission android:name="android.permission.RECORD_AUDIO" >
    30     </uses-permission>
    31     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
    32     </uses-permission>
    33     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    34     <uses-permission android:name="android.permission.BROADCAST_STICKY" />
    35     <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    36     <!-- 来电消音 -->
    37     <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" >
    38     </uses-permission>
    39     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    40     <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    41 
    42     <supports-screens
    43         android:anyDensity="true"
    44         android:largeScreens="true"
    45         android:normalScreens="false"
    46         android:resizeable="true"
    47         android:smallScreens="true" />
    View Code


    2、main.java实现

      1 package baidumapsdk.demo;
      2 
      3 import java.util.ArrayList;
      4 import java.util.List;
      5 
      6 import android.os.Bundle;
      7 import android.support.v4.app.FragmentActivity;
      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.baidu.mapapi.map.BaiduMap;
     15 import com.baidu.mapapi.map.InfoWindow;
     16 import com.baidu.mapapi.map.MapPoi;
     17 import com.baidu.mapapi.map.MapStatusUpdateFactory;
     18 import com.baidu.mapapi.map.SupportMapFragment;
     19 import com.baidu.mapapi.model.LatLng;
     20 import com.baidu.mapapi.overlayutil.BusLineOverlay;
     21 import com.baidu.mapapi.search.busline.BusLineResult;
     22 import com.baidu.mapapi.search.busline.BusLineSearch;
     23 import com.baidu.mapapi.search.busline.BusLineSearchOption;
     24 import com.baidu.mapapi.search.busline.OnGetBusLineSearchResultListener;
     25 import com.baidu.mapapi.search.core.PoiInfo;
     26 import com.baidu.mapapi.search.core.SearchResult;
     27 import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
     28 import com.baidu.mapapi.search.poi.PoiCitySearchOption;
     29 import com.baidu.mapapi.search.poi.PoiDetailResult;
     30 import com.baidu.mapapi.search.poi.PoiResult;
     31 import com.baidu.mapapi.search.poi.PoiSearch;
     32 
     33 /**
     34  * 此demo用来展示如何进行公交线路详情检索,并使用RouteOverlay在地图上绘制 同时展示如何浏览路线节点并弹出泡泡
     35  */
     36 public class BusLineSearchDemo extends FragmentActivity implements
     37         OnGetPoiSearchResultListener, OnGetBusLineSearchResultListener,
     38         BaiduMap.OnMapClickListener {
     39     private Button mBtnPre = null;// 上一个节点
     40     private Button mBtnNext = null;// 下一个节点
     41     private int nodeIndex = -2;// 节点索引,供浏览节点时使用
     42     private BusLineResult route = null;// 保存驾车/步行路线数据的变量,供浏览节点时使用
     43     private List<String> busLineIDList = null;
     44     private int busLineIndex = 0;
     45     // 搜索相关
     46     private PoiSearch mSearch = null; // 搜索模块,也可去掉地图模块独立使用
     47     private BusLineSearch mBusLineSearch = null;//城市公交查询
     48     private BaiduMap mBaiduMap = null;
     49 
     50     protected void onCreate(Bundle savedInstanceState) {
     51         super.onCreate(savedInstanceState);
     52         setContentView(R.layout.activity_busline);
     53         CharSequence titleLable = "公交线路查询功能";//在图层中显示名称
     54         setTitle(titleLable);
     55         mBtnPre = (Button) findViewById(R.id.pre);
     56         mBtnNext = (Button) findViewById(R.id.next);
     57         mBtnPre.setVisibility(View.INVISIBLE);
     58         mBtnNext.setVisibility(View.INVISIBLE);
     59         mBaiduMap = ((SupportMapFragment) getSupportFragmentManager()
     60                 .findFragmentById(R.id.bmapView)).getBaiduMap();
     61         mBaiduMap.setOnMapClickListener(this);//地图单击事件监听接口
     62         mSearch = PoiSearch.newInstance();//POI检索接口
     63         mSearch.setOnGetPoiSearchResultListener(this);//设置poi检索监听者
     64         mBusLineSearch = BusLineSearch.newInstance();
     65         mBusLineSearch.setOnGetBusLineSearchResultListener(this);//设置公交详情检索结果监听者
     66         busLineIDList = new ArrayList<String>();
     67 
     68     }
     69 
     70     /**
     71      * 发起检索
     72      * 
     73      * @param v
     74      */
     75     public void searchButtonProcess(View v) {
     76         busLineIDList.clear();
     77         busLineIndex = 0;
     78         mBtnPre.setVisibility(View.INVISIBLE);
     79         mBtnNext.setVisibility(View.INVISIBLE);
     80         EditText editCity = (EditText) findViewById(R.id.city);
     81         EditText editSearchKey = (EditText) findViewById(R.id.searchkey);
     82         // 发起poi检索,从得到所有poi中找到公交线路类型的poi,再使用该poi的uid进行公交详情搜索
     83         mSearch.searchInCity((new PoiCitySearchOption()).city(
     84                 editCity.getText().toString()).keyword(
     85                 editSearchKey.getText().toString()));
     86     }
     87 
     88     public void SearchNextBusline(View v) {
     89         if (busLineIndex >= busLineIDList.size()) {
     90             busLineIndex = 0;
     91         }//在编辑中输入文本得然后获得公交路线
     92         if (busLineIndex >= 0 && busLineIndex < busLineIDList.size()
     93                 && busLineIDList.size() > 0) {
     94             mBusLineSearch.searchBusLine((new BusLineSearchOption()
     95                     .city(((EditText) findViewById(R.id.city)).getText()
     96                             .toString()).uid(busLineIDList.get(busLineIndex))));
     97 
     98             busLineIndex++;
     99         }
    100 
    101     }
    102 
    103     /**
    104      * 节点浏览示例
    105      * 
    106      * @param v
    107      */
    108     public void nodeClick(View v) {
    109 
    110         if (nodeIndex < -1 || route == null
    111                 || nodeIndex >= route.getStations().size())
    112             return;
    113         TextView popupText = new TextView(this);
    114         popupText.setBackgroundResource(R.drawable.popup);//设置背景源
    115         popupText.setTextColor(0xff000000);//设置文本颜色
    116         // 上一个节点
    117         if (mBtnPre.equals(v) && nodeIndex > 0) {
    118             // 索引减
    119             nodeIndex--;
    120         }
    121         // 下一个节点
    122         if (mBtnNext.equals(v) && nodeIndex < (route.getStations().size() - 1)) {
    123             // 索引加
    124             nodeIndex++;
    125         }
    126         if(nodeIndex >= 0){
    127             // 移动到指定索引的坐标
    128             mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(route
    129                     .getStations().get(nodeIndex).getLocation()));
    130             // 弹出泡泡
    131             popupText.setText(route.getStations().get(nodeIndex).getTitle());
    132             mBaiduMap.showInfoWindow(new InfoWindow(popupText, route.getStations()
    133                     .get(nodeIndex).getLocation(), 0));
    134         }
    135     }
    136 
    137     @Override
    138     protected void onPause() {
    139         super.onPause();
    140     }
    141 
    142     @Override
    143     protected void onResume() {
    144         super.onResume();
    145     }
    146 
    147     @Override
    148     protected void onDestroy() {
    149         mSearch.destroy();
    150         mBusLineSearch.destroy();
    151         super.onDestroy();
    152     }
    153 
    154     @Override
    155     public void onGetBusLineResult(BusLineResult result) {
    156         if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
    157             Toast.makeText(BusLineSearchDemo.this, "抱歉,未找到结果",
    158                     Toast.LENGTH_LONG).show();
    159             return;
    160         }
    161         mBaiduMap.clear();
    162         route = result;
    163         nodeIndex = -1;
    164         BusLineOverlay overlay = new BusLineOverlay(mBaiduMap);
    165         mBaiduMap.setOnMarkerClickListener(overlay);
    166         overlay.setData(result);
    167         overlay.addToMap();
    168         overlay.zoomToSpan();
    169         mBtnPre.setVisibility(View.VISIBLE);
    170         mBtnNext.setVisibility(View.VISIBLE);
    171         Toast.makeText(BusLineSearchDemo.this, result.getBusLineName(),
    172                 Toast.LENGTH_SHORT).show();
    173     }
    174 
    175     @Override
    176     public void onGetPoiResult(PoiResult result) {
    177 
    178         if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
    179             Toast.makeText(BusLineSearchDemo.this, "抱歉,未找到结果",
    180                     Toast.LENGTH_LONG).show();
    181             return;
    182         }
    183         // 遍历所有poi,找到类型为公交线路的poi
    184         busLineIDList.clear();
    185         for (PoiInfo poi : result.getAllPoi()) {
    186             if (poi.type == PoiInfo.POITYPE.BUS_LINE
    187                     || poi.type == PoiInfo.POITYPE.SUBWAY_LINE) {
    188                 busLineIDList.add(poi.uid);
    189             }
    190         }
    191         SearchNextBusline(null);
    192         route = null;
    193     }
    194 
    195     @Override
    196     public void onGetPoiDetailResult(PoiDetailResult result) {
    197 
    198     }
    199 
    200     @Override
    201     public void onMapClick(LatLng point) {
    202         mBaiduMap.hideInfoWindow();
    203     }
    204 
    205     @Override
    206     public boolean onMapPoiClick(MapPoi poi) {
    207         return false;
    208     }
    209 }
    View Code

    3、布局的实现.xml

      1 <?xml version="1.0" encoding="utf-8"?>
      2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      3     android:layout_width="fill_parent"
      4     android:layout_height="fill_parent"
      5     android:orientation="vertical" >
      6 
      7     <LinearLayout
      8         xmlns:android="http://schemas.android.com/apk/res/android"
      9         android:layout_width="fill_parent"
     10         android:layout_height="wrap_content"
     11         android:orientation="horizontal" >
     12 
     13         <TextView
     14             android:layout_width="wrap_content"
     15             android:layout_height="wrap_content"
     16             android:text="" />
     17 
     18         <EditText
     19             android:id="@+id/city"
     20             android:layout_width="wrap_content"
     21             android:layout_height="wrap_content"
     22             android:text="北京" />
     23 
     24         <TextView
     25             android:layout_width="wrap_content"
     26             android:layout_height="wrap_content"
     27             android:text="市内找" />
     28 
     29         <EditText
     30             android:id="@+id/searchkey"
     31             android:layout_width="wrap_content"
     32             android:layout_height="wrap_content"
     33             android:text="83" />
     34 
     35         <TextView
     36             android:layout_width="wrap_content"
     37             android:layout_height="wrap_content"
     38             android:text="公交车" />
     39 
     40         <LinearLayout
     41             xmlns:android="http://schemas.android.com/apk/res/android"
     42             android:layout_width="fill_parent"
     43             android:layout_height="wrap_content"
     44             android:orientation="horizontal" >
     45 
     46             <Button
     47                 android:id="@+id/search"
     48                 android:layout_width="fill_parent"
     49                 android:layout_height="wrap_content"
     50                 android:layout_marginLeft="2dip"
     51                 android:layout_marginRight="2dip"
     52                 android:layout_weight="1"
     53                 android:background="@drawable/button_style"
     54                 android:onClick="searchButtonProcess"
     55                 android:text="开始" />
     56 
     57             <Button
     58                 android:id="@+id/nextline"
     59                 android:layout_width="fill_parent"
     60                 android:layout_height="wrap_content"
     61                 android:layout_marginLeft="2dip"
     62                 android:layout_marginRight="2dip"
     63                 android:layout_weight="1"
     64                 android:background="@drawable/button_style"
     65                 android:onClick="SearchNextBusline"
     66                 android:text="下一条" />
     67         </LinearLayout>
     68     </LinearLayout>
     69 
     70     <RelativeLayout
     71         xmlns:android="http://schemas.android.com/apk/res/android"
     72         android:layout_width="match_parent"
     73         android:layout_height="match_parent" >
     74 
     75         <fragment
     76             android:id="@+id/bmapView"
     77             android:layout_width="fill_parent"
     78             android:layout_height="fill_parent"
     79             class="com.baidu.mapapi.map.SupportMapFragment"
     80             android:clickable="true" />
     81 
     82         <LinearLayout
     83             xmlns:android="http://schemas.android.com/apk/res/android"
     84             android:layout_width="wrap_content"
     85             android:layout_height="wrap_content"
     86             android:layout_alignParentBottom="true"
     87             android:layout_alignWithParentIfMissing="false"
     88             android:layout_centerHorizontal="true"
     89             android:layout_centerVertical="false"
     90             android:layout_marginBottom="10dip" >
     91 
     92             <Button
     93                 android:id="@+id/pre"
     94                 android:layout_width="fill_parent"
     95                 android:layout_height="fill_parent"
     96                 android:layout_marginLeft="2dip"
     97                 android:layout_marginRight="2dip"
     98                 android:layout_weight="1.0"
     99                 android:background="@drawable/pre_"
    100                 android:onClick="nodeClick" />
    101 
    102             <Button
    103                 android:id="@+id/next"
    104                 android:layout_width="fill_parent"
    105                 android:layout_height="fill_parent"
    106                 android:layout_marginLeft="2dip"
    107                 android:layout_marginRight="2dip"
    108                 android:layout_weight="1.0"
    109                 android:background="@drawable/next_"
    110                 android:onClick="nodeClick" />
    111         </LinearLayout>
    112     </RelativeLayout>
    113 
    114 </LinearLayout>
    View Code

    4、默认的是北京83路公交

  • 相关阅读:
    POJ 2253 Frogger(最短路 Floyd)
    POJ 1062 昂贵的聘礼 (最短路 Dijkstra)
    POJ 3259 Wormholes(最短路Bellman_Ford)
    POJ 3414 Pots(容量BFS)
    POJ 3087 Shuffle'm Up(模拟题)
    POJ 3216 Prime Path(数字BFS)
    refresh的停车场
    基于邻接表的广度优先搜索遍历
    判断给定图是否存在合法的拓扑排序
    威威猫系列故事——篮球梦
  • 原文地址:https://www.cnblogs.com/20159213yf/p/5006045.html
Copyright © 2011-2022 走看看