Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
shotlandec
0 / 0 / 0
Регистрация: 29.01.2016
Сообщений: 8
#1

Не отображается Google map - Программирование Android

11.08.2016, 16:47. Просмотров 553. Ответов 13
Метки нет (Все метки)

Добрый день. Сразу скажу, перерыл весь форум, но это не помогло. Я начинаю только разбираться в Android Studio, поэтому сильно не пинайте. Мануалы то же читал, то же не помогает. Ситуация такая: если создать проект с нуля при помощи самой студии и выбрать шаблон с гуугло-картами, то при запуске проекта (не зависимо на эмуляторе, либо на рабочем смарте), то карта работает и отображается метка (в австралии). То есть ключ прописан и все работает. А вот проблема возникла, когда я создаю новую активность и тупо весь код копирую из того проекта, который был создан ранее и в котором ни одного символа не было исправлено и он рабочий. Кроме активности, как положено создана разметка в папке layout и прописан код активности в манифесте. Вот, что добавил:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        .........</activity>
 
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="@string/google_maps_key" />
 
        <activity android:name=".MapsActivity"
            android:label="@string/map_title"
            android:parentActivityName=".MainActivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="testing.gps_service.MainActivity" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
То есть после первой активности, дописал вторую. Запускаем приложение (опять же, не зависимо в эмуляторе или на рабочем телефоне) и при нажатии на кнопку в первой активности, попадаем во вторую, но там карта не грузится, хотя значок гуугла висит. Такое ощущение, что ключ не видит. Но ключ я уже и в чистую в манифесте запихивал, а результат тот же. Ключ новый генерировал. Опять результат тот же. Файл build.gradle:
Код
android {
    compileSdkVersion 24
    buildToolsVersion "23.0.3"
    useLibrary 'org.apache.http.legacy'

    defaultConfig {
        applicationId "testing.gps_service"
        minSdkVersion 16
        targetSdkVersion 24
        versionCode 1
        versionName "2.0"
        //multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.1.1'
    compile 'com.google.android.gms:play-services:9.4.0'
}
Он такой же, как и в шаблонном, что был создан самой студией для проекта с работающей картой. Кроме useLibrary 'org.apache.http.legacy' - хотя это не мешает.

Помогите разобраться )))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2016, 16:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не отображается Google map (Программирование Android):

Не отображается Google map! - Программирование Android
Решил заняться разработкой приложений под android. Написав простое приложение по загрузке карт Google в fragment столкнулся с проблемой...

Google map - Программирование Android
Всем привет! Пишу плагин для юнити 3d для отображения карты google map. Одна загвоздка есть, отображается только серая сетка ...

Скриншот google map - Программирование Android
Дайте пожалуйста пример того, как сделать скриншот карты google (api v2) и установления его в imageView. На просторах интернета находил...

Google Map на устройстве - Программирование Android
Здраствуйте Столкнулся с проблемой отображения гугл карт. Про компилировании кода с андроид студии в емулятор генемоушен карта роботает...

google map v2 outOfMemory - Программирование Android
Подскажите пожалуйста, в чём может быть проблема. При перемещении карты google v2 в скором времени наступает outOfMemory. Ссылаясь на этот...

Вьюшки на Google Map v2 - Программирование Android
Привет! Необходимо к гугл мапе прикрутить панель, поиска места по названию, просветите плиз, как правильно добавить компоненты на...

13
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,734
11.08.2016, 19:32 #2
shotlandec, привет!
Я уже давно не работал с GM, но интересно. В манифесте у вас что-то не так. MapsActivity указана как запускная (LAUNCHER), хотя по предыдущим строчкам следует, что она зависит от MainActivity. Тут явно что-то лишнее, надо поудалять.
Теперь давайте так.
Вы можете попробовать создать ещё одну активность, которую тоже, допустим, будете открывать из MainActivity. Назовите её, скажем, ThirdActivity. Скопируйте код из MainActivity, касаемый карт (т.е. лишнее там надо будет почикать). Проверьте, запускается или нет. Если запускается, значит, что-то не так в коде в MapsActivity. Вы из неё ни разметку не привели, ни код. Впрочем, я помочь вряд ли дальше смогу.
0
shotlandec
0 / 0 / 0
Регистрация: 29.01.2016
Сообщений: 8
12.08.2016, 09:30  [ТС] #3
код из MapsActivity не приводил, так как, как сказал ранее, он тупо скопирован из шаблонного MainActivity, который сама студия создала в проекте с картой. Следовательно, в нем, по идее, не может быть ошибок. На счет третьей активности, то сейчас попробую и отпишусь.

