ASP.Net MVC User-Agent Kontrolünde Android Tableti Ayırt Etme

Anrdoid 3.x sonrasındaki tüm sürümlerde User Agent kontrol edilirken karşılaşılacak en büyük sorun eskiden "... Anrdoid;" ve "... AndroidMobile" şeklinde olan User Agent stringlerinin bu sürümden itibaren sadece "... Anrdoid;" şeklinde tanımlanmıştır. Bundan dolayı Android cihazın tablet mi yoksa akıllı telefon mu olduğunu ayırt edebilmek için ekran genişliğini baz almak gerekmektedir.

Eğer Sever tarafında bu işlemi yapacaksınız, yani DOM'u manipule etmek yerine servis edilen kod üzerinde değişiklik yapmak niyetindeyseniz çözüm tahmin edebileceğiniz gibi arka planda kullanıcının ekran çözünürlüğü yakalmaktır. Aşağıdaki kod bloğu ASP.Net MVC'de bu işlemin nasıl yağılabileceğini göstermektedir.

@inherits System.Web.Mvc.WebViewPage
@using System.Web.Helpers;
@using System.Web.Mvc;
@using System.Web.Mvc.Html;

@{
    var userAgent = HttpContext.Current.Request.UserAgent.ToLower();
    var genislik = Request.Browser.ScreenPixelsWidth;
}

<ul class="bxslider" id="bir">
    @foreach (Slayt ana in Partial.Slaytlar(dilk))
    {
        if (ana.SlaytSira == 1 || ana.SlaytSira == 2 || ana.SlaytSira == 3)
        {
            string slaytrenk = Convert.ToString(Partial.SlaytOzelAlan(ana.SlaytID, "Renk Seç"));
            <li>
                @if (genislik > 640)
                {
                    <img src="/Resim/Slayt/@ana.SlaytResim" alt="@ana.SlaytBaslik" data-no-retina />
                }


                else if (userAgent.Contains("iphone") || (userAgent.Contains("android") && genislik < 640) || userAgent.Contains("windows phone"))
                {
                    string mobilde = Partial.SlaytOzelAlan(ana.SlaytID, "Mobil Slide").ToString();

                    <img src="@mobilde" alt="@ana.SlaytBaslik" />
                }

                else
                {
                    <img src="/Resim/Slayt/@ana.SlaytResim" alt="@ana.SlaytBaslik" data-no-retina />
                }
                <div class="mk-main-wrapper-holder @slaytrenk gallerySliderImageText">
                    <div class="container">
                        <div class="row">
                            <div class="col-lg-12 text-center">
                                @if (slaytrenk == "yesil")
                                {
                                    <h1 class="yoruk">@ana.SlaytBaslik</h1>
                                    <p>
                                        @Partial.SlaytOzelAlan(ana.SlaytID, "Açıklama Bir")
                                        <div style="clear:both;"></div>
                                    </p>
                                    <img src="@Partial.SlaytOzelAlan(ana.SlaytID, "Ek Resim")" class="img-responsive mb10 autoalign" />
                                }

                                else if (slaytrenk == "beyaz")
                                {
                                    <img src="@Partial.SlaytOzelAlan(ana.SlaytID, "Ek Resim")" class="img-responsive mb10 autoalign" />
                                    <p>
                                        @Partial.SlaytOzelAlan(ana.SlaytID, "Açıklama Bir")
                                    </p>
                                    <h4>
                                        @ana.SlaytBaslik
                                    </h4>
                                    <p>
                                        @Partial.SlaytOzelAlan(ana.SlaytID, "Açıklama İki")
                                    </p>
                                    <div style="clear:both;"></div>
                                }
                            </div>
                        </div>
                    </div>
                </div>
            </li>
        }
    }
</ul>

Buradaki püf nokta ise Request.Browser.ScreenPixelsWidth kodunun ekran genişliğini sürekli olarak 640 döndürüyor olmasıdır. Bu kodun tam olarak çalışması için, en azından şimdilik 51degrees tarzındaki ücretli bir kütüphane kullanılması gerekmetedir. Aks, taktirde değerimiz sürekli 640 olarak dönmektedir. Bu durum MVC'nin ileri sürümlerinde muhtemelen düzeltilecek olsa da, şu anda bize döndürdüğü değer de yeterlidir.

Piyasadaki tabletlerin çok büyük kısmı 640px'den daha küçük ekran çözünürlüğüne sahip olmadığı için bu yönde bir kontrol oluşturmak android tablet ile android telefonu birbirinden ayırmak için yeterli olacaktır.

Sevgiler.

Yorum Yaz

Yorumlarınız denetimden geçtikten sonra yayınlanmaktadır...