2017-10-11 53 views
1

我想谷歌地圖整合到Xamarin的Android。但是,收到錯誤,如標題中所寫。此錯誤出現在我的SetContentView(Resource.Layout.Main);如下圖所示,其中:未處理的異常:Android.Views.InflateException:二進制XML文件行#1:二進制XML文件行#1:錯誤充氣類片段發生

Error occurred in MainActivity.cs

我的谷歌播放服務的地圖是了最新。我已經嘗試清理和重建項目,也重新啓動VS沒有爲我工作。非論壇回答我的問題。

這些是寫在我的項目爲:

MainActivity.cs

using System; 

using Android.App; 
using Android.Content; 
using Android.Runtime; 
using Android.Views; 
using Android.Widget; 
using Android.OS; 
using Android.Gms.Maps; 

namespace Google_maps.Droid 
{ 
    [Activity (Label = "@string/Google_maps.Android", MainLauncher = true, Icon = "@drawable/icon")] 
    public class MainActivity : Activity, IOnMapReadyCallback 
    { 
     private GoogleMap mMap; 

     protected override void OnCreate (Bundle bundle) 
     { 
      base.OnCreate (bundle); 

      // Set our view from the "main" layout resource 
      SetContentView (Resource.Layout.Main); 
      SetUpMap(); 

     } 

     private void SetUpMap() 
     { 
      if (mMap == null) 
      { 
       FragmentManager.FindFragmentById<MapFragment>(Resource.Id.map).GetMapAsync(this); 
      } 
     } 

     public void OnMapReady(GoogleMap googleMap) 
     { 
      mMap = googleMap; 
     } 

    } 
} 

Main.axml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

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



</LinearLayout> 

的strings.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="hello">Hello World, Click Me!</string> 
    <string name="app_name">Google_maps.Android</string> 
    <string name="google_maps_key">my_API_key</string> 
    <string name="Google_maps.Android">Google maps</string> 
</resources> 

最後,

AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="Google_maps.google_mapsAndroid" android:installLocation="preferExternal"> 
    <uses-sdk android:minSdkVersion="15" /> 
    <application android:label="Google_maps.Android" android:icon="@drawable/Icon"> 
    <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/google_maps_key" /> 
    </application> 
    <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" /> 
</manifest> 

有關其他信息,我也跟着從YouTube用戶,喬巖,在那裏,他教我們的方法如何設置谷歌地圖。這裏是鏈接到他的視頻:

https://www.youtube.com/watch?v=W6Q0olRPsus

如果你往下看註釋部分,你可以看到很多人有同樣的問題太多。此視頻2年前寫了,所以我會明白爲什麼它不會在這一現狀的工作。不過,如果你們可以啓發我將Google地圖集成到我的Android移動應用程序的正確方法,我將不勝感激,如果以某種方式,這種方法不再可靠。先謝謝你。

問候, Xamarin和編程新手。

編輯:

當我拖我的鼠標SetContentView (Resource.layout.Main)它說無效Activity.SetContentView(INT LayoutResID)(+2重載) 設置一個佈局資源的活動內容。

我應該對這個問題?

+0

通常,碎片不能嵌入到擴展活動的類中,而應該擴展FragmentActivity – Dinash

+0

然後我可以知道我該怎麼做? –

+0

@Dinash完成,我已經使用Android.Support.V4.App'和另一個方法'Android.Support「導入了'public class MainActivity:Activity'到'public class MainActivity:FragmentActivity'並添加了相應的導入語句 – Dinash

回答

1

所以我的項目無法打開,在我不得不重新創建我的項目的情況下,從頭開始。我對模擬器進行了更改,我認爲這可能一直是問題所在,並設法使其正常工作並刪除標題上的錯誤。

雖然目前和唯一的問題是,它只在左下角顯示「谷歌」徽標,但沒有地圖。我應該寫在另一個線程?既然現在是一個不同的案例。

但到目前爲止,錯誤已被刪除,我相信這些設備和Android版本在這方面扮演着重要角色。

編輯:

您好再次,我已經成功地獲得谷歌地圖完全工作在我的應用程序。正如我之前所說的,「設備和Android版本在開發應用程序中起着重要作用」。僅供參考,我使用的是Android 7.1版(Nougat),Nexus 5設備,Google API x86 - API 25。

  1. 集編譯器8.0(奧利奧)在性能>>應用和目標,以「使用編譯使用SDK版本」,在屬性>> Android清單。

  2. 更新您的Google地圖包由Xamarin公司從的NuGet包管理器,在工具最新的穩定版本發現。我目前最新的穩定版本是42.1021.1。

  3. 更新您的Xamarin.Android.Support.Compat通過Xamarin公司從NuGet包管理器,在工具發現的最新的穩定版本。我目前最新的穩定版本是26.0.2。如果片段庫沒有與此一起更新,只需手動更新。

  4. 我說可能缺少權限,如下圖所示:

<permission android:name="googleMapsProject.googleMapsProject.droid.permission.MAPS_RECEIVE" android:protectionLevel="signature" /> 
 
\t <uses-permission android:name="com.deg.blubcnmobl.droid.permission.MAPS_RECEIVE" />

FYI的googleMapsProject.googleMapsProject是你的包名。確保它不是以大寫字母開頭,並且與您在Google控制檯的「關鍵限制」頁面中輸入的包名稱相匹配。

  1. 所有這些都在google地圖API的第2版上運行。

這幾乎是我得到它的工作。希望這可以幫助!

0

嘗試:

變化:

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

要:

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

此外,在您的SetUpMap()方法變更如下:

FragmentManager.FindFragmentById<MapFragment>(Resource.Id.map).GetMapAsync(this); 

爲:

SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
從的NuGet

2.使用AppCompatActivity而不是活動

0

1.安裝Appcompact DLL

3.添加在您的AndroidManifest以下權限下的性能

<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="android.permission.INSTALL_LOCATION_PROVIDER"/> 
<uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES"/> 
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/> 

4.增加下面的xml在你的main.axml中

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

5.Add在styles.xml下面的代碼下的資源/價值/風格:

<style name="MyTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar"> 
<item name="windowNoTitle">true</item> 
<item name="windowActionBar">false</item> 
<item name="colorPrimary">#FFCC01</item> 
<item name="colorPrimaryDark">#E69D02</item> 
<item name="colorControlHighlight">#FFCC01</item> 
<item name="colorAccent">#D5012A</item> 
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item> 
</style> 

<style name="DrawerArrowStyle" 
    parent="@style/Widget.AppCompat.DrawerArrowToggle"> 
    <item name="spinBars">true</item> 
    <item name="color">@color/colorRedText</item> 
</style> 

<style name="MyTheme" parent="MyTheme.Base"> 
</style> 

6.Make我的主題,通過在AndroidManifest.xml文件中添加以下行的默認應用程序的主題,你可以在你的項目的屬性下找到,在當前的Android項目下面。

<application android:label="YourAppName" android:theme="@style/MyTheme" android:hardwareAccelerated="true" android:largeHeap="true" android:icon="@drawable/YourAppIcon"> 

而如果你不明白什麼,你可以簡單地點擊這裏:

https://developer.xamarin.com/guides/android/platform_features/maps_and_location/

還要檢查,如果你有谷歌在AndroidSdk發揮服務,你可以在VS-工具欄中找到15工具> Android> AndroidSdk 在附加功能下安裝Google Play服務。

+0

謝謝@Ghakim的迴應。我嘗試過這種方法,但是在SetContentView(Resource.layout.Main)中拋出一個新錯誤' 錯誤: **未處理的異常: Java.Lang.IllegalStateException:您需要使用Theme.AppCompat主題(或後代)與此活動。發生**。 另外,當我將鼠標拖拽到'SetContentView(Resource.layout.Main)'時,它說** void Activity.SetContentView(int LayoutResID)(+2重載) 設置佈局資源上的活動內容。** 我應該關注這個嗎? –

+0

我已經更新了我的回答,看一看,沒有發現錯誤,因爲根據上面的代碼更新後,如果沒有默認主題,它將消失@BahAkif –

+0

我認爲我們快到了。我正在經歷一個錯誤,它出現在** styles.xml **中,顯示錯誤; **找不到與給定名稱匹配的資源(位於'drawerArrowStyle',值爲'@ style/DrawerArrowStyle')**。 我使用了一個名爲** Android Support Library v7 AppCompat **的組件,並通過** Xamarin.inc **安裝了名爲** Xamarin.Android.Support.v7.AppCompat **的塊組件。我是否下載正確的軟件包和組件? –

相關問題