java - 启动后关闭放置选择器

标签 java android android-studio google-places-api

我正在 Android Studio 上使用 Googleplaces API 来根据位置显示感兴趣的地点。我正在使用 PlacePicker Inentbuilder 来完成此任务。

当应用程序运行时,地点选择器启动,然后立即关闭(大约 1-2 秒)。

  • 我已经为 Android 应用程序生成了公共(public) API key ,并将其包含在应用 list 的元数据标记中。
  • 我已在开发者控制台上启用了“Google Places API for android”API。
  • 我已将最新的 Play 服务版本包含在 build.gradle 的依赖项中。

我已经在下面包含了我的代码和 Logcat。如果我需要添加任何其他内容,请告诉我。

Manifest.xml:

<?xml version="1.0" encoding="utf-8"?>

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

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

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

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

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

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

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".CoresActivity"
        android:label="@string/title_activity_cores" >
    </activity>
    <activity
        android:name=".MicrofoneActivity"
        android:label="@string/title_activity_microfone" >
    </activity>
    <activity
        android:name=".ConfirmaCoresActivity"
        android:label="@string/title_activity_confirma_cores" >
    </activity>
    <activity
        android:name=".BolaLocaActivity"
        android:label="@string/title_activity_bola_loca" >
    </activity>
    <activity
        android:name=".MapsActivity"
        android:label="@string/title_activity_maps" >
    </activity>
    <activity
        android:name=".PlacesAPIActivity"
        android:label="@string/title_activity_place_api" >
    </activity>
</application>

PlacesAPIActivity - 使用 Google Places API 的 Activity :

package com.fastcoding.appbebado;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
import com.google.android.gms.common.GooglePlayServicesRepairableException;
import com.google.android.gms.location.places.Place;
import com.google.android.gms.location.places.ui.PlacePicker;


public class PlacesAPIActivity extends AppCompatActivity {
    TextView getLocation;
    int PLACE_PICKER_REQUEST = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_places_api);
        getLocation = (TextView)findViewById(R.id.getLocTV);
        getLocation.setClickable(true);
        getLocation.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
                Intent intent;
                try {
                    intent = builder.build(getApplicationContext());
                    startActivityForResult(intent, PLACE_PICKER_REQUEST);
                    Toast.makeText(PlacesAPIActivity.this,"start activity for result",Toast.LENGTH_LONG).show();
                } catch (GooglePlayServicesRepairableException e) {
                    e.printStackTrace();
                } catch (GooglePlayServicesNotAvailableException e) {
                    e.printStackTrace();
                }

            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_place_api, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        System.out.println("onActivityResult");
        if (requestCode == PLACE_PICKER_REQUEST) {
            if (resultCode == RESULT_OK) {
                Place place = PlacePicker.getPlace(data, this);
                String toastMsg = String.format("Place: %s", place.getName());
                Toast.makeText(this, toastMsg, Toast.LENGTH_LONG).show();
            }
        }
    }
}

Build.gradle(应用程序模块 - 这是唯一的模块)

    apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion '22.0.1'

    defaultConfig {
        applicationId "com.fastcoding.appbebado"
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:22.2.1'
    compile 'com.google.android.gms:play-services:7.5.0'
}

最佳答案

请粘贴您的 logcat 和 manisfest 文件。

元数据标签可能应为 android:name="com.google.android.geo.API_KEY" 它应该在 <application> 范围内 list 中的标记。

关于java - 启动后关闭放置选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32912548/

相关文章:

Java 数组 NullPointerException

android - 双击Android上的物理按钮

android - 所有受支持的 Android View 的列表?

Java,使用套接字连接发送消息时出现问题

java - 使用 BeanUtils 自定义将 XMLGregorianCalendar 转换为日期

java - testng 如何设置 configfailurepolicy=true

android - 请求新权限时不断收到 UnsupportedOperationException

java - Gradle 错误 'Unable to resolve dependency' 找不到 'com.applovin:applovin-sdk'

java - 错误 : Activity class {com. example.thejourney/com.example.thejourney.WelcomeActivity} 不存在

android-studio - 跨多个 Android 开发环境共享同一目标设备