Добавлено через 33 минуты
Создал третью активность. Результат тот же. Что имеем:

1. В манифесте добавим активность:
XML
1
2
3
4
5
6
7
        ..........</activity>
 
        <activity
            android:name=".Maps2Activity"
            android:label="@string/map_title">
 
        </activity>
2. В файле этой новой, уже третьей, активности пишем:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package testing.gps_service;
 
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
 
public class Maps2Activity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps2);
    }
 
    public void onClick(View view) {
        Intent intent = new Intent(Maps2Activity.this, MapsActivity.class);
        startActivity(intent);
    }
}
3. Разметка для этой третьей активности в папке layout:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="testing.gps_service.Maps2Activity">
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button5"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:onClick="onClick" />
</RelativeLayout>
Все. Запускаем приложение. Из первой активности, при нажатии на кнопку, попадаем во вновь созданную активность, где на экране только одна кнопка, для запуска активности с картой. Нажимаем кнопку и опять то же: на желтом фоне, карта не отображается, но значок гуугла висит. Так как просили код именно из этой активности с картой, то вот:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package testing.gps_service;
 
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
 
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
 
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
 
    private GoogleMap mMap;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }
 
 
    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
 
        // Add a marker in Sydney and move the camera
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }
}
Как видите, это шаблонный код.

Теперь по поводу ошибок. В логе шибок нет. Строчит много разных строк:
Кликните здесь для просмотра всего текста
08-12 06:22:16.199 14249-14249/testing.gps_service W/System: ClassLoader referenced unknown path: /data/app/testing.gps_service-2/lib/x86
08-12 06:22:17.121 14249-14259/testing.gps_service I/art: Background sticky concurrent mark sweep GC freed 17572(1243KB) AllocSpace objects, 11(384KB) LOS objects, 69% free, 1117KB/3MB, paused 359us total 141.298ms
08-12 06:22:24.737 14249-14249/testing.gps_service W/System: ClassLoader referenced unknown path: /data/app/testing.gps_service-2/lib/x86
08-12 06:22:24.747 14249-14249/testing.gps_service I/FirebaseInitProvider: FirebaseApp initialization unsuccessful
08-12 06:22:24.824 14249-14249/testing.gps_service W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
08-12 06:22:24.913 14249-14410/testing.gps_service D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true

[ 08-12 06:22:24.915 14249:14249 D/ ]
HostConnection::get() New Host Connection established 0xaa183c20, tid 14249


[ 08-12 06:22:25.003 14249:14410 D/ ]
HostConnection::get() New Host Connection established 0xaa1839e0, tid 14410
08-12 06:22:25.006 14249-14410/testing.gps_service I/OpenGLRenderer: Initialized EGL, version 1.4
08-12 06:22:27.131 14249-14410/testing.gps_service E/Surface: getSlotFromBufferLocked: unknown buffer: 0xa0f67070
08-12 06:22:28.961 14249-14249/testing.gps_service W/ViewRootImpl: Cancelling event due to no window focus: MotionEvent { action=ACTION_CANCEL, actionButton=0, id[0]=0, x[0]=966.8518, y[0]=828.39844, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=1369039, downTime=1366713, deviceId=0, source=0x1002 }
08-12 06:22:28.961 14249-14249/testing.gps_service W/ViewRootImpl: Cancelling event due to no window focus: MotionEvent { action=ACTION_CANCEL, actionButton=0, id[0]=0, x[0]=966.8518, y[0]=828.39844, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=1369039, downTime=1366713, deviceId=0, source=0x1002 }
08-12 06:22:28.961 14249-14249/testing.gps_service W/ViewRootImpl: Cancelling event due to no window focus: MotionEvent { action=ACTION_CANCEL, actionButton=0, id[0]=0, x[0]=966.8518, y[0]=828.39844, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=1369039, downTime=1366713, deviceId=0, source=0x1002 }
08-12 06:22:28.961 14249-14249/testing.gps_service W/ViewRootImpl: Cancelling event due to no window focus: MotionEvent { action=ACTION_CANCEL, actionButton=0, id[0]=0, x[0]=966.8518, y[0]=828.39844, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=1369039, downTime=1366713, deviceId=0, source=0x1002 }
08-12 06:22:29.211 14249-14249/testing.gps_service I/zzai: Making Creator dynamically
08-12 06:22:29.221 14249-14249/testing.gps_service W/System: ClassLoader referenced unknown path: /system/priv-app/PrebuiltGmsCore/lib/x86
08-12 06:22:29.251 14249-14249/testing.gps_service D/ChimeraCfgMgr: Reading stored module config
08-12 06:22:29.286 14249-14249/testing.gps_service W/System: ClassLoader referenced unknown path: /data/user/0/com.google.android.gms/app_chimera/m/00000004/n/x86
08-12 06:22:29.286 14249-14249/testing.gps_service D/ChimeraFileApk: Primary ABI of requesting process is x86
08-12 06:22:29.287 14249-14249/testing.gps_service D/ChimeraFileApk: Classloading successful. Optimized code found.
08-12 06:22:29.319 14249-14249/testing.gps_service I/Google*Maps*Android*API: Google Play services client version: 9452000
08-12 06:22:29.321 14249-14249/testing.gps_service I/Google*Maps*Android*API: Google Play services package version: 9452470
08-12 06:22:29.453 14249-14249/testing.gps_service D/FLASH: Couldn't find file: /data/user/0/testing.gps_service/files/DATA_ServerControlledParametersManager.data.testing.gps_service: open failed: ENOENT (No such file or directory)
08-12 06:22:29.792 14249-14249/testing.gps_service I/Choreographer: Skipped 44 frames! The application may be doing too much work on its main thread.
08-12 06:22:29.939 14249-14520/testing.gps_service I/b: Sending API token request.
08-12 06:22:30.306 14249-14249/testing.gps_service I/Choreographer: Skipped 30 frames! The application may be doing too much work on its main thread.

