Android:如何在不使用地图活动的情况下实施com.google.android.gms.maps.MapView

时间:2017-06-01 04:48:28

标签: java android google-maps android-mapview

我尝试在线性布局中实现MapView,此布局不属于MapActivity。此外,我没有使用fragment来实现该过程。

此外,我从Google Developer Console获得了一个api密钥,并启用了一些与地点和地图相关的api。

这是我在android studio中的android清单,

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

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

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/logo"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <uses-library android:name="com.google.android.maps" />

        <activity android:name=".SplashScreenActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".LoginActivity"></activity>
        <activity
            android:name=".RosterActivity"
            android:configChanges="locale"
            android:label=""
            android:theme="@style/AppTheme.Light" />

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />        

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="@string/api_key" />        

    </application>

</manifest>

这是我的布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/content_roster_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginBottom="5dp"
    android:layout_marginTop="3dp"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".RosterActivity"
    tools:showIn="@layout/app_bar_roster">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:orientation="vertical">

            <com.google.android.gms.maps.MapView
                android:id="@+id/roster_map_view"
                android:layout_width="match_parent"
                android:layout_height="300dp"
                android:apiKey="xxx--yyy-zzz-aaa-www"
                android:layout_weight="1"/>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/roster_map_view"
                android:layout_marginTop="4dp"
                android:layout_marginBottom="15dp"
                android:alpha="0.5"
                android:background="#765491"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/roster_ac_date_text"
                    android:layout_width="match_parent"
                    android:layout_height="36dp"
                    android:layout_gravity="center"
                    android:background="#563e6b"
                    android:paddingTop="5dp"
                    android:paddingBottom="5dp"
                    android:text="5 th MAY 2017"
                    android:textStyle="bold"
                    android:textAlignment="center"
                    android:textColor="@android:color/white"
                    android:textSize="22sp" />

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:orientation="horizontal">

                    <TextView
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:text="START TIME"
                        android:textStyle="bold"
                        android:textAlignment="center"
                        android:textColor="@android:color/white"
                        android:textSize="14sp" />

                    <TextView
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:text="END TIME"
                        android:textStyle="bold"
                        android:textAlignment="center"
                        android:textColor="@android:color/white"
                        android:textSize="14sp" />

                </LinearLayout>


                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <TextView
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:id="@+id/roster_st_time_text"
                        android:text="08.30 AM"
                        android:textStyle="bold"
                        android:textAlignment="center"
                        android:textColor="@android:color/white"
                        android:textSize="20sp" />

                    <TextView
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:id="@+id/roster_ed_time_text"
                        android:text="05.30 PM"
                        android:textStyle="bold"
                        android:textAlignment="center"
                        android:textColor="@android:color/white"
                        android:textSize="20sp" />

                </LinearLayout>


                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:id="@+id/roster_location_text"
                    android:layout_marginRight="35dp"
                    android:layout_marginLeft="35dp"
                    android:layout_marginTop="8dp"
                    android:drawablePadding="5dp"
                    android:drawableLeft="@drawable/ic_place_small"
                    android:textAlignment="center"
                    android:maxLines="3"
                    android:lines="3"
                    android:clickable="true"
                    android:textSize="14sp"
                    android:text="Australian Strategic Partnership\n#9, School Lane, Kollpity, Colombo 3"
                    android:textColor="@android:color/white" />

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="18dp"
                    android:orientation="horizontal">

                    <android.support.v7.widget.AppCompatButton
                        android:id="@+id/roster_accept_btn"
                        style="@style/ButtonStyle"
                        android:layout_height="32dp"
                        android:background="@color/loginColor"
                        android:layout_marginBottom="10dp"
                        android:layout_marginLeft="10dp"
                        android:layout_marginRight="40dp"
                        android:textSize="16sp"
                        android:textStyle="bold"
                        android:layout_weight="1"
                        android:clickable="true"
                        android:text="ACCEPT" />

                    <android.support.v7.widget.AppCompatButton
                        android:id="@+id/roster_reject_btn"
                        style="@style/ButtonStyle"
                        android:layout_height="32dp"
                        android:background="@color/acceptedPurpleColour"
                        android:layout_marginBottom="10dp"
                        android:layout_marginLeft="40dp"
                        android:layout_marginRight="10dp"
                        android:textSize="16sp"
                        android:textStyle="bold"
                        android:clickable="true"
                        android:layout_weight="1"
                        android:text="REJECT" />

                </LinearLayout>

            </LinearLayout>

        </LinearLayout>

    </ScrollView>

</RelativeLayout>

buid.gradle(模块:应用)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion '25.0.0'

    defaultConfig {
        applicationId "sec.asdf_solutions.biz.security"
        minSdkVersion 18
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:design:23.4.0'
    compile 'com.prolificinteractive:material-calendarview:1.4.3'
    compile 'com.google.android.gms:play-services-maps:10.2.1'
    compile 'de.hdodenhof:circleimageview:2.1.0'
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:converter-gson:2.3.0'
    compile 'joda-time:joda-time:2.9.4'
    compile 'com.auth0.android:jwtdecode:1.1.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.google.android.gms:play-services-location:10.2.1'
    compile 'com.android.support:support-annotations:24.2.0'
    compile 'com.google.firebase:firebase-messaging:10.2.0'
    compile 'com.google.maps:google-maps-services:0.1.20'
    testCompile 'junit:junit:4.12'
}

apply plugin: 'com.google.gms.google-services'

这是我执行上述过程的活动,

public class RosterActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

    //protected MapView mMapView;

    android.support.v7.widget.AppCompatButton acceptButton;
    android.support.v7.widget.AppCompatButton rejectButton;
    private Context context;

    private String token;
    private long idLong;
    private Response responseBody;

    TextView rosterDateTextView;
    TextView rosterStartTimeTextView;
    TextView rosterEndTimeTextView;
    TextView rosterLocationTextView;

    View mainView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_roster);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_roster);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowHomeEnabled(true);

    }

    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        return true;
    }

}

特别提示:我没有使用MapActivity。

有任何想法吗?

2 个答案:

答案 0 :(得分:6)

MapView's documentation

  

此类的用户必须将包含此视图的Activity或Fragment中的所有生命周期方法转发到此类中的相应方法。特别是,您必须转发以下方法:

     
      
  • 的onCreate(束)
  •   
  • 在onStart()
  •   
  • 的onResume()
  •   
  • 的onPause()
  •   
  • 的onStop()
  •   
  • 的onDestroy()
  •   
  • 的onSaveInstanceState()
  •   
  • onLowMemory()
  •   

所有element = WebDriverWait(driver, 60).until( EC.visibility_of_element_located((By.CSS_SELECTOR, "div>._wzh")) ) element.click() S S → AS → AS A → LB → LBS L → ( → (BS B → SR → (SRS S → ε → (RS R → ) → ()S S → AS → ()AS A → LB → ()LBS L → ( → ()(BS B → SR → ()(SRS S → ε → ()(RS R → ) → ()()S S → ε → ()() 所做的就是将所有这些回调转发给MapFragment,因此如果您自己完成这项工作,则无需拥有特定的超类。

例如:

SupportMapFragment

Etc等 - 覆盖每种方法并将调用传递到MapView

答案 1 :(得分:2)

您可以尝试这种方式。也不应该发布/显示您的API密钥。试着隐藏。

      <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

                <fragment
                android:id="@+id/map"
                android:name="com.google.android.gms.maps.MapFragment"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
     </Linear Layout>


    //finding xml view from xml layout
           GoogleMap googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();