0

我的 android 应用程序使用 MapView,但在使用 MapView 开始活动后,我连续遇到三个错误:

找不到提供商信息 com.google.settings

然后

无法获取连接工厂客户端

我已经设置了所有权限和 Api 密钥。但显示网格图。

我在过去两周内解决了这个问题,但我没有解决..

有人知道如何解决这个问题??

这是我的代码

public class AndroidGPSApplicationActivity extends MapActivity {

    private MapView map=null;
    private MyLocationOverlay me=null;
    private ToggleButton toggle_button;
    private TextView latitude=null;
    public double value;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        map=(MapView)findViewById(R.id.mapview);
        map.getController().setCenter(getPoint(34.0043,71.5448));
        map.getController().setZoom(13);
        map.setBuiltInZoomControls(true);
        map.setTraffic(true);

        Drawable marker=getResources().getDrawable(R.drawable.marker);

        marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());

        map.getOverlays().add(new SitesOverlay(marker));

        me=new MyLocationOverlay(this, map);
        map.getOverlays().add(me);

        MapOverlay mapOverlay = new MapOverlay();
        List<Overlay> listOfOverlays = map.getOverlays();
        listOfOverlays.add(mapOverlay);

        tabView();

        latitude = (TextView)findViewById(R.id.latitude_value);
        //latitude.setText(null);

        toggle_button = (ToggleButton)findViewById(R.id.togglebutton);
        toggle_button.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(toggle_button.isChecked())
              {
                enableGps();
                Toast.makeText(getApplicationContext(), "The state of GPS is changed to on", Toast.LENGTH_LONG).show();
              }
            else
              {
                disableGps();
                Toast.makeText(getApplicationContext(), "The state of GPS is changed to off", Toast.LENGTH_LONG).show();
              }

            }
        });

    }       // end of onCreate(); function

    @Override
    public void onResume() {
        super.onResume();
        me.enableCompass();
    }       

    @Override
    public void onPause() {
        super.onPause();
        me.disableCompass();
    }   
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_S) {
            map.setSatellite(!map.isSatellite());
            return(true);
        }
        else if (keyCode == KeyEvent.KEYCODE_Z) {
            map.displayZoomControls(true);
            return(true);
        }

        return(super.onKeyDown(keyCode, event));
    }
    private void tabView() {                                //setting two tabs ..for Map and Update

        TabHost tabs = (TabHost)findViewById(R.id.TabHost01);
        tabs.setup();
        TabHost.TabSpec spec1 = tabs.newTabSpec("tag1");
        spec1.setContent(R.id.setting);
        spec1.setIndicator("Setting");

        tabs.addTab(spec1);

        //TabHost tabs = (TabHost)findViewById(R.id.TabHost01);
        //tabs.setup();
        TabHost.TabSpec spec2 = tabs.newTabSpec("tag2");
        spec2.setContent(R.id.layout1);
        spec2.setIndicator("Map");

        tabs.addTab(spec2);

        TabHost.TabSpec spec3 = tabs.newTabSpec("tag3");
        spec3.setContent(R.id.layout2);   
        spec3.setIndicator("Stastistics");

        tabs.addTab(spec3);

    }

    protected void disableGps() {   
        Intent intent=new Intent("android.location.GPS_ENABLED_CHANGE"); 
        intent.putExtra("enabled", false); 
        sendBroadcast(intent); 
    }

    protected void enableGps() 
    {
        Intent intent=new Intent("android.location.GPS_ENABLED_CHANGE"); 
        intent.putExtra("enabled", true); 
        sendBroadcast(intent); 
    }

    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }

    private GeoPoint getPoint(double lat, double lon) {
        return(new GeoPoint((int)(lat*1000000.0), (int)(lon*1000000.0)));
    }
    /*
     * This is an inner class .
     * for puting an image on specified location..
     */
    private class SitesOverlay extends ItemizedOverlay<OverlayItem> {
        private List<OverlayItem> items=new ArrayList<OverlayItem>();
        private Drawable marker=null;

        public SitesOverlay(Drawable marker) {
            super(marker);
            this.marker=marker;

            items.add(new OverlayItem(getPoint(34.0043, 71.5448),"PK", "PTCL Office Cantt"));
            items.add(new OverlayItem(getPoint(34.004124555, 71.4859698), "Lincoln Center", "Department of Computer Science"));
            items.add(new OverlayItem(getPoint(34.03484758, 71.54653569), "Carnegie Hall", "Where you go with practice, practice, practice"));
            items.add(new OverlayItem(getPoint(34.07492254, 71.5464754), "The Downtown Club", "Original home of the Heisman Trophy"));

            populate();
        }

        @Override
        protected OverlayItem createItem(int i) {
            return(items.get(i));
        }

        @Override
        public void draw(Canvas canvas, MapView mapView, boolean shadow) {
            super.draw(canvas, mapView, shadow);    
            boundCenterBottom(marker);
        }

        @Override
        protected boolean onTap(int i) {
            Toast.makeText(AndroidGPSApplicationActivity.this, items.get(i).getSnippet(),
                            Toast.LENGTH_SHORT).show(); 
            return(true);
        }

        @Override
        public int size() {
            return(items.size());
        }
    }

     private class MapOverlay extends Overlay
        {
            @Override
            public boolean onTouchEvent(MotionEvent event, MapView mapView)
            {

                //---when user lifts his finger---
                if (event.getAction() == 1) {
                    GeoPoint p = mapView.getProjection().fromPixels(
                        (int) event.getX(),
                        (int) event.getY());
                        Toast.makeText(getBaseContext(),
                            "Location: "+
                            p.getLatitudeE6() / 1E6 + "," +
                            p.getLongitudeE6() /1E6 ,
                            Toast.LENGTH_SHORT).show();
                        value= p.getLatitudeE6() / 1E6 ;                     
                        String str_value = Double.toString(value);
                        latitude.setText(str_value);
                }
                return false;
            }
        }
}

xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>

    <TabHost
      android:id="@+id/TabHost01" 
      android:layout_width="wrap_content"
      android:layout_height="wrap_content">
    <TabWidget 
      android:id="@android:id/tabs"
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" />
    <FrameLayout 
      android:id="@android:id/tabcontent"
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:paddingTop="90dp"     
        >
        <TextView 
          android:id="@+id/setting" 
          android:text="@string/setting_tab" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" />

        <RelativeLayout
            android:id="@+id/layout1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            >
    <com.google.android.maps.MapView
                android:id="@+id/mapview"
                 android:layout_width="fill_parent"
                 android:layout_height="wrap_content"
                 android:apiKey="Api Key"
                 android:clickable="true"
                 />
   <ToggleButton 
                android:id="@+id/togglebutton"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:textOn="ON"
                android:textOff="OFF"
                android:layout_alignParentBottom="true"/>


    </RelativeLayout>

      <LinearLayout
            android:id="@+id/layout2"
            android:orientation="vertical"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            >
      <TextView 
          android:id="@+id/latitude_lbl" 
          android:text="@string/latitude" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" /> 

      <TextView 
          android:id="@+id/latitude_value" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" />

      <TextView 
          android:id="@+id/longitude_lbl" 
          android:text="@string/longitude" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" /> 

          </LinearLayout>   

    </FrameLayout>
  </TabHost>
</LinearLayout>

清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="android.gps.welcome"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="4" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
         <uses-library android:name="com.google.android.maps"/>
        <activity
            android:name=".AndroidGPSApplicationActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
     <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
</manifest>
4

1 回答 1

0

Check wheather you have set following line in the manifest

 <uses-library android:name="com.google.android.maps" />
于 2013-01-21T07:20:40.590 回答