[ 08-12 06:22:30.368 14249:14514 D/ ]
HostConnection::get() New Host Connection established 0xae427870, tid 14514
08-12 06:22:30.483 14249-14410/testing.gps_service E/Surface: getSlotFromBufferLocked: unknown buffer: 0xa0f67bd0
08-12 06:22:30.512 14249-14520/testing.gps_service E/b: Authentication failed on the server.
08-12 06:22:30.512 14249-14520/testing.gps_service E/Google*Maps*Android*API: Authorization failure. Please see https://developers.google.com/maps/documentation/android-api/start for how to correctly set up the map.
08-12 06:22:30.513 14249-14520/testing.gps_service E/Google*Maps*Android*API: In the Google Developer Console (https://console.developers.google.com)
Ensure that the "Google Maps Android API v2" is enabled.
Ensure that the following Android Key exists:
API Key: AIzaSyCBFrj9i8DLuP78p7T8OEpUktmjwLJBbFo
Android Application (<cert_fingerprint>;<package_name>): D1:51:8B:A9:77:6D:0C:51:E2:E6:A1:E5:10:A87:78:B5:10:E0E;testing.gps_service
08-12 06:22:30.708 14249-14255/testing.gps_service W/art: Suspending all threads took: 34.170ms
08-12 06:22:31.763 14249-14518/testing.gps_service W/DynamiteModule: Local module descriptor class for com.google.android.gms.googlecertificates not found.
08-12 06:22:31.765 14249-14518/testing.gps_service I/DynamiteModule: Considering local module com.google.android.gms.googlecertificates:0 and remote module com.google.android.gms.googlecertificates:1
08-12 06:22:31.765 14249-14518/testing.gps_service I/DynamiteModule: Selected remote version of com.google.android.gms.googlecertificates, version >= 1
08-12 06:22:31.769 14249-14518/testing.gps_service D/ChimeraFileApk: Primary ABI of requesting process is x86
08-12 06:22:31.769 14249-14518/testing.gps_service D/ChimeraFileApk: Classloading successful. Optimized code found.
08-12 06:22:31.770 14249-14518/testing.gps_service D/GoogleCertificates: com.google.android.gms.googlecertificates module is loaded
08-12 06:22:31.799 14249-14518/testing.gps_service D/GoogleCertificatesImpl: Fetched 318 Google certificates


Как видите, доходит до строки "testing.gps_service D/GoogleCertificatesImpl: Fetched 318 Google certificates" и далее ни чего не происходит. В шаблонном проекте, который только карту выводит в main активности, точно эти же строки, но после строки "testing.gps_service D/GoogleCertificatesImpl: Fetched 318 Google certificates", продолжаются еще строки....
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,734
12.08.2016, 10:07 #4
shotlandec, пока не совсем понял, что откуда вызывается. Вы привели код активности Maps2Activity, но она не содержит карту и наследуется от AppCompatActivity, а MapsActivity - от FragmentActivity, хотя, по большому счёту, это неважно, да и версии support-библиотек у вас верные.
Я же просил создать третью активность сразу с картой, а не просто с кнопкой.
0
shotlandec
0 / 0 / 0
Регистрация: 29.01.2016
Сообщений: 8
12.08.2016, 10:42  [ТС] #5
CoolMind, видимо не понял вас. сейчас переделаю. А код MapsActivity я вам в предыдущем сообщении показал.

Добавлено через 11 минут
Структура вызова:

1. Main активность. В ней, кроме своего кода, есть две кнопки, для перехода на вторую и третью активности. Третью создал, как вы просили.
2. При нажатии на кнопку, можем попасть во вторую активность. Либо на другую кнопку, что бы попасть на третью активность.

Вставил код вызова карты в третью активность. При нажатии на кнопку из основной Main активности, попадаем в эту активность и карта точно так же не отображается.

Добавлено через 5 минут
В этой третьей активности, код вызова карты:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package testing.gps_service;
 
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
 
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
 
public class Maps2Activity extends FragmentActivity implements OnMapReadyCallback {
 
    private GoogleMap mMap;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }
 
 
    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
 
        // Add a marker in Sydney and move the camera
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }
}
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,734
12.08.2016, 15:39 #6
shotlandec,
XML
1
setContentView(R.layout.activity_maps);
Вы точно к той разметке обращаетесь? Вы её, кстати, так и не привели.
Ну а по теме пока не знаю, что сказать. Если уж встроенный генератор даёт возможность открыть только одну активность, а вторая перестаёт работать, то тут только добро пожаловать на SO или уж переделывайте проект с нуля.
0
Pablito
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,066
Завершенные тесты: 1
12.08.2016, 15:45 #7
предлагаю начать с начала в стиле
1. вот полный код первой активити, а вот ее разметка
2. вот код второй активити, в которрй должна быть карта, но ее нет, а вот и разметка второй активити
3. и вот еще весь манифест
0
shotlandec
0 / 0 / 0
Регистрация: 29.01.2016
Сообщений: 8
12.08.2016, 16:41  [ТС] #8
CoolMind, к разметке той обращаюсь, я подправил это после.

