Я пытаюсь показать свое текущее местоположение на картах Google, но на фрагменте карты отображается черный экран.
мой файл манифеста
<?xml version = "1.1" encoding = "utf-8"?>
<manifest xmlns:android = "http://schemas.android.com/apk/res/android"
package = "com.edraky.tasksheet"
android:versionCode = "13"
android:versionName = "6.7" >
<uses-sdk
android:minSdkVersion = "11"
android:targetSdkVersion = "26" />
<uses-feature
android:glEsVersion = "0x00020000"
android:required = "true" />
<uses-permission android:name = "android.permission.INTERNET" />
<uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name = "android.permission.READ_PHONE_STATE" />
<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-permission android:name = "android.permission.INTERNET" />
<uses-permission android:name = "com.edraky.tasksheet.MAPS_RECEIVE" />
<permission
android:name = "com.edraky.tasksheet.permission.MAPS_RECEIVE"
android:protectionLevel = "signature" />
<uses-permission android:name = "com.edraky.tasksheet.permission.MAPS_RECEIVE" />
<application
android:allowBackup = "true"
android:icon = "@drawable/transparentlogo"
android:label = "@string/app_name"
android:theme = "@style/AppTheme" >
<activity
android:name = ".SplashScreenActivity"
android:label = "@string/app_name" >
</activity>
<activity
android:name = ".LoginActivity"
android:label = "@string/title_activity_login" >
</activity>
<activity
android:name = ".ContactUs_Activity"
android:label = "@string/title_activity_contact_us" >
</activity>
<activity
android:name = ".AboutUs_Activity"
android:label = "@string/title_activity_about_us_"
android:noHistory = "false" >
</activity>
<activity
android:name = ".WelcomePage"
android:label = "@string/title_activity_welcome_page" >
<intent-filter>
<action android:name = "android.intent.action.MAIN" />
<category android:name = "android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name = "com.google.android.maps.v2.API_KEY"
android:value = "AIzaSyDpP-HMGNQCnFPnzODgTiJFXs00yirfhHE" />
<meta-data
android:name = "com.google.android.gms.version"
android:value = "@integer/google_play_services_version" />
</application>
</manifest>
Макет ContactUs (макет с отображением карты)
Свяжитесь с нами макет
<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 = "com.edraky.tasksheet.ContactUsActivity">
<TextView
android:id = "@+id/textView1"
android:layout_width = "wrap_content"
android:layout_marginTop = "40dp"
android:layout_height = "260dp"
android:layout_alignParentLeft = "true"
android:layout_alignParentRight = "true"
android:textStyle = "bold|italic"
android:textSize = "11dp"
android:textIsSelectable = "true" />
<fragment
android:id = "@+id/map"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:layout_alignLeft = "@+id/textView1"
android:layout_alignParentBottom = "true"
android:layout_below = "@+id/textView1"
android:layout_marginTop = "24dp"
class = "com.google.android.gms.maps.SupportMapFragment"
android:scrollbars = "vertical" />
<Button
android:id = "@+id/homebutton"
android:layout_width = "100dp"
android:layout_height = "40dp"
android:layout_alignParentLeft = "true"
android:layout_alignParentTop = "true"
android:background = "@drawable/contactusicon" />
</RelativeLayout>
свяжитесь с нами класс деятельности
public class ContactUs_Activity extends FragmentActivity {
GoogleMap mMap;
GPSTracker gps;
Double currLat;
Double currLong;
GMapV2Direction gmap;
Button homebutton;
TextView view1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contact_us);
homebutton = (Button) findViewById(R.id.homebutton);
view1 = (TextView) findViewById(R.id.textView1);
view1.setText("Text Shown");
homebutton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
mMap = mapFragment.getMap();
gps = new GPSTracker(this);
currLat = gps.getLatitude();
currLong = gps.getLongitude();
LatLng sydney = new LatLng(currLat, currLong);
mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}
}
я включил все библиотеки и сгенерировал ключ API
вывод показан ниже
сообщение об ошибке не регистрируется. что могло пойти не так при отображении карты?
Примечание: тот же код работает в другом приложении с другим ключом API, конечно, и карта отображается правильно.
ВАЖНАЯ ЗАМЕТКА: приложение уже было опубликовано в магазине Google Play до добавления Maps SDK API, поэтому есть ли какие-либо изменения, которые я должен сделать с учетом этого или его несоответствия?
Перейдите на console.google.com И сгенерируйте новый ключ API с таким же именем пакета (com.package.app), что и в вашем мобильном приложении, и с SHA1.
Получите новый ключ API, замените его в коде. Удалите приложение и перезапустите.
Хорошо, поэтому я не использую FragmentActivity, и это не может напрямую сказать решение.
Но этот код определенно работает и показывает карту с использованием android.support.v4.app.Fragment.
import android.support.v4.app.Fragment;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.MapsInitializer;
import com.google.android.gms.maps.OnMapReadyCallback;
public class OrderMapFrag extends Fragment implements OnMapReadyCallback{
private GoogleMap mGoogleMap;
private MapView mMapView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_order_map, container, false);
........
........
mMapView.onCreate(savedInstanceState);
mMapView.onResume();
try {
MapsInitializer.initialize(getActivity().getApplicationContext());
} catch (Exception e) {
e.printStackTrace();
}
mMapView.getMapAsync(this);
return view;
}
@Override
public void onMapReady(GoogleMap googleMap) {
mGoogleMap = googleMap;
//setting initial elements in map if required after this , as map got initialized properly
}
}
Но я не использую те же элементы и разрешения, которые вы используете в Manifest. Для меня это бывшие в употреблении.
<uses-permission android:name = "android.permission.INTERNET" />
<uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name = "android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name = "android.permission.ACCESS_FINE_LOCATION" />
<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 = "MY API KEY"/>
Спасибо, я пробовал это, но это не сработало, кстати, приложение уже было опубликовано в магазине Google Play до добавления Maps SDK API, так что есть ли какие-либо изменения, которые я должен сделать, учитывая это или его несоответствие?