Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Android 4.4 (KitKat), kullanıcılar ve geliştiriciler için bir özellikler cornucopia ile birlikte gelir. Bu kılavuz, bu özelliklerden birkaçını vurgular ve KitKat'i en iyi şekilde kullanmanıza yardımcı olmak için kod örnekleri ve uygulama ayrıntıları sağlar.
Genel bakış
"KitKat" olarak da bilinen Android 4.4 (API Düzey 19), 2013'in sonlarında piyasaya sürüldü. KitKat, aşağıdakiler dahil olmak üzere çeşitli yeni özellikler ve iyileştirmeler sunar:
Kullanıcı Deneyimi – Geçiş çerçevesi, yarı saydam durum ve gezinti çubukları ile kolay animasyonlar ve tam ekran çevreleyici mod, kullanıcı için daha iyi bir deneyim oluşturmaya yardımcı olur.
Kullanıcı İçeriği – Depolama erişim çerçevesiyle basitleştirilmiş kullanıcı dosya yönetimi; geliştirilmiş yazdırma API'leri ile resimleri, web sitelerini ve diğer içerikleri yazdırmak daha kolaydır.
Donanım – NFC Konak Tabanlı Kart Öykünmesi ile herhangi bir uygulamayı NFC kartına dönüştürün; ile düşük güç algılayıcıları
SensorManagerçalıştırın.Geliştirici Araçları – Android SDK'sının bir parçası olarak kullanılabilen Android Hata Ayıklama Köprüsü istemcisiyle birlikte ekran yayını uygulamaları.
Bu kılavuz, mevcut bir Xamarin.Android uygulamasını KitKat'a geçirme yönergelerinin yanı sıra Xamarin.Android geliştiricileri için KitKat'a üst düzey bir genel bakış sağlar.
Gereksinimler
KitKat kullanarak Xamarin.Android uygulamaları geliştirmek için, aşağıdaki ekran görüntüsünde gösterildiği gibi, Android SDK Yöneticisi aracılığıyla Xamarin.Android 4.11.0 veya üzeri ve Android 4.4 (API Düzeyi 19) yüklü olmalıdır:
Uygulamanızı KitKat'a Geçirme
Bu bölümde, mevcut uygulamaların Android 4.4'e geçişine yardımcı olacak bazı ilk yanıt öğeleri sağlanır.
Sistem Sürümünü Denetle
Bir uygulamanın Android'in eski sürümleriyle uyumlu olması gerekiyorsa, aşağıdaki kod örneğinde gösterildiği gibi KitKat'a özgü kodları sistem sürümü denetiminde sarmalamayı unutmayın:
if (Build.VERSION.SdkInt >= BuildVersionCodes.Kitkat) {
//KitKat only code here
}
Alarm Toplu İşlemi
Android, belirli bir zamanda arka planda bir uygulamayı uyandırmak için alarm hizmetlerini kullanır. KitKat, gücü korumak için alarmları toplu olarak oluşturarak bunu bir adım ileri götürür. Bu, her uygulamayı tam bir zamanda uyandırmak yerine KitKat'ın aynı zaman aralığında uyandırmak ve aynı anda uyandırmak üzere kayıtlı çeşitli uygulamaları gruplandırmak tercih ettiğini gösterir.
Android'e belirli bir zaman aralığında bir uygulamayı uyandırmasını söylemek için, SetWindowAlarmManageren düşük ve en uzun süreyi milisaniye cinsinden geçirerek, uygulama uyanmadan önce geçen ve uyandırma sırasında gerçekleştirilecek işlemi çağırın.
Aşağıdaki kod, pencerenin ayarlandığı zamandan itibaren yarım saat ile bir saat arasında uyandırılması gereken bir uygulama örneği sağlar:
AlarmManager alarmManager = (AlarmManager)GetSystemService(AlarmService);
alarmManager.SetWindow (AlarmType.Rtc, AlarmManager.IntervalHalfHour, AlarmManager.IntervalHour, pendingIntent);
Bir uygulamayı tam zamanında uyandırmaya devam etmek için, uygulamasının uyandırılacağı zamanı ve gerçekleştirilecek işlemi tam olarak geçirerek kullanın SetExact:
alarmManager.SetExact (AlarmType.Rtc, AlarmManager.IntervalDay, pendingIntent);
KitKat artık tam olarak tekrarlanan bir alarm ayarlamanıza olanak sağlamaz. Kullanan uygulamalar SetRepeating ve tam alarmların çalışması için şimdi her bir alarmı el ile tetiklemelisiniz.
Harici Depolama
Dış depolama artık iki türe ayrılmıştır: uygulamanıza özgü depolama alanı ve birden çok uygulama tarafından paylaşılan veriler. Uygulamanızın dış depolamadaki belirli konumuna okuma ve yazma için özel izin gerekmez. Paylaşılan depolamadaki verilerle etkileşime geçiş için artık veya WRITE_EXTERNAL_STORAGE izni gerekirREAD_EXTERNAL_STORAGE. İki tür şu şekilde sınıflandırılabilir:
Üzerinde bir yöntem
Contextçağırarak bir dosya veya dizin yolu alıyorsanız, örneğin,GetExternalFilesDirveyaGetExternalCacheDirs- uygulamanız için ek izin gerekmez.
Bir özelliğe erişerek veya üzerinde bir yöntem
Environmentçağırarak bir dosya veya dizin yolu alıyorsanız, örneğin,GetExternalStorageDirectoryVeyaGetExternalStoragePublicDirectory, uygulamanız veyaWRITE_EXTERNAL_STORAGEizni gerektirirREAD_EXTERNAL_STORAGE.
Not
WRITE_EXTERNAL_STORAGEREAD_EXTERNAL_STORAGE izin anlamına gelir, bu nedenle yalnızca bir izin ayarlamanız gerekir.
SMS Birleştirme
KitKat, tüm SMS içeriğini kullanıcı tarafından seçilen bir varsayılan uygulamada toplayarak kullanıcı için mesajlaşmayı basitleştirir. Geliştirici, uygulamayı varsayılan mesajlaşma uygulaması olarak seçilebilir hale getirmek ve uygulama seçilmezse kodda ve hayatta uygun şekilde davranmadan sorumludur. SMS uygulamanızı KitKat'a geçirme hakkında daha fazla bilgi için Google'dan SMS Uygulamalarınızı KitKat için Hazırlama kılavuzuna bakın.
WebView Uygulamaları
WebView , KitKat'ta bir değişiklik yaptı. En büyük değişiklik, içeriği içine WebViewyüklemek için güvenlik eklenmesidir. Eski API sürümlerini hedefleyen uygulamaların çoğu beklendiği gibi çalışmalıdır ancak sınıfını kullanan WebView uygulamaların test edilmesi kesinlikle önerilir. Etkilenen WebView API'leri hakkında daha fazla bilgi için Android 4.4'te Android WebView'a Geçiş belgelerine bakın.
Kullanıcı Deneyimi
KitKat, özellik animasyonlarını işlemeye yönelik yeni geçiş çerçevesi ve temalı bir kullanıcı arabirimi seçeneği de dahil olmak üzere kullanıcı deneyimini geliştirmek için çeşitli yeni API'lerle birlikte gelir. Bu değişiklikler aşağıda ele alınmıştır.
Geçiş Çerçevesi
Geçiş çerçevesi, animasyonların uygulanmasını kolaylaştırır. KitKat, tek bir kod satırıyla basit bir özellik animasyonu gerçekleştirmenize veya Sahneler'i kullanarak geçişleri özelleştirmenize olanak tanır.
Basit Özellik Animasyonu
Yeni Android Geçişleri kitaplığı, özellik animasyonlarının arkasındaki kodu basitleştirir. Çerçeve, en az kodla basit animasyonlar gerçekleştirmenizi sağlar. Örneğin, aşağıdaki kod örneği şunu kullanır: TransitionManager.BeginDelayedTransition bir gösterme ve gizlemeye TextViewanimasyon eklemek için:
using Android.Transitions;
public class MainActivity : Activity
{
LinearLayout linear;
Button button;
TextView text;
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
SetContentView (Resource.Layout.Main);
linear = FindViewById<LinearLayout> (Resource.Id.linearLayout);
button = FindViewById<Button> (Resource.Id.button);
text = FindViewById<TextView> (Resource.Id.textView);
button.Click += (o, e) => {
TransitionManager.BeginDelayedTransition (linear);
if(text.Visibility != ViewStates.Visible)
{
text.Visibility = ViewStates.Visible;
}
else
{
text.Visibility = ViewStates.Invisible;
}
};
}
}
Yukarıdaki örnek, değişen özellik değerleri arasında otomatik, varsayılan bir geçiş oluşturmak için geçiş çerçevesini kullanır. Animasyon tek bir kod satırı tarafından işlendiğinden, çağrıyı bir sistem sürümü denetiminde kaydırarak BeginDelayedTransition bunu Android'in eski sürümleriyle kolayca uyumlu hale getirebilirsiniz. Daha fazla bilgi için Uygulamanızı KitKat'a Geçirme bölümüne bakın.
Aşağıdaki ekran görüntüsünde, animasyondan önceki uygulama gösterilmektedir:
Aşağıdaki ekran görüntüsünde animasyondan sonraki uygulama gösterilmektedir:
Sonraki bölümde ele alınan Sahneler ile geçiş üzerinde daha fazla denetim elde edebilirsiniz.
Android Sahneleri
Sahneler , geliştiriciye animasyonlar üzerinde daha fazla denetim sağlamak için geçiş çerçevesinin bir parçası olarak sunulmuştur. Sahneler kullanıcı arabiriminde dinamik bir alan oluşturur: Kapsayıcı içindeki XML içeriği için bir kapsayıcı ve çeşitli sürümler veya "sahneler" belirtirsiniz ve Android, sahneler arasındaki geçişlere animasyon eklemek için işin geri kalanını yapar. Android Sahneleri, geliştirme tarafında minimum çalışmayla karmaşık animasyonlar oluşturmanıza olanak sağlar.
Dinamik içeriği barındıran statik UI öğesi kapsayıcı veya sahne tabanı olarak adlandırılır. Aşağıdaki örnek, adlı containerbir RelativeLayout oluşturmak için Android Tasarım Aracı kullanır:
Örnek düzen, altında containeradlı sceneButton bir düğme de tanımlar. Bu düğme geçişi tetikler.
Kapsayıcının içindeki dinamik içerik için iki yeni Android düzeni gerekir. Bu düzenler yalnızca kapsayıcının içindeki kodu belirtir. Aşağıdaki örnek kod, sırasıyla "Kit" ve "Kat" okuyan iki metin alanı ve aynı metin alanlarını içeren Scene2 adlı ikinci bir düzen ters çevrilen Scene1 adlı bir düzeni tanımlar. XML aşağıdaki gibidir:
Sahne1.axml:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/textA"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Kit"
android:textSize="35sp" />
<TextView
android:id="@+id/textB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/textA"
android:text="Kat"
android:textSize="35sp" />
</merge>
Scene2.axml:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/textB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Kat"
android:textSize="35sp" />
<TextView
android:id="@+id/textA"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/textB"
android:text="Kit"
android:textSize="35sp" />
</merge>
Yukarıdaki örnek, görünüm kodunu daha kısa hale getirmek ve görünüm hiyerarşisini basitleştirmek için kullanır merge . Düzenler hakkında daha fazla bilgiyi merge burada bulabilirsiniz.
Bir Sahne, aşağıdaki kod örneğinde gösterildiği gibi kapsayıcı nesnesine, Sahnenin düzen dosyasının Kaynak Kimliği'ne ve geçerli Contextöğesine geçirilerek çağrılarak Scene.GetSceneForLayoutoluşturulur:
RelativeLayout container = FindViewById<RelativeLayout> (Resource.Id.container);
Scene scene1 = Scene.GetSceneForLayout(container, Resource.Layout.Scene1, this);
Scene scene2 = Scene.GetSceneForLayout(container, Resource.Layout.Scene2, this);
scene1.Enter();
Düğmeye tıklanması, Android'in varsayılan geçiş değerleriyle animasyon eklediği iki Sahne arasında ters çevrilir:
sceneButton.Click += (o, e) => {
Scene temp = scene2;
scene2 = scene1;
scene1 = temp;
TransitionManager.Go (scene1);
};
Aşağıdaki ekran görüntüsünde animasyondan önceki sahne gösterilmektedir:
Aşağıdaki ekran görüntüsünde animasyondan sonraki sahne gösterilmektedir:
Not
Android Geçişleri kitaplığında, kullanıcı ikinci kez bir Etkinlikte gezindiğinde kullanılarak GetSceneForLayout oluşturulan Sahnelerin bozulmasına neden olan bilinen bir hata vardır.
Sahnelerde Özel Geçişler
Aşağıdaki ekran görüntüsünde gösterildiği gibi, dizinindeki transitionResourcesbir xml kaynak dosyasında özel bir geçiş tanımlanabilir:
Aşağıdaki kod örneği, 5 saniye boyunca animasyon oluşturan bir geçişi tanımlar. Daha fazla animasyon bilgisi için bkz.
<changeBounds
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="5000"
android:interpolator="@android:anim/overshoot_interpolator" />
Aşağıdaki kodda gösterildiği gibi geçiş, Activity içinde TransitionInflater kullanılarak oluşturulur:
Transition transition = TransitionInflater.From(this).InflateTransition(Resource.Transition.transition);
Ardından animasyonu Go başlatan çağrıya yeni geçiş eklenir:
TransitionManager.Go (scene1, transition);
Yarı Saydam Kullanıcı Arabirimi
KitKat, isteğe bağlı yarı saydam durum ve gezinti çubuklarıyla uygulamanızın temalı hale getirilmesi üzerinde daha fazla denetim sağlar. Android temanızı tanımlamak için kullandığınız XML dosyasında sistem kullanıcı arabirimi öğelerinin saydamlığını değiştirebilirsiniz. KitKat aşağıdaki özellikleri tanıtır:
windowTranslucentStatus- True olarak ayarlandığında, üst durum çubuğunu yarı saydam hale getirir.windowTranslucentNavigation- True olarak ayarlandığında, alt gezinti çubuğunu yarı saydam hale getirir.fitsSystemWindows- Üst veya alt çubuğun transcluent olarak ayarlanması, içeriği varsayılan olarak saydam kullanıcı arabirimi öğelerinin altına kaydırır. Bu özelliği olaraktrueayarlamak, içeriğin yarı saydam sistem kullanıcı arabirimi öğeleriyle çakışmasını önlemenin basit bir yoludur.
Aşağıdaki kod, yarı saydam durum ve gezinti çubukları içeren bir tema tanımlar:
<?xml version="1.0" encoding="UTF-8" ?>
<resources>
<style name="KitKatTheme" parent="android:Theme.Holo.Light">
<item name="android:windowBackground">@color/xamgray</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:fitsSystemWindows">true</item>
<item name="android:actionBarStyle">@style/ActionBar.Solid.KitKat</item>
</style>
<style name="ActionBar.Solid.KitKat" parent="@android:style/Widget.Holo.Light.ActionBar.Solid">
<item name="android:background">@color/xampurple</item>
</style>
</resources>
Aşağıdaki ekran görüntüsünde, yarı saydam durum ve gezinti çubukları içeren yukarıdaki tema gösterilmektedir:
Kullanıcı İçeriği
Depolama-Access Framework
Depolama Access Framework (SAF), kullanıcıların görüntüler, videolar ve belgeler gibi depolanan içeriklerle etkileşim kurması için yeni bir yoldur. KitKat, kullanıcılara içeriği işleyecek bir uygulama seçmeye yönelik bir iletişim kutusu sunmak yerine, kullanıcıların verilerine tek bir toplama konumunda erişmesini sağlayan yeni bir kullanıcı arabirimi açar. İçerik seçildikten sonra kullanıcı, içeriği isteyen uygulamaya geri döner ve uygulama deneyimi normal şekilde devam eder.
Bu değişiklik geliştirici tarafında iki eylem gerektirir: İlk olarak, sağlayıcılardan içerik gerektiren uygulamaların yeni bir içerik isteme yöntemine güncelleştirilmiş olması gerekir. İkinci olarak, yeni çerçeveyi kullanmak için bir ContentProvider uygulamaya veri yazan uygulamaların değiştirilmesi gerekir. Her iki senaryo da yeni senaryoya bağlıdır DocumentsProvider API.
DocumentsProvider
KitKat'ta ile ContentProviders etkileşimler sınıfıyla DocumentsProvider soyutlanır. Bu, API aracılığıyla DocumentsProvider erişilebilir olduğu sürece SAF'ın verilerin fiziksel olarak nerede olduğunu umursamadığı anlamına gelir. Yerel sağlayıcıların, bulut hizmetlerinin ve dış depolama cihazlarının tümü aynı arabirimi kullanır ve kullanıcıya ve geliştiriciye kullanıcının içeriğiyle etkileşim kuracak tek bir yer sağlayarak aynı şekilde ele alır.
Bu bölüm, Depolama Access Framework ile içerik yükleme ve kaydetme konularını kapsar.
Sağlayıcıdan İçerik İsteme
KitKat'a Amaç ile ActionOpenDocument SAF kullanıcı arabirimini kullanarak içerik seçmek istediğimizi söyleyebiliriz. Bu, cihazda kullanılabilen tüm içerik sağlayıcılarına bağlanmak istediğimizi gösterir. Yalnızca açılabilen içeriğin (erişilebilir, kullanılabilir içerik) döndürüleceği anlamına gelen öğesini belirterek CategoryOpenablebu Amaca bazı filtrelemeler ekleyebilirsiniz. KitKat, ile içeriğin filtrelenmesine MimeTypede izin verir. Örneğin, aşağıdaki kod görüntüyü belirterek görüntü MimeTypesonuçlarını filtreler:
Intent intent = new Intent (Intent.ActionOpenDocument);
intent.AddCategory (Intent.CategoryOpenable);
intent.SetType ("image/*");
StartActivityForResult (intent, save_request_code);
Çağrı StartActivityForResult , kullanıcının görüntü seçmek için göz atabileceği SAF kullanıcı arabirimini başlatır:
Kullanıcı bir görüntü seçtikten sonra, OnActivityResult seçilen dosyanın değerini Android.Net.Uri döndürür. Aşağıdaki kod örneği kullanıcının görüntü seçimini görüntüler:
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (resultCode == Result.Ok && data != null && requestCode == save_request_code) {
imageView = FindViewById<ImageView> (Resource.Id.imageView);
imageView.SetImageURI (data.Data);
}
}
Sağlayıcıya İçerik Yazma
KitKat, SAF kullanıcı arabiriminden içerik yüklemenin yanı sıra, IÇERIĞI API'yi uygulayan herhangi bir ContentProvider kullanıcı arabirimine DocumentProvider kaydetmenize de olanak tanır. İçerik kaydedilirken ile ActionCreateDocumentbir Intent kullanılır:
Intent intentCreate = new Intent (Intent.ActionCreateDocument);
intentCreate.AddCategory (Intent.CategoryOpenable);
intentCreate.SetType ("text/plain");
intentCreate.PutExtra (Intent.ExtraTitle, "NewDoc");
StartActivityForResult (intentCreate, write_request_code);
Yukarıdaki kod örneği, KULLANıCıNıN dosya adını değiştirmesine ve yeni dosyayı barındıracak bir dizin seçmesine izin vererek SAF kullanıcı arabirimini yükler:
Kullanıcı Kaydet'e bastığında Android.Net.Uri, OnActivityResult ile data.Dataerişilebilen yeni oluşturulan dosyanın geçirilir. URI, yeni dosyaya veri akışı yapmak için kullanılabilir:
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (resultCode == Result.Ok && data != null && requestCode == write_request_code) {
using (Stream stream = ContentResolver.OpenOutputStream(data.Data)) {
Encoding u8 = Encoding.UTF8;
string content = "Hello, world!";
stream.Write (u8.GetBytes(content), 0, content.Length);
}
}
}
Unutmayın: ContentResolver.OpenOutputStream(Android.Net.Uri) bir System.IO.Streamdöndürür, böylece akış işleminin tamamı .NET'te yazılabilir.
Depolama Access Framework ile içerik yükleme, oluşturma ve düzenleme hakkında daha fazla bilgi için Depolama Access Framework için Android belgelerine bakın.
Yazdırma
KitKat'ta yazdırma içeriği, Yazdırma Hizmetleri ve PrintManager'nin kullanıma sunulmasıyla basitleştirilmiştir. KitKat ayrıca Google Cloud Print uygulamalarını kullanarak Google'ın Cloud Print hizmeti API'lerini tam olarak kullanan ilk API sürümüdür.
KitKat ile birlikte gelen cihazların çoğu, WiFi'a ilk bağlandığında Google Cloud Print uygulamasını ve HP Print Service Eklentisiniotomatik olarak indirir. Kullanıcı, Ayarlar > Sistem > Yazdırma'ya giderek cihazının Yazdırma ayarlarını denetleyebiliyor:
Not
Yazdırma API'leri varsayılan olarak Google Cloud Print ile çalışacak şekilde ayarlanmış olsa da Android, geliştiricilerin yeni API'leri kullanarak yazdırma içeriği hazırlamasına ve yazdırmayı işlemek için diğer uygulamalara göndermesine izin verir.
HTML İçeriği Yazdırma
KitKat, ile WebView.CreatePrintDocumentAdapterbir web görünümü için otomatik olarak bir PrintDocumentAdapter oluşturur. Web içeriğini yazdırma, HTML içeriğinin yüklenmesini bekleyen ve Etkinlik'in yazdırma seçeneğini seçenekler menüsünde kullanılabilir hale getirmesini sağlayan ile kullanıcının Yazdır seçeneğini belirleyip üzerinde çağrılar Printyapmasını bekleyen Etkinlik arasında WebViewClient eşgüdümlü bir çabadırPrintManager. Bu bölümde, ekran HTML içeriğini yazdırmak için gereken temel kurulum ele alınır.
Web içeriğini yükleme ve yazdırma için İnternet izni gerektiğini unutmayın:
Yazdır Menü Öğesi
Yazdırma seçeneği genellikle Etkinliğin seçenekler menüsünde görünür. Seçenekler menüsü, kullanıcıların etkinlik üzerinde eylem gerçekleştirmesine olanak tanır. Ekranın sağ üst köşesindedir ve şöyle görünür:
Ek menü öğeleri, Kaynaklar altındaki menüdizininde tanımlanabilir. Aşağıdaki kod, Yazdır adlı bir örnek menü öğesini tanımlar:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_print"
android:title="Print"
android:showAsAction="never" />
</menu>
Etkinlik'teki seçenekler menüsüyle etkileşim, ve OnOptionsItemSelected yöntemleri aracılığıyla OnCreateOptionsMenu gerçekleşir.
OnCreateOptionsMenu, menü kaynakları dizininden Yazdır seçeneği gibi yeni menü öğelerinin ekleneceği yerdir.
OnOptionsItemSelected menüden Yazdır seçeneğini belirleyerek kullanıcıyı dinler ve yazdırmaya başlar:
bool dataLoaded;
public override bool OnCreateOptionsMenu (IMenu menu)
{
base.OnCreateOptionsMenu (menu);
if (dataLoaded) {
MenuInflater.Inflate (Resource.Menu.print, menu);
}
return true;
}
public override bool OnOptionsItemSelected (IMenuItem item)
{
if (item.ItemId == Resource.Id.menu_print) {
PrintPage ();
return true;
}
return base.OnOptionsItemSelected (item);
}
Yukarıdaki kod, HTML içeriğinin durumunu izlemek için adlı dataLoaded bir değişken de tanımlar. WebViewClient tüm içerik yüklendiğinde bu değişkeni true olarak ayarlar; böylece Etkinlik, Yazdır menü öğesini seçenekler menüsüne eklemeyi bilir.
WebViewClient
öğesinin WebViewClient işi, menüsünde yazdırma seçeneği görüntülenmeden önce içindeki verilerin WebView tamamen yüklendiğinden emin olmaktır ve bunu yöntemiyle OnPageFinished yapar. OnPageFinished yüklemeyi tamamlamak için web içeriğini dinler ve Activity'e seçenekler menüsünü ile InvalidateOptionsMenuyeniden oluşturmasını söyler:
class MyWebViewClient : WebViewClient
{
PrintHtmlActivity caller;
public MyWebViewClient (PrintHtmlActivity caller)
{
this.caller = caller;
}
public override void OnPageFinished (WebView view, string url)
{
caller.dataLoaded = true;
caller.InvalidateOptionsMenu ();
}
}
OnPageFinishedayrıca değeri olarak ayarlardataLoaded, bu nedenle OnCreateOptionsMenu yazdır seçeneğinin olduğu menüyü yeniden oluşturabilirsiniz.true
PrintManager
Aşağıdaki kod örneği bir WebViewöğesinin içeriğini yazdırır:
void PrintPage ()
{
PrintManager printManager = (PrintManager)GetSystemService (Context.PrintService);
PrintDocumentAdapter printDocumentAdapter = myWebView.CreatePrintDocumentAdapter ();
printManager.Print ("MyWebPage", printDocumentAdapter, null);
}
Print bağımsız değişken olarak alır: yazdırma işinin adı ("Bu örnekte MyWebPage"), PrintDocumentAdapter belgeyi içerikten oluşturan ve PrintAttributes (null yukarıdaki örnekte). Varsayılan özniteliklerin çoğu senaryoyu işlemesi gerekse de, yazdırılan sayfada içerik düzenlenmesine yardımcı olmak için belirtebilirsiniz PrintAttributes .
Çağrı Print , yazdırma işinin seçeneklerini listeleyen yazdırma kullanıcı arabirimini yükler. Kullanıcı arabirimi, aşağıdaki ekran görüntülerinde gösterildiği gibi kullanıcılara HTML içeriğini yazdırma veya PDF'ye kaydetme seçeneği sunar:
Donanım
KitKat, yeni cihaz özelliklerini barındırmak için çeşitli API'ler ekler. Bunlardan en önemlileri Konak Tabanlı Kart Öykünmesi ve yenidir SensorManager.
NFC'de Konak Tabanlı Kart Öykünmesi
Konak Tabanlı Kart Öykünmesi (HCE), uygulamaların taşıyıcının özel Secure Elementine bağlı kalmadan NFC kartları veya NFC kart okuyucuları gibi davranmasına olanak tanır. HCE'yi ayarlamadan önce, ile PackageManager.HasSystemFeaturecihazda HCE'nin kullanılabilir olduğundan emin olun:
bool hceSupport = PackageManager.HasSystemFeature(PackageManager.FeatureNfcHostCardEmulation);
HCE, hem HCE özelliğinin hem de iznin Nfc uygulamanın AndroidManifest.xmlile kaydedilmesini gerektirir:
<uses-feature android:name="android.hardware.nfc.hce" />
HCE'nin çalışması için HCE'nin arka planda çalışabilmesi ve HCE kullanan uygulama çalışmıyor olsa bile kullanıcının NFC işlemi yapmasıyla başlaması gerekir. HCE kodunu olarak Serviceyazarak bunu gerçekleştirebiliriz. HCE Hizmeti HostApduService , aşağıdaki yöntemleri uygulayan arabirimini uygular:
ProcessCommandApdu - Bir Uygulama Protokolü Veri Birimi (APDU), NFC Okuyucusu ile HCE Hizmeti arasında gönderilen birimdir. Bu yöntem okuyucudan bir ADPU kullanır ve yanıt olarak bir veri birimi döndürür.
OnDeactivated -
HostAdpuServiceHCE Hizmeti artık NFC Okuyucusu ile iletişim kurmadığında devre dışı bırakılır.
Bir HCE Hizmetinin de uygulamanın bildirimine kaydedilmesi ve uygun izinler, amaç filtresi ve meta verilerle donatılması gerekir. Aşağıdaki kod, özniteliği kullanılarak Service Android Bildirimi ile kaydedilen bir HostApduService örnektir (öznitelikler hakkında daha fazla bilgi için Xamarin Android Ile Çalışma Bildirimi kılavuzuna bakın):
[Service(Exported=true, Permission="android.permissions.BIND_NFC_SERVICE"),
IntentFilter(new[] {"android.nfc.cardemulation.HOST_APDU_SERVICE"}),
MetaData("android.nfc.cardemulation.host.apdu_service",
Resource="@xml/hceservice")]
class HceService : HostApduService
{
public override byte[] ProcessCommandApdu(byte[] apdu, Bundle extras)
{
...
}
public override void OnDeactivated (DeactivationReason reason)
{
...
}
}
Yukarıdaki Hizmet, NFC okuyucusunun uygulamayla etkileşim kurması için bir yol sağlar, ancak NFC okuyucusunun bu Hizmetin taramak için ihtiyaç duyduğu NFC kartını öykünen bir uygulama olup olmadığını bilmesinin bir yolu yoktur. NFC okuyucusunun Hizmeti tanımlamasına yardımcı olmak için Hizmete benzersiz bir Uygulama Kimliği (AID) atayabiliriz. Özniteliğiyle kaydedilmiş bir xml kaynak dosyasında HCE Hizmeti ile ilgili diğer meta verilerle MetaData birlikte bir AID belirteceğiz (yukarıdaki kod örneğine bakın). Bu kaynak dosyası bir veya daha fazla YARDıM filtresi belirtir: Bir veya daha fazla NFC okuyucu cihazının AID'lerine karşılık gelen onaltılık biçimde benzersiz tanımlayıcı dizeleri:
<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/hce_service_description"
android:requireDeviceUnlock="false"
android:apduServiceBanner="@drawable/service_banner">
<aid-group android:description="@string/aid_group_description"
android:category="payment">
<aid-filter android:name="1111111111111111"/>
<aid-filter android:name="0123456789012345"/>
</aid-group>
</host-apdu-service>
YARDıM filtrelerine ek olarak, xml kaynak dosyası ayrıca HCE Hizmeti'nin kullanıcıya yönelik bir açıklamasını sağlar, bir AID grubu (ödeme uygulaması yerine "diğer") belirtir ve ödeme uygulaması söz konusu olduğunda kullanıcıya görüntülenecek 260x96 dp başlıktır.
Yukarıda özetlenen kurulum, NFC kartı öykünen bir uygulama için temel yapı taşları sağlar. NFC'nin kendisi, yapılandırmak için birkaç adım daha ve daha fazla test gerektirir. Konak tabanlı Kart Öykünmesi hakkında daha fazla bilgi için Android belge portalına bakın. Xamarin ile NFC kullanma hakkında daha fazla bilgi için Xamarin NFC örneklerine bakın.
Algılayıcılar
KitKat, cihazın algılayıcılarına bir SensorManageraracılığıyla erişim sağlar.
, SensorManager işletim sisteminin sensör bilgilerinin toplu olarak bir uygulamaya teslimini zamanlamasını sağlar ve pil ömrünü korur.
KitKat ayrıca kullanıcının adımlarını izlemek için iki yeni sensör türüyle birlikte sunulur. Bunlar ivmeölçer temelindedir ve şunları içerir:
StepDetector - Kullanıcı bir adım attığında uygulamaya bildirim gönderilir/uyandırılır ve algılayıcı adımın gerçekleştiği zaman için bir zaman değeri sağlar.
StepCounter - Algılayıcı bir sonraki cihaz yeniden başlatma işlemine kadar kullanıcının kaydettiği adım sayısını izler.
Aşağıdaki ekran görüntüsünde adım sayacının nasıl çalıştığını görebilirsiniz:
öğesini çağırarak GetSystemService(SensorService) ve sonucu olarak dönüştürerek bir SensorManageroluşturabilirsinizSensorManager. Adım sayacını kullanmak için üzerinde öğesini çağırın GetDefaultSensorSensorManager. Algılayıcıyı kaydedebilir ve adım sayısındaki değişiklikleri dinleyebilirsiniz. ISensorEventListener arabirimi, aşağıdaki kod örneğinde gösterildiği gibi:
public class MainActivity : Activity, ISensorEventListener
{
float count = 0;
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
SetContentView (Resource.Layout.Main);
SensorManager senMgr = (SensorManager) GetSystemService (SensorService);
Sensor counter = senMgr.GetDefaultSensor (SensorType.StepCounter);
if (counter != null) {
senMgr.RegisterListener(this, counter, SensorDelay.Normal);
}
}
public void OnAccuracyChanged (Sensor sensor, SensorStatus accuracy)
{
Log.Info ("SensorManager", "Sensor accuracy changed");
}
public void OnSensorChanged (SensorEvent e)
{
count = e.Values [0];
}
}
OnSensorChanged , uygulama ön plandayken adım sayısı güncelleştirilirse çağrılır. Uygulama arka plana girerse veya cihaz uykudaysa OnSensorChanged çağrılmaz; ancak, çağrılana kadar UnregisterListener adımlar sayılmaya devam eder.
Algılayıcıyı kaydeden tüm uygulamalarda adım sayısı değerinin kümülatif olduğunu unutmayın. Bu, uygulamanızı kaldırıp yeniden yükleseniz ve değişkeni uygulama başlangıcında 0'da başlatsanız count bile algılayıcı tarafından bildirilen değerin, uygulamanız veya başka biri tarafından algılayıcı kaydedilirken atılan toplam adım sayısı olarak kalacağı anlamına gelir. Aşağıdaki kodda gösterildiği gibi üzerinde çağrısı UnregisterListenerSensorManageryaparak uygulamanızın adım sayacına eklemesini engelleyebilirsiniz:
protected override void OnPause()
{
base.OnPause ();
senMgr.UnregisterListener(this);
}
Cihazın yeniden başlatılması adım sayısını 0 olarak sıfırlar. Uygulamanız, algılayıcıyı veya cihazın durumunu kullanan diğer uygulamalardan bağımsız olarak uygulama için doğru sayıyı bildirdiğinden emin olmak için ek kod gerektirir.
Not
Adım algılama ve sayma api'sinin kitKat ile birlikte gemileri olsa da, tüm telefonlar sensörle donatılmış değildir. algılayıcısının kullanılabilir olup olmadığını kontrol etmek için komutunu çalıştırabilir PackageManager.HasSystemFeature(PackageManager.FeatureSensorStepCounter);veya döndürülen değerinin GetDefaultSensor olmadığından nullemin olabilirsiniz.
Geliştirici Araçları
Ekran Kaydı
KitKat, geliştiricilerin uygulamaları iş başında kaydedebilmesi için yeni ekran kaydı özellikleri içerir. Ekran kaydı, Android SDK'nın bir parçası olarak indirilebilen Android Hata Ayıklama Köprüsü (ADB) istemcisi aracılığıyla kullanılabilir.
Ekranınızı kaydetmek için cihazınızı bağlayın; ardından Android SDK yüklemenizi bulun, platform araçları dizinine gidin ve adb istemcisini çalıştırın:
adb shell screenrecord /sdcard/screencast.mp4
Yukarıdaki komut, varsayılan 4 Mb/sn çözünürlükte varsayılan 3 dakikalık bir video kaydeder. Uzunluğu düzenlemek için --time-limit bayrağını ekleyin. Çözünürlüğü değiştirmek için --bit hızı bayrağını ekleyin. Aşağıdaki komut 8 Mb/sn'de bir dakikalık video kaydeder:
adb shell screenrecord --bit-rate 8000000 --time-limit 60 /sdcard/screencast.mp4
Videonuzu cihazınızda bulabilirsiniz; kayıt tamamlandığında Galerinizde görünür.
Diğer KitKat Eklemeleri
KitKat, yukarıda açıklanan değişikliklere ek olarak şunları yapmanızı sağlar:
Tam Ekran Kullanma - KitKat, içeriğe göz atmak, oyun oynamak ve tam ekran deneyiminden yararlanabilecek diğer uygulamaları çalıştırmak için yeni bir Tam Ekran modu sunar.
Bildirimleri Özelleştir - Sistem bildirimleri hakkında ek ayrıntıları
NotificationListenerService. Bu, bilgileri uygulamanızın içinde farklı bir şekilde sunmanızı sağlar.Yansıtılabilir Kaynaklar - Çizilebilir kaynakların yeni bir kaynağı var
autoMirroredözniteliği, sistemde soldan sağa düzenler için çevirme gerektiren görüntüler için yansıtılmış bir sürüm oluşturduğunu bildirir.Animasyonları Duraklat - ile oluşturulan animasyonları duraklatma ve sürdürme
AnimatorSınıfı.Metni Dinamik Olarak Değiştirme okuma - Yeni metinle dinamik olarak güncelleştirilen kullanıcı arabirimi bölümlerini yeni metinle "canlı bölgeler" olarak belirtin
accessibilityLiveRegionözniteliğini kullanarak yeni metnin erişilebilirlik modunda otomatik olarak okunmasını sağlayın.Ses Deneyimini Geliştirin - Ile parçaları daha yüksek ses yapın
LoudnessEnhancerile bir ses akışının Tepe ve RMS'sini bulunVisualizersınıfını seçin ve ses-video eşitlemesine yardımcı olmak için bir ses zaman damgasından bilgi alın.Özel Aralıkta ContentResolver Eşitleme - KitKat, eşitleme isteğinin gerçekleştirildiği zamana biraz değişkenlik ekler.
ContentResolverçağrısıContentResolver.RequestSyncyaparak ve geçirerek özel bir zamanda veya aralıkta birSyncRequesteşitleyin.Denetleyicileri Ayırt Etme - KitKat'ta, denetleyicilere cihazın
ControllerNumberözelliği aracılığıyla erişilebilen benzersiz tamsayı tanımlayıcıları atanır. Bu, bir oyundaki oyuncuları ayırt etmek daha kolay hale getirir.Uzaktan Kumanda - Hem donanım hem de yazılım tarafında birkaç değişiklikle KitKat, IR vericisi ile donatılmış bir cihazı kullanarak
ConsumerIrServiceuzaktan denetime dönüştürmenize ve yeni ile çevre birimi cihazlarıyla etkileşim kurmanıza olanak tanırRemoteControllerApı 'leri.
Yukarıdaki API değişiklikleri hakkında daha fazla bilgi için lütfen Google Android 4.4 API'lerine genel bakış bölümüne bakın.
Özet
Bu makalede, Android 4.4'te (API Düzeyi 19) kullanılabilen yeni API'lerden bazıları tanıtıldı ve bir uygulamayı KitKat'a geçirmeyle ilgili en iyi yöntemler ele alınmıştır. Geçiş çerçevesi ve temalı yeni seçenekler de dahil olmak üzere kullanıcı deneyimini etkileyen API'lerde yapılan değişiklikleri özetlemektedir. Daha sonra, Depolama-Access Framework ve sınıfının yanı sıra yeni yazdırma API'lerini de kullanıma sunmİşLEMİşTİDocumentsProvider. NFC konak tabanlı kart öykünmesini ve kullanıcının adımlarını izlemek için iki yeni algılayıcı da dahil olmak üzere düşük güçlü sensörlerle nasıl çalışıldığını inceledi. Son olarak, ekran kaydıyla uygulamaların gerçek zamanlı tanıtımlarını yakalamayı gösterdi ve KitKat API değişiklikleri ve eklemelerinin ayrıntılı bir listesini sağladı.