Паблито, сейчас по пунктам все выложу.

Добавлено через 6 минут
1. первая активность:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
package testing.gps_service;
 
import android.Manifest;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ProgressBar;
import android.widget.TextView;
 
import org.apache.http.NameValuePair;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
 
import java.util.ArrayList;
import java.util.List;
 
public class MainActivity extends AppCompatActivity {
 
    private Button btn_start, btn_stop, btn_save;
    private ImageButton btn_map;
    private TextView textView;
    private TextView textView2;
    private String textView3;
    private Editable textValue;
    private String perValue;
    private String infoString;
    private BroadcastReceiver broadcastReceiver;
    private ProgressDialog dialog;
    private ProgressBar progressBar;
 
    @Override
    protected void onResume() {
        super.onResume();
        if(broadcastReceiver == null){
            broadcastReceiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
 
                    perValue = "" + intent.getExtras().get("coordinates");
                    textView2.setText(perValue);
                    textView.append("\n" +intent.getExtras().get("coordinates"));
 
                    btn_stop.setText("Очистить");
                    btn_save.setEnabled(true);
                    progressBar.setVisibility(View.INVISIBLE);
 
                }
            };
        }
        registerReceiver(broadcastReceiver,new IntentFilter("location_update"));
    }
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(broadcastReceiver != null){
            unregisterReceiver(broadcastReceiver);
        }
    }
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        btn_start = (Button) findViewById(R.id.button);
        btn_stop = (Button) findViewById(R.id.button2);
        btn_save = (Button) findViewById(R.id.button3);
        btn_map = (ImageButton) findViewById(R.id.button4);
        textView = (TextView) findViewById(R.id.textView);
        textView2 = (TextView) findViewById(R.id.textView2);
        progressBar = (ProgressBar) findViewById(R.id.progressBar);
 
        if(!runtime_permissions())
            enable_buttons();
 
    }
 
    public void onClickMaps2(View view) {
        Intent intent = new Intent(MainActivity.this, Maps2Activity.class);
        startActivity(intent);
    }
 
    private void enable_buttons() {
 
        btn_start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
 
                progressBar.setVisibility(View.VISIBLE);
                btn_stop.setText("Стоп");
                btn_stop.setEnabled(true);
 
                Intent i =new Intent(getApplicationContext(),GPS_Service.class);
                startService(i);
 
                btn_start.setEnabled(false);
 
            }
        });
 
        btn_stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
 
                progressBar.setVisibility(View.INVISIBLE);
                btn_stop.setText("Очистить");
                textView.setText("Координаты:");
                btn_save.setEnabled(false);
                Intent i = new Intent(getApplicationContext(),GPS_Service.class);
                stopService(i);
                btn_stop.setEnabled(false);
                btn_start.setEnabled(true);
                textView.setTextColor(getResources().getColor(R.color.pr_material_dark));
 
            }
        });
 
        btn_save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
 
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setTitle("Название метки:");
                builder.setIcon(R.mipmap.alert_triangle_yellow_128);
 
                //builder.setMessage("Введите название метки:");
 
                // Set an EditText view to get user input
                final EditText input = new EditText(MainActivity.this);
                builder.setView(input);
                textValue = input.getText();
                //final String textValue = textValue.replace(" ", "-").toString();
 
                builder.setNegativeButton("Сохранить",
                                new OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
 
                                        if (input.getText().length() != 0) {
                                            infoString = "" + textView2.getText();
                                            textView2.setText(infoString.replace(" ", "-"));
                                            //textView2.setText("555");
 
                                            textView3 = textValue.toString().replace(" ", "-");
                                            textView3 = textView3.replace("&", "END");
 
                                            Handler h = new Handler() {
                                                @Override
                                                public void handleMessage(Message msg) {
 
                                                    if (msg.what != 1) { // code if not connected
                                                        textView.setTextColor(getResources().getColor(R.color.holo_red_dark));
                                                        textView.setText("Отсутсвует подключение к интернету!\nПодключитесь и попробуйте еще раз.");
                                                    } else { // code if connected
 
                                                        new RequestTask().execute("http://intronex.ru/android/login.php?login=" + textView3 + "&psw=" + textView2.getText());
                                                        //textView.append("\n\nhttp://intronex.ru/android/login.php?login=" + textValue + "&psw=" + textView2.getText());
                                                        textView.setTextColor(getResources().getColor(R.color.holo_green_dark));
                                                        textView.setText("Метка сохранена.");
                                                    }
                                                }
                                            };
                                            isNetworkAvailable(h, 2000); // get the answser within 2000 ms
                                            dialog.cancel();
                                        } else {
                                            textView.setTextColor(getResources().getColor(R.color.holo_red_dark));
                                            textView.setText("Название метки пустое.\nПопробуйте еще раз.");
                                            dialog.cancel();
                                        }
                                    }
                                })
                        .setPositiveButton("Отмена",
                                new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        textView.setTextColor(getResources().getColor(R.color.primary_material_dark));
                                        btn_save.setEnabled(true);
                                        dialog.cancel();
                                    }
                                });
                AlertDialog alert = builder.create();
                alert.show();
 
                btn_save.setEnabled(false);
 
            }
        });
 
        btn_map.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
 
                Intent intent = new Intent(MainActivity.this, MapsActivity.class);
                startActivity(intent);
 
            }
        });
 
    }
 
    private boolean runtime_permissions() {
        if(Build.VERSION.SDK_INT >= 23 && ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED){
 
            requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION},100);
 
            return true;
        }
        return false;
    }
 
 
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(requestCode == 100){
            if( grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED){
                enable_buttons();
            }else {
                runtime_permissions();
            }
        }
    }
 
    public static void isNetworkAvailable(final Handler handler, final int timeout) {
        // ask fo message '0' (not connected) or '1' (connected) on 'handler'
        // the answer must be send before before within the 'timeout' (in milliseconds)
 
        new Thread() {
            private boolean responded = false;
            @Override
            public void run() {
                // set 'responded' to TRUE if is able to connect with google mobile (responds fast)
                new Thread() {
                    @Override
                    public void run() {
                        HttpGet requestForTest = new HttpGet("http://m.google.com");
                        try {
                            new DefaultHttpClient().execute(requestForTest); // can last...
                            responded = true;
                        }
                        catch (Exception e) {
                        }
                    }
                }.start();
 
                try {
                    int waited = 0;
                    while(!responded && (waited < timeout)) {
                        sleep(100);
                        if(!responded ) {
                            waited += 100;
                        }
                    }
                }
                catch(InterruptedException e) {} // do nothing
                finally {
                    if (!responded) { handler.sendEmptyMessage(0); }
                    else { handler.sendEmptyMessage(1); }
                }
            }
        }.start();
    }
 
    class RequestTask extends AsyncTask<String, String, String> {
 
        @Override
        protected String doInBackground(String... params) {
 
            try {
                //создаем запрос на сервер
                DefaultHttpClient hc = new DefaultHttpClient();
                ResponseHandler<String> res = new BasicResponseHandler();
                HttpGet http = new HttpGet(params[0]);
 
 
                //он у нас будет посылать post запрос
                HttpPost postMethod = new HttpPost(params[0]);
                //будем передавать два параметра
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                //передаем параметры из наших текстбоксов
                //лоигн
                nameValuePairs.add(new BasicNameValuePair("login", "555"));
                //пароль
                nameValuePairs.add(new BasicNameValuePair("pass", "666"));
                //собераем их вместе и посылаем на сервер
                postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                //получаем ответ от сервера
                String response = hc.execute(http, res);
                //посылаем на вторую активность полученные параметры
                //Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                //intent.putExtra(SecondActivity.JsonURL, response.toString());
                //startActivity(intent);
            } catch (Exception e) {
                System.out.println("Exp=" + e);
 
            }
            return null;
        }
 
        @Override
        protected void onPostExecute(String result) {
 
            dialog.dismiss();
            super.onPostExecute(result);
        }
 
        @Override
        protected void onPreExecute() {
 
            dialog = new ProgressDialog(MainActivity.this);
            dialog.setMessage("Загружаюсь...");
            dialog.setIndeterminate(true);
            dialog.setCancelable(true);
            dialog.show();
            super.onPreExecute();
        }
    }
 
}
0
shotlandec
0 / 0 / 0
Регистрация: 29.01.2016
Сообщений: 8
12.08.2016, 16:41  [ТС] #9
ее разметка:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="testing.gps_service.MainActivity">
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Старт"
        android:id="@+id/button"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        style="@style/Base.Widget.AppCompat.Button" />
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Очистить"
        android:id="@+id/button2"
        android:layout_alignTop="@+id/button"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:enabled="false"
        style="@style/Base.Widget.AppCompat.Button"
        android:allowUndo="true" />
 
    <ScrollView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/scrollView"
        android:foregroundGravity="top|right"
        android:layout_above="@+id/button"
        android:layout_alignParentTop="true"
        android:clickable="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignRight="@+id/button2"
        android:layout_alignEnd="@+id/button2">
 
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="Координаты: "
            android:id="@+id/textView"
            android:textColor="@color/primary_material_dark" />
    </ScrollView>
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Сохранить"
        android:id="@+id/button3"
        android:enabled="false"
        android:layout_alignParentBottom="true"
        android:layout_alignTop="@+id/button"
        android:layout_alignParentTop="false"
        android:layout_centerHorizontal="true"
        style="@style/Base.Widget.AppCompat.Button" />
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="bla-bla-bla"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:id="@+id/textView2"
        android:layout_above="@+id/button"
        android:layout_centerHorizontal="true"
        android:visibility="invisible" />
 
    <ProgressBar
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/progressBar"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:visibility="invisible" />
 
    <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@mipmap/logo"
        android:layout_above="@+id/button"
        android:layout_centerHorizontal="true"
        android:id="@+id/frameLayout"></FrameLayout>
 
    <ImageButton
        android:layout_width="@dimen/notification_large_icon_height"
        android:layout_height="@dimen/notification_large_icon_height"
        android:id="@+id/button4"
        android:src="@android:drawable/ic_dialog_map"
        android:layout_alignWithParentIfMissing="false"
        android:layout_alignParentTop="true"
        android:layout_alignRight="@+id/button2"
        android:layout_alignParentEnd="true"
        android:background="@android:color/darker_gray"
        android:layout_alignParentRight="true" />
 
    <ImageButton
        android:layout_width="@dimen/notification_large_icon_height"
        android:layout_height="@dimen/notification_large_icon_height"
        android:id="@+id/imageButton"
        android:src="@android:drawable/ic_dialog_map"
        android:layout_alignWithParentIfMissing="false"
        android:background="@android:color/darker_gray"
        android:layout_above="@+id/progressBar"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:onClick="onClickMaps2" />
 
