2013-07-04 3 views
0

Я пытаюсь добавить Google Maps v2 в проект Mvx, объединив Monodroid MapsAndLocationDemo_v2 с демо-версией N = 26 Fraggle от NPlus1DaysOfMvvmCross.SupportMapFragment issue with MvvmCross

Я добавил Google Play услуги демоверсии Maps, и я успешно отображая карту с помощью:

<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/map" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    class="com.google.android.gms.maps.SupportMapFragment" /> 

С демо Fraggle, тот же фрагмент вызывает ошибку Android.Views.InflateException.

Я следовал за одни и те же шаги, чтобы добавить Google Play услуги обоих проектов, и я использую тот же файл AndroidManifest.xml в обоих проектах

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.demo.app" android:installLocation="auto" android:versionCode="1" android:versionName="1"> 
    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> 
    <application android:label="Demo"></application> 
    <uses-feature android:glEsVersion="0x00020000" android:required="true" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <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" /> 
    <uses-permission android:name="com.demo.app.permission.MAPS_RECEIVE" /> 
    <permission android:name="com.demo.app.permission.MAPS_RECEIVE" android:protectionLevel="signature" /> 
    <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AAAAAAAAAAAAAAAAA-xxxxxxxxxxxxxxxxxxxxxx" /> 
</manifest> 

Другие, чем добавление фрагмента и обновления манифеста, есть никаких изменений в демо-код Fraggle. Рабочий вид из демки Maps является

namespace SimpleMapDemo 
{ 
    using Android.App; 
    using Android.OS; 
    using Android.Support.V4.App; 

    [Activity(Label = "@string/basic_map")] 
    public class BasicDemoActivity : FragmentActivity 
    { 
     protected override void OnCreate(Bundle bundle) 
     { 
      base.OnCreate(bundle); 

      SetContentView(Resource.Layout.BasicDemo); 
     } 
    } 
} 

и вид из версии MVX является:

using Android.App; 
using Android.OS; 
using Cirrious.MvvmCross.Droid.Fragging; 
using Rock.Core.ViewModels; 

namespace Rock.Droid.Views 
{ 
    [Activity(Label = "View for FirstViewModel")] 
    public class FirstView : MvxFragmentActivity 
    { 
     protected override void OnCreate(Bundle bundle) 
     { 
      base.OnCreate(bundle); 
      SetContentView(Resource.Layout.FirstView); 
     } 
    } 
} 

Я также попытался ссылки на сервисы Google Play библиотеки DLL из рабочей демонстрации, и есть такие же результаты.

+1

Вы добавили детали приложения демонстрационного фрагмента к карте api-ключа в консоли api? –

+0

Я сделал это наоборот, изменил детали приложения, чтобы соответствовать ключу api, но это должно иметь тот же эффект. – Neil

ответ

1

Ах. Это ошибка в файле AndroidManifest.xml. Ключ API Карт должен находиться внутри узла приложения. Если его нет, это вызывает исключение.

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.demo.app" android:installLocation="auto" android:versionCode="1" android:versionName="1"> 
    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> 
    <application android:label="Demo"> 
    <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AAAAAAAAAAAAAAAAA-xxxxxxxxxxxxxxxxxxxxxx" /> 
    </application> 
    <uses-feature android:glEsVersion="0x00020000" android:required="true" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <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" /> 
    <uses-permission android:name="com.demo.app.permission.MAPS_RECEIVE" /> 
    <permission android:name="com.demo.app.permission.MAPS_RECEIVE" android:protectionLevel="signature" /> 
</manifest>