One application base on GoogleMapsAPI,has some problems

Tutorials that use the MapActivity. Many using GPS functionality.

One application base on GoogleMapsAPI,has some problems

Postby kukudan4 » Sun Mar 06, 2011 3:38 am

size=150]It works well on the Emulator,but when I apply it on my XT800,2.2.1ROM.
It broken down.
Here is my code and logcat.Please help me to solve the problems.Thanks!
[/size]
log.txt
(12.45 KiB) Downloaded 109 times

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2.  
  3.  
  4. package net.learn2develop.GoogleMaps;
  5.  
  6. import java.io.IOException;
  7. import java.util.List;
  8. import java.util.Locale;
  9.  
  10. import com.google.android.maps.GeoPoint;
  11. import com.google.android.maps.MapActivity;
  12. import com.google.android.maps.MapController;
  13. import com.google.android.maps.MapView;
  14. import com.google.android.maps.Overlay;
  15.  
  16. import android.content.BroadcastReceiver;
  17. import android.content.Context;
  18. import android.content.Intent;
  19. import android.content.IntentFilter;
  20. import android.content.SharedPreferences;
  21. import android.graphics.Bitmap;
  22. import android.graphics.BitmapFactory;
  23. import android.graphics.Canvas;
  24. import android.graphics.Point;
  25. import android.location.Address;
  26. import android.location.Geocoder;
  27. import android.os.Bundle;
  28. import com.google.android.maps.MapView.LayoutParams;
  29.  
  30. import android.telephony.SmsMessage;
  31. import android.view.KeyEvent;
  32. import android.view.MotionEvent;
  33. import android.view.View;
  34. import android.widget.LinearLayout;
  35. import android.widget.Toast;
  36.  
  37. public class MapsActivity extends MapActivity {
  38.         MapView mapView;
  39.         MapController mc;
  40.         GeoPoint p;
  41.         public static final String PREF_FILE_NAME = "PrefFile";
  42.         String[] coordinates = new String[2];
  43.         String[] location = new String[2];
  44.         String temp;
  45.         Bundle bundle;
  46.  
  47.         public void onCreate(Bundle savedInstanceState) {
  48.                 super.onCreate(savedInstanceState);
  49.                 setContentView(R.layout.main);
  50.  
  51.                 mapView = (MapView) findViewById(R.id.mapView);
  52.                 LinearLayout zoomLayout = (LinearLayout) findViewById(R.id.zoom);
  53.                 View zoomView = mapView.getZoomControls();
  54.  
  55.                 zoomLayout.addView(zoomView, new LinearLayout.LayoutParams(
  56.                                 LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
  57.                 mapView.displayZoomControls(true);
  58.  
  59.                 // mapView.setSatellite(true); /**显示卫星视图
  60.                 // mapView.setStreetView(true); /**显示街道视图
  61.  
  62.                 mc = mapView.getController();
  63.  
  64.                 bundle = getIntent().getExtras();
  65.                
  66.                 try {
  67.                         if (bundle == null) {
  68.                                 temp = "40.849165,123.328739";
  69.                         } else {
  70.                                 temp = bundle.getString("location");
  71.                         }
  72.                         location = temp.split(",");
  73.                 } catch (NumberFormatException e) {
  74.                         e.toString();
  75.                 }
  76.                
  77.                
  78.  
  79.                 for (int i = 0; i < location.length; i++) {
  80.                         coordinates[i] = location[i];
  81.                 }
  82.  
  83.                 double lat = Double.parseDouble(coordinates[0]);
  84.                 double lng = Double.parseDouble(coordinates[1]);
  85.  
  86.                 p = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
  87.  
  88.                 mc.animateTo(p);
  89.  
  90.                 mc.setZoom(17);
  91.                 MapOverlay mapOverlay = new MapOverlay();
  92.                 List<Overlay> listOfOverlays = mapView.getOverlays();
  93.                 listOfOverlays.clear();
  94.                 listOfOverlays.add(mapOverlay);
  95.  
  96.                 mapView.invalidate();
  97.  
  98.         }
  99.  
  100.  
  101.         class MapOverlay extends com.google.android.maps.Overlay {
  102.                 @Override
  103.                 public boolean draw(Canvas canvas, MapView mapView, boolean shadow,
  104.                                 long when) {
  105.                         super.draw(canvas, mapView, shadow);
  106.  
  107.                         // ---translate the GeoPoint to screen pixels---
  108.                         Point screenPts = new Point();
  109.                         mapView.getProjection().toPixels(p, screenPts);
  110.  
  111.                         // ---add the marker---
  112.                         Bitmap bmp = BitmapFactory.decodeResource(getResources(),
  113.                                         R.drawable.icon);
  114.                         canvas.drawBitmap(bmp, screenPts.x, screenPts.y - 50, null);
  115.                         return true;
  116.                 }
  117.  
  118.                 public boolean onTouchEvent(MotionEvent event, MapView mapView) {
  119.                         // ---when user lifts his finger---
  120.                         if (event.getAction() == 1) {
  121.                                 GeoPoint p = mapView.getProjection().fromPixels(
  122.                                                 (int) event.getX(), (int) event.getY());
  123.  
  124.                                 /** 通过获取坐标来拿到地理名称加上坐标显示 **/
  125.                                 Geocoder geoCoder = new Geocoder(getBaseContext(),
  126.                                                 Locale.getDefault());
  127.                                 try {
  128.                                         List<Address> addresses = geoCoder.getFromLocation(
  129.                                                         p.getLatitudeE6() / 1E6, p.getLongitudeE6() / 1E6,
  130.                                                         1);
  131.  
  132.                                         String add = "";
  133.                                         if (addresses.size() > 0) {
  134.                                                 for (int i = 0; i < addresses.get(0)
  135.                                                                 .getMaxAddressLineIndex(); i++)
  136.                                                         add += addresses.get(0).getAddressLine(i) + "\n"
  137.                                                                         + p.getLatitudeE6() / 1E6 + ","
  138.                                                                         + p.getLongitudeE6() / 1E6 + "\n";
  139.                                         }
  140.  
  141.                                         Toast.makeText(getBaseContext(), add, Toast.LENGTH_SHORT)
  142.                                                         .show();
  143.                                 } catch (IOException e) {
  144.                                         e.printStackTrace();
  145.                                 }
  146.  
  147.                                 /**
  148.                                  * 通过已知的地名找出位置 Geocoder geoCoder = new
  149.                                  * Geocoder(getBaseContext(), Locale.getDefault()); try {
  150.                                  * List<Address> addresses = geoCoder.getFromLocationName(
  151.                                  * "empire state building", 5); String add = ""; if
  152.                                  * (addresses.size() > 0) { p = new GeoPoint( (int)
  153.                                  * (addresses.get(0).getLatitude() * 1E6), (int)
  154.                                  * (addresses.get(0).getLongitude() * 1E6)); mc.animateTo(p);
  155.                                  * mapView.invalidate(); } } catch (IOException e) {
  156.                                  * e.printStackTrace(); }
  157.                                  */
  158.                                 return true;
  159.                         } else
  160.                                 return false;
  161.                 }
  162.  
  163.         }
  164.  
  165.         /** Called when the activity is first created. */
  166.         @Override
  167.         public boolean onKeyDown(int keyCode, KeyEvent event) {
  168.                 MapController mc = mapView.getController();
  169.                 switch (keyCode) {
  170.                 case KeyEvent.KEYCODE_3:
  171.                         mc.zoomIn();
  172.                         break;
  173.                 case KeyEvent.KEYCODE_1:
  174.                         mc.zoomOut();
  175.                         break;
  176.                 }
  177.                 return super.onKeyDown(keyCode, event);
  178.         }
  179.  
  180.         @Override
  181.         protected boolean isRouteDisplayed() {
  182.                 return false;
  183.         }
  184.  
  185. }
Parsed in 0.050 seconds, using GeSHi 1.0.8.4

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2.  
  3.  
  4. package net.learn2develop.GoogleMaps;
  5.  
  6. import java.io.Serializable;
  7.  
  8. import android.content.BroadcastReceiver;
  9. import android.content.Context;
  10. import android.content.Intent;
  11. import android.os.Bundle;
  12. import android.telephony.gsm.SmsMessage;
  13. import android.util.Log;
  14. import android.widget.Toast;
  15.  
  16. public class SMSReceiver extends BroadcastReceiver implements Serializable {
  17.  
  18.         @Override
  19.         public void onReceive(Context context, Intent intent) {
  20.  
  21.                 if ("android.provider.Telephony.SMS_RECEIVED"
  22.                                 .equals(intent.getAction())) {
  23.                         StringBuilder sb = new StringBuilder();
  24.                         // 接收由SMS传过来的数据
  25.                         Bundle bundle = intent.getExtras();
  26.                         // 判断是否有数据
  27.                         if (bundle != null) {
  28.                                 // 通过pdus可以获得接收到的所有短信消息
  29.                                 Object[] objArray = (Object[]) bundle.get("pdus");
  30.                                 /* 构建短信对象array,并依据收到的对象长度来创建array的大小 */
  31.                                 SmsMessage[] messages = new SmsMessage[objArray.length];
  32.                                 for (int i = 0; i < objArray.length; i++) {
  33.                                         messages[i] = SmsMessage
  34.                                                         .createFromPdu((byte[]) objArray[i]);
  35.                                 }
  36.  
  37.                                 /* 将送来的短信合并自定义信息于StringBuilder当中 */
  38.                                 for (SmsMessage currentMessage : messages) {
  39.                                         sb.append(currentMessage.getDisplayMessageBody());
  40.                                 }
  41.                         }
  42.  
  43.                         Toast.makeText(context, sb.toString(), Toast.LENGTH_LONG).show();
  44.  
  45.                         Intent mainIntent = new Intent(context, MapsActivity.class);
  46.                         mainIntent.putExtra("location", sb.toString());
  47.                         mainIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  48.                         context.startActivity(mainIntent);
  49.  
  50.                 }
  51.         }
  52.  
  53. }
  54.  
Parsed in 0.037 seconds, using GeSHi 1.0.8.4

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2.  
  3. manifest.xml
  4. <?xml version="1.0" encoding="utf-8"?>
  5. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  6.         package="net.learn2develop.GoogleMaps" android:versionCode="1"
  7.         android:versionName="1.0.0">
  8.         <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  9.         <uses-permission android:name="android.permission.INTERNET" />
  10.         <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
  11.         <uses-permission android:name="android.permission.READ_SMS"></uses-permission>
  12.  
  13.         <application android:icon="@drawable/icon" android:label="@string/app_name">
  14.                 <activity android:name=".MapsActivity" android:label="@string/app_name">
  15.                         <intent-filter>
  16.                                 <action android:name="android.intent.action.MAIN" />
  17.                                 <category android:name="android.intent.category.LAUNCHER" />
  18.                         </intent-filter>
  19.                 </activity>
  20.  
  21.                 <receiver android:name="SMSReceiver">
  22.                         <intent-filter>
  23.                                 <action android:name="android.provider.Telephony.SMS_RECEIVED" />
  24.                         </intent-filter>
  25.                 </receiver>
  26.                 <uses-library android:name="com.google.android.maps" />
  27.         </application>
  28. </manifest>
  29.  
  30.  
  31.  
  32. main.xml
  33. <?xml version="1.0" encoding="utf-8"?>
  34. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  35.         android:layout_width="fill_parent" android:layout_height="fill_parent">
  36.  
  37.         <com.google.android.maps.MapView
  38.                 android:id="@+id/mapView" android:layout_width="fill_parent"
  39.                 android:layout_height="fill_parent" android:enabled="true"
  40.                 android:clickable="true" android:apiKey="0XNxIh2B3i4Pkvl_csKw1UrAoEsywGp_5ngeJLg" />
  41.  
  42.         <LinearLayout android:id="@+id/zoom" android:layout_width="wrap_content"
  43.                 android:layout_height="wrap_content" android:layout_alignParentBottom="true"
  44.                 android:layout_centerHorizontal="true" />
  45.  
  46. </RelativeLayout>
  47.  
  48.  
Parsed in 0.042 seconds, using GeSHi 1.0.8.4
Attachments
GoogleMaps.zip
My Application soursecode
(96.85 KiB) Downloaded 128 times
kukudan4
Once Poster
Once Poster
 
Posts: 1
Joined: Sun Mar 06, 2011 3:19 am

Top

Return to Map Tutorials

Who is online

Users browsing this forum: No registered users and 1 guest