</RelativeLayout>
2. Вторая активность:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package testing.gps_service;
 
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
 
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
 
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
 
    private GoogleMap mMap;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }
 
 
    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
 
        // Add a marker in Sydney and move the camera
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }
}
ее разметка:
XML
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MapsActivity" />
3. Третья активность. Это то, что просил CoolMind создать.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package testing.gps_service;
 
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
 
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
 
public class Maps2Activity extends FragmentActivity implements OnMapReadyCallback {
 
    private GoogleMap mMap;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps2);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map2);
        mapFragment.getMapAsync(this);
    }
 
 
    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
 
        // Add a marker in Sydney and move the camera
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }
}
ее разметка:
XML
1
2
3
4
5
6
7
8
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/map2"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="testing.gps_service.Maps2Activity" />
4. манифест:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="testing.gps_service">
 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <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:supportsRtl="true"
        android:theme="@style/AppTheme">
 
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="AIzaSyDLiNzEQwPQrLM7kkpGUFkd9qrkDGaGx5I" />
 
        <activity
            android:name=".MainActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 
        <activity
            android:name=".MapsActivity"
            android:label="@string/map_title"
            android:parentActivityName=".MainActivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="testing.gps_service.MainActivity" />
 
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 
        <activity
            android:name=".Maps2Activity"
            android:label="@string/map_title">
 
        </activity>
 
        <service android:name=".GPS_Service" />
 
    </application>
 
