2017-08-02 90 views
0

我在Android Studio中设置了标准的地图活动。然后我需要添加一个'包装器'类,以便我可以实现与MapsActivity的OnMapReadyCallback不同的类。此包装类没有可视组件,不应创建视图,然后调用MapsActivity来创建地图视图。如何在AndroidManifest.xml中指定包装类

所有内容都会编译,但运行时不会显示任何视图。

如果我在创建映射之后将quit looper从dispose移动到MReady,我只在日志中获得以下行。

E/ConnectivityService:RemoteException的发现试图发送一个 回调味精NetworkRequest [ID = 10,legacyType = -1,[ 功能:INTERNET & NOT_RESTRICTED & TRUSTED]

但仍没有视图出现。下面的代码更新到最新。我的Log.d/i消息也没有出现在日志中,尽管它设置为冗长。

代码 - 的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.booxotel.smallgminterface"> 

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:roundIcon="@mipmap/ic_launcher_round" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme" 
     android:name = ".SmallMap"> 

     <meta-data 
      android:name="com.google.android.geo.API_KEY" 
      android:value="@string/google_maps_key" /> 

     <activity 
      android:name="com.booxotel.smallgminterface.MapsActivity" 
      android:label="@string/title_activity_maps"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

SmallMap.java(的一部分)

public class SmallMap extends Application implements FREExtension { 
    public static final String TAG = "MapInterface"; 
    private static GoogleMap gMap; 
    private static LatLng cmap; 
    private static MarksData md; 
    private Handler mHandler; 

    public static FREContext extensionContext; 
    public static Context appContext; 
    public static SettingsContentObserver mSettingsWatcher; 

    public ShowMap shm; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     appContext = getApplicationContext(); 
    } 

    public class ShowMap extends Thread { 
     ShowMap() { 
      prepareThread(false); 
     } 

     public void prepareThread(Boolean quit){ 
      Log.i(TAG, "prepare thread"); 
      if (gMap == null && !quit) { 
       Looper.prepare(); 
       mHandler = new Handler(); 
       Intent intent = new Intent(SmallMap.appContext, MapsActivity.class); 
       appContext.startActivity(intent); 
      }else if(quit) { 
       Looper.myLooper().quit(); 
      } 
      Looper.loop(); 
     } 
    } 

    public class MReady implements MapReadyEvent { 
     @Override 
     public void MapReady() { 
      gMap = MapsActivity.getMap(); 
      shm.prepareThread(true); 
      Log.i(TAG, "map ready"); 
      extensionContext.dispatchStatusEventAsync("mapReady", "true"); 
     } 
    } 

    @Override 
    public FREContext createContext(String contextType) { 
     shm = new ShowMap(); 
     shm.prepareThread(false); 
     return new MapInterfaceContext(); 
    } 

    @Override 
    public void dispose() { 
     Log.d(TAG, "Extension disposed."); 
     Context context = appContext.getApplicationContext(); 
     context.getContentResolver().unregisterContentObserver(mSettingsWatcher); 
     appContext = null; 
     extensionContext = null; 
     mSettingsWatcher = null; 
    } 

    @Override 
    public void initialize() { 
     Log.d(TAG, "Extension initialized."); 
    } 
} 

MapsActivity.java

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 

    public static GoogleMap mMap; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_maps); 
     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 
     MapReadyEvent mre = new MapReadyEvent() { 
      @Override 
      public void MapReady() {} 
     }; 
     mre.MapReady(); 
    } 

    public static GoogleMap getMap() { 
     return mMap; 
    } 
} 

MapReadyEvent.java

public interface MapReadyEvent { 
    void MapReady(); 
} 

activity_maps.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <fragment xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/map" 
     android:name="com.google.android.gms.maps.SupportMapFragment" 
     android:layout_width="311dp" 
     android:layout_height="290dp" 
     android:layout_marginLeft="710dp" 
     android:layout_marginTop="167dp" 
     tools:context="com.mysite.testmap.MapsActivity" /> 
</RelativeLayout> 
+0

你能发表一些代码吗? –

+0

我自己发现了一些错误,现在map仍然没有出现,但测试完成,logcat只包含一行:未能连接到服务器:java.net.UnknownHostException:无法解析主机“play.googleapis.com”:没有地址关联与主机名 – doug777

+0

我不知道哪些部分的代码我应该发布帮助。包装或一些XML文件? – doug777

回答

0

startActivity不叫主线程。 用此代替:

mHandler = new Handler(Looper.getMainLooper()); 
handler.post(new Runnable() { 
    @Override 
    public void run() { 
     Intent intent = new Intent(SmallMap.appContext, MapsActivity.class); 
     appContext.startActivity(intent); 
    } 
});