ResolveLibraryProjectImports 에러가 발생되었다. 이건 또머야..;

오류항목을 복사 붙여넣기 하니 내용은 아래와 같았다.

심각도 코드 설명 프로젝트 파일 줄 비표시 오류(Suppression) 상태
오류  "ResolveLibraryProjectImports" 작업에서 예기치 않은 오류가 발생했습니다.
System.IO.PathTooLongException: 지정한 경로 및/또는 파일 이름이 너무 깁니다. 정규화된 파일 이름은 260자 미만이어야 하며 디렉터리 이름은 248자 미만이어야 합니다.
   위치: System.IO.PathHelper.GetFullPathName()
   위치: System.IO.Path.LegacyNormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)
   위치: System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)
   위치: System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength)
   위치: System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   위치: System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
   위치: System.IO.File.Open(String path, FileMode mode)
   위치: Xamarin.Tools.Zip.ZipEntry.DoExtract(IntPtr zipFile, String destinationPath, FileMode outputFileMode, EntryExtractEventArgs args)
   위치: Xamarin.Tools.Zip.ZipEntry.Extract(String destinationDir, String destinationFileName, FileMode outputFileMode)
   위치: Xamarin.Android.Tools.Files.ExtractAll(ZipArchive zip, String destination, Action`2 progressCallback)
   위치: Xamarin.Android.Tasks.ResolveLibraryProjectImports.Extract(DirectoryAssemblyResolver res, ICollection`1 jars, ICollection`1 resolvedResourceDirectories, ICollection`1 resolvedAssetDirectories, ICollection`1 resolvedEnvironments)
   위치: Xamarin.Android.Tasks.ResolveLibraryProjectImports.Execute()
   위치: Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
   위치: Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext() XamarinFormsStudy.Android   

현재 솔루션이 내 문서에 있는데 솔루션 및 프로젝트 명이 길어

전체 경로가 너무 길어져 에러가 나는 것 같았다.

그래서 솔루션 경로를 이동하여 주니 해결되었다. 끝.

 

 

'Xamarin' 카테고리의 다른 글

(Xamarin Forms) 5.Chart - OxyPlot  (0) 2017.07.10
(Xamarin Forms) 4.Image  (0) 2017.07.06
(Xamarin Forms) Error - ResolveLibraryProjectImports  (0) 2017.07.05
(Xamarin Forms) Error - XamlCTask  (0) 2017.07.05
(Xamarin Forms) 3.Layout  (0) 2017.07.05
(Xamarin Forms) 2.MasterDetailPage  (0) 2017.06.30

전날까지 잘 실행되던 솔루션이 오늘 빌드를 하니 에러가 발생되었다.

심각도 코드 설명 프로젝트 파일 줄 비표시 오류(Suppression) 상태
오류  "XamlCTask" 작업에서 "DebugType" 매개 변수를 지원하지 않습니다. 해당 매개 변수가 작업에 있는지 그리고 설정 가능한 public 인스턴스 속성인지 확인하세요. XamarinFormsStudy   
오류  해당 입력 매개 변수를 사용하여 "XamlCTask" 작업을 초기화할 수 없습니다. XamarinFormsStudy   
오류  "XamlCTask" 작업에서 "DebugType" 매개 변수를 지원하지 않습니다. 해당 매개 변수가 작업에 있는지 그리고 설정 가능한 public 인스턴스 속성인지 확인하세요. XamarinFormsStudy.Android   
오류  해당 입력 매개 변수를 사용하여 "XamlCTask" 작업을 초기화할 수 없습니다. XamarinFormsStudy.Android 

일단 구글링을 해보니

https://forums.xamarin.com/discussion/54790/the-xamlctask-task-failed-unexpectedly

위 링크에서 솔루션용 NuGet 패키지 관리에서 Xamarin Forms 를 지웠다 다시 깔라는데....

일단 들어가 보았다.

들어가니 아래처럼 업데이트 할 항목이 수두룩했다.

처음에는 Xamarin.Forms 만 업데이트 했으나 여전히 에러가 발생되어 모든 항목을 체크하고 업데이트 진행해 보았다..

비쥬얼스튜디오를 껐다 켜야한다.

재실행하니 에러가 사라졌다!!!

업데이트 하고 되는걸 보니 먼가 버전이 안맞거나 하면 나는 에러로 보인다.

'Xamarin' 카테고리의 다른 글

(Xamarin Forms) 4.Image  (0) 2017.07.06
(Xamarin Forms) Error - ResolveLibraryProjectImports  (0) 2017.07.05
(Xamarin Forms) Error - XamlCTask  (0) 2017.07.05
(Xamarin Forms) 3.Layout  (0) 2017.07.05
(Xamarin Forms) 2.MasterDetailPage  (0) 2017.06.30
(Xamarin Forms) 1.ContentPage  (0) 2017.06.29


Xamarin.Forms는 화면상의 컨텐츠 위치를 결정하는 몇가지 레이아웃 및 기능들을 제공하고 있습니다.

각 레이아웃 컨트롤은 다음과 같습니다.

StackLayout 
: 수평이나 수직 방향으로 순차적으로 정렬을 원할때 사용합니다.
  StackLayout에서 뷰들은 중앙, 왼쪽, 오른쪽으로 정렬될 수 있습니다.

<StackLayout Orientation="Horizontal">
  <Label HorizontalOptions="StartAndExpand" Text="Label" />
  <Button HorizontalOptions="End" Text="Button" />
</StackLayout>

AbsoluteLayout 
: 절대 값이나 절대 비율을 기준으로 좌표 및 크기를 설정하여 뷰들을 정렬할때 사용됩니다. 
  AbsoluteLayout은 레이어 뷰들을 왼쪽, 오른쪽, 중앙으로 고정시킬 때 사용이 가능합니다.

아래 예제를 실행하기 위해선 이미지를 가져와야합니다.
Image 포스팅 참고해주세요 => http://kjcoder.tistory.com/325

위 작업이 마무리 되면 아래처럼 xaml 을 작성합니다.

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:XamarinFormsStudy;assembly=XamarinFormsStudy"
             x:Class="XamarinFormsStudy.AbsoluteLayoutPage">
    <ContentPage.Content>
        <AbsoluteLayout Padding="15">
            <Image AbsoluteLayout.LayoutFlags="PositionProportional" AbsoluteLayout.LayoutBounds="0.5, 0, 100, 100" Rotation="30" Source="{local:ImageResource XamarinFormsStudy.bottom.png}" />
            <Image AbsoluteLayout.LayoutFlags="PositionProportional" AbsoluteLayout.LayoutBounds="0.5, 0, 100, 100" Rotation="60" Source="{local:ImageResource XamarinFormsStudy.middle.png}" />
            <Image AbsoluteLayout.LayoutFlags="PositionProportional" AbsoluteLayout.LayoutBounds="0.5, 0, 100, 100" Source="{local:ImageResource XamarinFormsStudy.cover.png}" />
        </AbsoluteLayout>
    </ContentPage.Content>
</ContentPage>

 

 RelativeLayout
: 뷰들의 부모의 차원 및 위치에 대한 상대적인 제약을 설정하여 정렬할 때 사용됩니다.

<RelativeLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
  <BoxView Color="Blue" HeightRequest="50" WidthRequest="50"
    RelativeLayout.XConstraint= "{ConstraintExpression Type=RelativeToParent, Property=Width, Factor = 0}"
    RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Factor = 0}" />
  <BoxView Color="Red" HeightRequest="50" WidthRequest="50"
    RelativeLayout.XConstraint= "{ConstraintExpression Type=RelativeToParent, Property=Width, Factor = .9}"
    RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Factor = 0}" />
  <BoxView Color="Gray" WidthRequest="15" x:Name="pole"
    RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Factor=.75}"
    RelativeLayout.XConstraint= "{ConstraintExpression Type=RelativeToParent, Property=Width, Factor = .45}"
    RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Factor = .25}" />
  <BoxView Color="Green"
    RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Factor=.10, Constant=10}"
    RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent,Property=Width, Factor=.2, Constant=20}"
    RelativeLayout.XConstraint= "{ConstraintExpression Type=RelativeToView, ElementName=pole, Property=X, Constant=15}"
    RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToView, ElementName=pole, Property=Y, Constant=0}" />
</RelativeLayout>

Grid
: 그리드 형태로 뷰들을 정렬할 때 사용됩니다.
  Row와 Column은 절대 값이나 비율을 기준으로 정해질 수 있습니다.

<Grid>
  <Grid.RowDefinitions>
    <RowDefinition Height="*" />
    <RowDefinition Height="*" />
    <RowDefinition Height="*" />
    <RowDefinition Height="*" />
  </Grid.RowDefinitions>

  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="*" />
    <ColumnDefinition Width="*" />
    <ColumnDefinition Width="*" />
  </Grid.ColumnDefinitions>
  <Button Text="1" Grid.Row="0" Grid.Column="0" />
  <Button Text="2" Grid.Row="0" Grid.Column="1" />
  <Button Text="3" Grid.Row="0" Grid.Column="2" />
  <Button Text="4" Grid.Row="1" Grid.Column="0" />
  <Button Text="5" Grid.Row="1" Grid.Column="1" />
  <Button Text="6" Grid.Row="1" Grid.Column="2" />
  <Button Text="7" Grid.Row="2" Grid.Column="0" />
  <Button Text="8" Grid.Row="2" Grid.Column="1" />
  <Button Text="9" Grid.Row="2" Grid.Column="2" />
  <Button Text="0" Grid.Row="3" Grid.Column="1" />
  <Button Text="*" Grid.Row="3" Grid.Column="2" />
</Grid>

 

ScrollView 
: 뷰들이 화면의 영역내에 전체가 표시될 수 없을 때 스크롤을 제공하기 위해 사용됩니다.

 

참고

https://developer.xamarin.com/guides/xamarin-forms/user-interface/layouts/

https://developer.xamarin.com/api/type/Xamarin.Forms.AbsoluteLayout/

GitHub > https://github.com/knagjun/XamarinForms

'Xamarin' 카테고리의 다른 글

(Xamarin Forms) Error - ResolveLibraryProjectImports  (0) 2017.07.05
(Xamarin Forms) Error - XamlCTask  (0) 2017.07.05
(Xamarin Forms) 3.Layout  (0) 2017.07.05
(Xamarin Forms) 2.MasterDetailPage  (0) 2017.06.30
(Xamarin Forms) 1.ContentPage  (0) 2017.06.29
(Xamarin Forms) StartTimer  (0) 2017.06.22

MsaterDetailPage 는 마스터 페이지와 마스터 정보에 대한 하위 수준의 세부 정보를 표시하는 세부 정보 페이지를 관리할때 사용됩니다.

쉽게 말하면 왼쪽 슬라이드 메뉴에 마스터 정보가 표시되고 해당 항목을 클릭하면 마스터의 세부정보가

전체 화면으로 보여지게되는 것입니다.

아래처럼 왼쪽 메뉴에 마스터 정보가 표시되고 Page1 마스터 항목을 클릭하게되면

아래 처럼 해당 항목에 대한 세부 내용이 표시되는 것입니다.

위 내용은 제가 만든게 아니라 프로젝트에서 추가>새항목>MasterDetailPage 을 하게되면 위처럼 화면에 표시가 되도록 기본 구성됩니다.

MasterDetailPage1Master : 마스터 정보(왼쪽 슬라이드 메뉴)의 구성을 나타냅니다. (page.Title 항목이 반드시 있어야합니다.)

MasterDetailPage1MenuItem : MasterDetailPage1Master 에서 사용되는 메뉴 구조가 정의됩니다.

MasterDetailPage1Detail : 마스터 정보가 선택되면 나타나는 세부 정보 입니다.

 

아래는 XAML 로만 구성한 방식입니다.

XamarinFormsStudy 의 MainPage (ContentPage) 를 세부 항목 창으로 사용하는 예제입니다.

<?xml version="1.0" encoding="utf-8" ?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="XamarinFormsStudy.MasterDetailTestPage"
             xmlns:local="clr-namespace:XamarinFormsStudy">

    <MasterDetailPage.Master>
        <ContentPage Title="MasterDetailPage">
            <StackLayout Orientation="Vertical">
                <Button Text="자기소개"/>
                <Button Text="경력" />
                <Button Text="자격증"/>
                <Button Text="집주소"/>
            </StackLayout>
        </ContentPage>
    </MasterDetailPage.Master>
    <MasterDetailPage.Detail>
        <local:MainPage/>
    </MasterDetailPage.Detail>
   
</MasterDetailPage>

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace XamarinFormsStudy
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class MasterDetailTestPage : MasterDetailPage
    {
        public MasterDetailTestPage()
        {
            InitializeComponent();
        }
    }
}

 

참고

https://www.youtube.com/watch?v=yaC0-C942wk

https://developer.xamarin.com/api/type/Xamarin.Forms.MasterDetailPage/

GitHub > https://github.com/knagjun/XamarinForms

'Xamarin' 카테고리의 다른 글

(Xamarin Forms) Error - XamlCTask  (0) 2017.07.05
(Xamarin Forms) 3.Layout  (0) 2017.07.05
(Xamarin Forms) 2.MasterDetailPage  (0) 2017.06.30
(Xamarin Forms) 1.ContentPage  (0) 2017.06.29
(Xamarin Forms) StartTimer  (0) 2017.06.22
(Xamarin) WiFi 접속하기  (0) 2017.06.18

오늘 부터 짬나는대로 Xamarin Forms 기초 내용부터 포스팅할 예정입니다.

오늘은 그 첫번째 시간으로 ContentPage 에 대해서 알아보겠습니다.

가장 기본인 화면뷰 로써 ContentPage 에는 어떤 컨트롤이든 위치시킬수 있습니다.

아래는 ContentPage Class 의 모습입니다.

    public class ContentPage : TemplatedPage
    {
        //
        // 요약:
        //     Backing store for the Xamarin.Forms.ContentPage.Content property.
        //
        // 설명:
        //     To be added.
        public static readonly BindableProperty ContentProperty;

        public ContentPage();

        //
        // 요약:
        //     Gets or sets the view that contains the content of the Page.
        public View Content { get; set; }

        //
        // 요약:
        //     Method that is called when the binding context changes.
        //
        // 설명:
        //     To be added.
        protected override void OnBindingContextChanged();
    }

 

크로스플랫폼 솔루션을 구성하면 기본적으로 MainPage 를 호출하도록 되어있는데요

        public App()
        {
            InitializeComponent();

            MainPage = new XamarinFormsStudy.MainPage();
        }

이 MainPage 가 ContentPage 로 구현되어있습니다.

    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }
    }

라벨을 하나 추가하려면 아래처럼 Content 에 라벨을 하나 만들어 주면 됩니다.

        public MainPage()
        {
            InitializeComponent();
            Content = new Label
            {
                Text = "Hello, Forms!",
                VerticalOptions = LayoutOptions.CenterAndExpand,
                HorizontalOptions = LayoutOptions.CenterAndExpand,
            };
        }

결과

 

라벨만을 가지고 화면을 구성하는 경우는 드물기 때문에

아래처럼 윈폼의 Panel 과 같은 역할을 하는 Layout 을 먼저 선언하고

그안에 라벨을 넣어주는게 정석? 입니다.

        public MainPage()
        {
            InitializeComponent();

            Content = new StackLayout
            {
                VerticalOptions = LayoutOptions.CenterAndExpand,
                Children =
                {
                    new Label{
                                Text = "Hello, Forms!",
                                VerticalOptions = LayoutOptions.CenterAndExpand,
                                HorizontalOptions = LayoutOptions.CenterAndExpand,
                    }
                }
            };
        }

결과 화면은 위 결과화면과 동일합니다.


또한, XAML 형식으로도 화면정의가 가능합니다.

위 코드 내용을 모두 지우고 MainPage.xaml 을 아래처럼 코딩하면 결과화면이 동일하게 나오게됩니다.

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:XamarinFormsStudy"
             x:Class="XamarinFormsStudy.MainPage">
    <StackLayout VerticalOptions="Center" >
        <Label Text="Hello, Forms!"
               VerticalOptions="Center"
               HorizontalOptions="Center" />
    </StackLayout>
</ContentPage>

 

참고 :

https://developer.xamarin.com/api/type/Xamarin.Forms.ContentPage/

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

GitHub > https://github.com/knagjun/XamarinForms

'Xamarin' 카테고리의 다른 글

(Xamarin Forms) 3.Layout  (0) 2017.07.05
(Xamarin Forms) 2.MasterDetailPage  (0) 2017.06.30
(Xamarin Forms) 1.ContentPage  (0) 2017.06.29
(Xamarin Forms) StartTimer  (0) 2017.06.22
(Xamarin) WiFi 접속하기  (0) 2017.06.18
(Xamarin.Android) splash screen 넣기  (0) 2017.06.17

Xamarin Forms 에서 Timer 를 쓸려고 하는데 쓸수가 없다;

찾아보니 Xamarin.Foms 에 Device.StartTimer 라는게 있어 이걸 사용하면 된다고한다.

사용방법은 기존 타이머와 방식이 좀 다르다.

 

        public MainPage()
        {
            InitializeComponent(); 

            Device.StartTimer(TimeSpan.FromSeconds(3), () =>
            {
                // 호출할 메서드나 내용을 넣고
                GetDataAsync();

               // 리턴을 해주는데 True 이면 계속 반복, False 이면 정지 한다.
                return true;
            });
        }

        public async void GetDataAsync()
        {
            ....
        }

위 내용은 3초 단위로 타이머가 동작하면서 GetDataAsync() 함수를 호출하게된다.

 

참고 : https://xamarinhelp.com/xamarin-forms-timer/

'Xamarin' 카테고리의 다른 글

(Xamarin Forms) 2.MasterDetailPage  (0) 2017.06.30
(Xamarin Forms) 1.ContentPage  (0) 2017.06.29
(Xamarin Forms) StartTimer  (0) 2017.06.22
(Xamarin) WiFi 접속하기  (0) 2017.06.18
(Xamarin.Android) splash screen 넣기  (0) 2017.06.17
(Xamarin.Android) AdMob 광고 넣기 (2)  (3) 2017.06.15

    private void EnableWifi()
   
{
     
string networkSSID = "bbox-xxx";
     
string networkPass = "mypass";

     
WifiConfiguration wifiConfig = new WifiConfiguration();
      wifiConfig
.Ssid = string.Format("\"{0}\"", networkSSID);
      wifiConfig
.PreSharedKey = string.Format("\"{0}\"", networkPass);

     
WifiManager wifiManager = (WifiManager)Application.Context.GetSystemService(Context.WifiService);

     
// Use ID
     
int netId = wifiManager.AddNetwork(wifiConfig); wifiManager.Disconnect();
      wifiManager
.EnableNetwork(netId, true);
      wifiManager
.Reconnect();
   
}

 

 

참고

https://stackoverflow.com/questions/8818290/how-do-i-connect-to-a-specific-wi-fi-network-in-android-programmatically

https://gist.github.com/Cheesebaron/5844638

'Xamarin' 카테고리의 다른 글

(Xamarin Forms) 1.ContentPage  (0) 2017.06.29
(Xamarin Forms) StartTimer  (0) 2017.06.22
(Xamarin) WiFi 접속하기  (0) 2017.06.18
(Xamarin.Android) splash screen 넣기  (0) 2017.06.17
(Xamarin.Android) AdMob 광고 넣기 (2)  (3) 2017.06.15
(Xamarin.Android) AdMob 광고 넣기 (1)  (0) 2017.06.15

어플 실행 시 splash screen 을 보여주고 싶어 방법을 찾아보니 아래 출처에 잘 소개가 되어있어 소개합니다.

출처 : https://forums.xamarin.com/discussion/19362/xamarin-forms-splashscreen-in-android

 

우선 splash 에 보여줄 이미지를 준비합니다.

아래 예시에서 splash 에 사용될 이미지 명은 'icon' 입니다.

우선 Activity 를 만들어 줍니다. ( SplashScreen )

아래 내용은 Theme = "@style/Theme.Splash" 여기에 정의된 테마화면을 보여주고 난다음

메인 화면인 MainActivity 를 호출하고 자기자신은 Finish() 하여 Splash 화면을 닫아버립니다.

SplashScreen.cs:

    [Activity(Label = "MyApp", MainLauncher = true, NoHistory = true, Theme = "@style/Theme.Splash",
    ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class SplashScreen : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            var intent = new Intent(this, typeof(MainActivity));
            StartActivity(intent); Finish();
        }
    }

아래가 실제 메인 화면입니다.

MainActivity.cs:

[Activity(Label = "MyApp", Theme = "@android:style/Theme.Holo", ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : AndroidActivity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);       
           
            // Xamarin Forms
            Xamarin.Forms.Forms.Init(this, bundle);
            SetPage(App.GetMainPage());

            // Xamarin Android
            SetContentView(Resource.Layout.Main);
        }
    }

아래는 실제 화면에 보여질 이미지의 속성을 정의한다고 보면 될것 같습니다.

"@drawable/icon" 이 항목이 실제 화면에 보여질 이미지에 해당됩니다.

아래 두항목(gravity,layout_gravity) 은 가운데 이미지를 위치시키위한 내용입니다.

Resources.Drawable.SplashScreen.xml:

<?xml version="1.0" encoding="utf-8" ?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
        android:src="@drawable/icon" 
        android:gravity="center"
        android:layout_gravity="center"/>

아래는 화면 구조를 정의하는 내용입니다.

windowNoTitle 가 true 로 되어야 상단에 toolbar 가 사라지게됩니다.

Resources.Values.Styles.xml

<resources>
  <style name="Theme.Splash"    parent="android:Theme">
    <item name="android:windowBackground">
      @drawable/splashscreen
    </item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsTranslucent">false</item>
    <item name="android:windowIsFloating">false</item>
    <item name="android:backgroundDimEnabled">true</item>
  </style>
</resources>

 

이렇게 하고 시뮬레이터로 동작 시키게되면 어플이 실행되기전에

스플래시이미지가 보인후 메인 화면으로 진입하게 됩니다.

 

아래는 제가 실제 적용한 내용입니다.

위 내용과는 조금 다른 부분이있습니다.

SplashActivity.cs

[Activity(Label = "SMSConvey", Theme = "@style/SplashTheme", MainLauncher = true, NoHistory = true, Icon = "@drawable/conveysmsicon", ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class SplashActivity : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            Thread thread = new Thread(() =>
            {
                this.RunOnUiThread(() =>
                SimulateStartup());
            }
            );
            thread.Start();

        }

        // Launches the startup task
        protected override void OnResume()
        {
            base.OnResume();
        }

        // Prevent the back button from canceling the startup process
        public override void OnBackPressed() { }

        // Simulates background work that happens behind the splash screen
        private void SimulateStartup()
        {
            //await Task.Delay(1000); // Simulate a bit of startup work.
            Thread.Sleep(500);
            StartActivity(new Intent(Application.Context, typeof(MainActivity)));
            Finish();
        }
    }

Styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="SplashTheme" parent ="@android:Theme">
    <item name="android:windowBackground">@drawable/splash_screen</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsTranslucent">false</item>
    <item name="android:windowIsFloating">false</item>
    <item name="android:backgroundDimEnabled">true</item>
  </style>
</resources>

splash_screen.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item>
    <color android:color="#FFFFFF"/>
  </item>
  <item>
    <bitmap
        android:src="@drawable/smsconvey_splash"
        android:tileMode="disabled"
        android:gravity="center"/>
  </item>
</layer-list>

참고

https://developer.xamarin.com/guides/android/user_interface/creating_a_splash_screen/

http://www.c-sharpcorner.com/UploadFile/1e050f/creating-splash-screen-for-android-app-in-xamarin/

지난 포스팅에서는 AdMob 에서 광고 ID 까지 가져와 봤습니다. (http://kjcoder.tistory.com/276)

제가 획득한 광고 ID 는 ca-app-pub-4681470946279796/9940497268 입니다.

이제 프로젝트 하나를 만듭니다.

프로젝트는 다 아시겠지만 Android 에서 비어있는 앱을 선택하여 프로젝트를 생성합니다.

프로젝트가 구성되면

Nuget 에서 Goole Play Ads 를 설치해야합니다.

프로젝트 우클릭 메뉴에서 NuGet 패키지 관리.. 로 들어갑니다.

여기서 찾아보기 탭을 선택 후 Google Play Ads 를 검색해서 가장 처음에 있는 항목을 선택하고 설치를 진행합니다.

확인.

동의함.

설치가 완료되면 참조에 아래와 같이 라이브러리들이 쫙~ 추가 되어있습니다.

(Lite 버전도 있던데 이것만 깔아도 되는지는 테스트 해봐야 알것 같습니다. 용량이 확실히 적긴하더군요.)

이제 구글 광고를 삽입하기 위한 사전 준비는 완료 되었습니다.

 

프로젝트의 string.xml 파일에 광고 ID 를 선언합니다.

(직접 입력해도 되나 이렇게 관리하는게 나중에 관리하기가 용이합니다.)

중요한 부분은

<string name="AdMobID">ca-app-pub-4681470946279796/9940497268</string>

이부분입니다. 이제 AdMobID 로 광고를 적용하게됩니다.

이제 실제 보이는 화면에서 구글 광고의 위치를 잡아 보겠습니다.

Main.axml 파일로 이동합니다.

아래 처럼 코딩합니다.

TextView 에서는 단순하게 Text 를 표시해 주고 그 Text 바로 아래에 구글 광고 베너가 표시되도록 하였습니다.

여기서 중요한 부분은 아래 굵게 표시된 부분입니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="
http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:text="@string/Hello"
        android:layout_width="wrap_content"
        android:id="@+id/content"
        android:layout_height="wrap_content" />
    <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        ads:adSize="BANNER"
        ads:adUnitId="@string/AdMobID" />

</LinearLayout>

파란색 부분이 앞서 광고 ID 로 지정했던 변수 이름을 넣어야합니다. (직접 광고 ID 를 넣어도 상관없습니다.)

이제 MainActivity 에 추가 코딩을 해야합니다.

    [Activity(Label = "AdMob", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        protected AdView mAdView;

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Main);

            mAdView = FindViewById<AdView>(Resource.Id.adView);
            var adRequest = new AdRequest.Builder().Build();
            mAdView.LoadAd(adRequest);

        }
        protected override void OnResume()
        {
            base.OnResume();
            if (mAdView != null)
            {
                mAdView.Resume();
            }
        }

    }

마지막으로 인터넷을 이용해 광고 정보를 가져와야하므로 권한설정이 필요합니다.

아래처럼 프로젝트 속성의 Android 매니페스트 에서 ACESS_NETWROK_STATE, INTERNET 권한을 체크해야합니다.

모든 설정은 끝났습니다.

 

시뮬레이터로 실행하거나 안드로이드 폰으로 실행하면 아래 처럼 광고베너가 삽입된걸 볼수 있습니다.

 

소스는 아래에 있습니다.

https://github.com/knagjun/AdMob

 

도움이 되셨으면 공감 부탁드립니다.^^

  1. Favicon of https://delphiman.tistory.com 기정아빠 2019.06.27 04:52 신고

    올려주신 내용으로 따라하기 를 해보았는데 광고가 수신이 되지 않는 것은 왜 그럴까요?
    구글에서 광고 생성을 하고나서 조금 시간이 경과 되어야 하나요?

    깃허브에 올려놓으신 것을 다운받아 앱ID 만 변경해서 실행해 보아도 Hello AdMob!만 나오네요.

    아니면 apk를 만들어 구글플레이에 올려놓고나서부터 광고가 수신되는 건가요?

    디버그 모드로도 해보고 릴리즈 모드로도 해보았는데 잘되지 않아서 글을 남겨봅니다.

    • Favicon of https://kjun.kr kjun.kr 2019.06.27 07:07 신고

      안드로이드라면 apk 파일을 만들고 그파일을폰에 옮긴후설치해보세요 언제부턴가 그래야 광고가 표시되더라구요^^

    • Favicon of https://delphiman.tistory.com 기정아빠 2019.06.27 10:41 신고

      감사합니다.
      패키지에 서명을 해서 릴리즈로 배포했더니 동작하네요.
      감사합니다.

Xamarin.Android 에 광고 넣는 방법을 소개합니다.

이번 시간에는 AdMob 에서 광고 ID 를 얻는 방법입니다.

우선 AdMob 에 가입을 합니다.

https://www.google.com/admob/

구글 로그인 해서 가입을 진행해야합니다.

가입 완료 후 수익창출 을 선택합니다.

여기서 좌측 상단의 빨간색 버튼 '새로운 앱에서 수익 창출' 을 클릭합니다.

아직 구글 플레이에 배포된 앱이 없다면 앱 직접 추가를 선택하고 이름을 넣습니다.

ANDROID 플랫폼을 선택합니다.

이름을 넣으면 아래처럼 앱추가 버튼이 활성화 됩니다.

앱추가를 클릭합니다.

광고 형식을 선택합니다. 배너를 선택합니다.

당연히 광고 크기가 크면 클수록 수익성이 좋을테지만 광고가 크면 클수록 사용자가 줄어들수도 있습니다.

 

광고 단위 이름을 넣고 저장 버튼을 클릭합니다.

애널리틱스는 건너뛰기 합니다. (필요하신 분을 사용하셔도 됩니다 _ 사용방법은 알아서^^)

아래 광고 단위 ID 가 생성되었습니다. 요놈을 잘 복사해 둡니다.

아래 목록에 광고 단위가 추가 된걸 확인 할수 있습니다.

 

다음 포스팅때 광고 ID를 가지고 XAMARIN.ANDROID 에 적용해보겠습니다.

+ Recent posts