</manifest>
0
Pablito
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,066
Завершенные тесты: 1
12.08.2016, 16:57 #10
убрал из MainActivity весь код, кроме onCreate
в нем нахожу одну кнопку и по клику стартует MapsActivity - все работает и карта показывается

Добавлено через 1 минуту
а в гугл-консоли этот проект вообще прописан?
0
shotlandec
0 / 0 / 0
Регистрация: 29.01.2016
Сообщений: 8
12.08.2016, 17:06  [ТС] #11
Паблито, да прописан. я там уже 5 ключей насоздавал.

Добавлено через 1 минуту
Паблито, что может тогда не давать работать из main активити? и если я перехожу на вторую активность, то первая чем может мешать своим кодом?
0
Pablito
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,066
Завершенные тесты: 1
12.08.2016, 17:11 #12
там создан Android API key, в нем 100% верно вписано название пакета и SHA1 ?

тут включено? то есть там должно быть написано DISABLE
Не отображается Google map
0
Pablito
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,066
Завершенные тесты: 1
12.08.2016, 17:23 #13
Цитата Сообщение от shotlandec Посмотреть сообщение
и если я перехожу на вторую активность, то первая чем может мешать своим кодом?
по идее ничем, я просто поскипал код, там где кнопки enabled/disabled, инициализацию сервиса и проверки разрешений

Не по теме:

вот бы мне такие проблемы тут надо Google Tag Manager прикрутить и настроить, но вылазит ошибка, а мануалы от гугла не соответствуют реальности и тех кто их писал надо сжечь

0
shotlandec
0 / 0 / 0
Регистрация: 29.01.2016
Сообщений: 8
12.08.2016, 17:39  [ТС] #14
Паблито, спасибо разобрался. я был частично прав и по не знанию не активировал ключ. SHA1 не генерировал. еще буду читать про это.

зы я пишу на php, а тут директора осенило и получил срочно задание написать небольшое приложение для андроида. то, с чем ранее ни когда не сталкивался. вот теперь и разбираюсь.
0
12.08.2016, 17:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2016, 17:39
Привет! Вот еще темы с ответами:

Google map что за элемент - Программирование Android
Как называется этот элемент? Можно-ли заставить его передвигаться (например задать свойство) по маршруту относительно смены положения...

Рисование маршрута на Google Map - Программирование Android
Есть поле 2 поля Edit Text пользователь вводит туда адрес начальной и конечной точки. Точки на карте я отметить могу а как проложить...

Не работают Google Map в стандартном приложении - Программирование Android
Здравствуйте! Создал в Android Studio обычное приложение с Blank Activity Google Map. Приложение запускается, но на экране просто белый...

Как включить поиск в google map? - Программирование Android
После добавления google map хочу добавить поиск сверху. Чтобы при вводе найти нужный город. В любых сайтах это есть даже на карте...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.