KitKat özellikleri
Android 4,4 (KitKat), kullanıcılar ve geliştiriciler için bir Cornucopia özelliği ile birlikte yüklenir. Bu kılavuzda, bu özelliklerden bazıları vurgulanmıştır ve KitKat 'den en iyi şekilde emin olmanıza yardımcı olacak kod örnekleri ve uygulama ayrıntıları verilmiştir.
Genel Bakış
"KitKat" olarak da bilinen Android 4,4 (API düzeyi 19), geç 2013 ' de yayımlanmıştır. KitKat aşağıdakiler dahil olmak üzere çeşitli yeni özellikler ve geliştirmeler sunar:
Kullanıcı deneyimi : geçiş çerçevesi, yarı saydam durum ve gezinti çubukları ile kolay animasyonlar ve tam ekran derinlikli modu, Kullanıcı için daha iyi bir deneyim oluşturmaya yardımcı olur.
Kullanıcı içeriği – depolama erişim çerçevesiyle Basitleştirilmiş kullanıcı dosyası yönetimi; iyileştirilmiş yazdırma API 'Leri sayesinde resimleri, Web sitelerini ve diğer içerikleri yazdırma işlemi daha kolay.
Donanım – herhangi BIR uygulamayı NFC Host-Based Card öykünmesi Ile bir NFC kartına dönüştürün; ile düşük güç sensörleri çalıştırın .
Geliştirici Araçları – Android SDK bir parçası olarak sunulan Android Debug Bridge istemcisi ile eylem içindeki uygulamaları ekran kaydı yapın.
Bu kılavuzda, var olan bir Xamarin. Android uygulamasını KitKat 'e geçirmeye yönelik yönergeler ve Xamarin. Android Geliştiricileri için KitKat 'e yönelik yüksek düzey bir genel bakış sunulmaktadır.
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 Manager 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 'e geçirme
Bu bölüm, mevcut uygulamaları Android 4,4 ' e geçirmeye yardımcı olmak için bazı ilk yanıt öğeleri sağlar.
Sistem sürümünü denetle
Uygulamanın daha eski Android sürümleriyle uyumlu olması gerekiyorsa, aşağıdaki kod örneği tarafından gösterildiği gibi, bir sistem sürümü denetiminde KitKat 'e özgü herhangi bir kodu sardığınızdan emin olun:
if (Build.VERSION.SdkInt >= BuildVersionCodes.Kitkat) {
//KitKat only code here
}
Alarm toplu Işleme
Android, bir uygulamayı belirli bir zamanda arka planda uyandırmak için alarm hizmetlerini kullanır. KitKat, güç tasarrufu sağlamak için alarmlar yaparak bu adımları daha ayrıntılı bir şekilde gerçekleştirir. Yani, her uygulamayı tam bir zamanda uyku modundan çıkarmak yerine, KitKat aynı zaman aralığı boyunca uyanma için kayıtlı olan birkaç uygulamayı gruplandırmak ve aynı anda uyanmaları anlamına gelir.
Android 'in belirli bir zaman aralığı boyunca bir uygulamayı uyanmasını söylemek için üzerinde ' i çağırın, SetWindowAlarmManager En düşük ve en yüksek süreyi milisaniye cinsinden, uygulama woönce geçebilecek ve uyandırma sırasında gerçekleştirilecek işlem için geçmesi gerekir.
Aşağıdaki kod, bir yarı saat ve pencere ayarlandığı zamandan itibaren bir saat arasında woolması gereken bir uygulama örneği sağlar:
AlarmManager alarmManager = (AlarmManager)GetSystemService(AlarmService);
alarmManager.SetWindow (AlarmType.Rtc, AlarmManager.IntervalHalfHour, AlarmManager.IntervalHour, pendingIntent);
Bir uygulamayı tam zamanlı olarak uyandırmeye devam etmek için kullanın, SetExact uygulamanın woken tam zamanında geçiş yapın ve gerçekleştirilecek işlem:
alarmManager.SetExact (AlarmType.Rtc, AlarmManager.IntervalDay, pendingIntent);
KitKat artık tam bir yinelenen alarm ayarlamanıza izin vermez. Kullanan uygulamalarSetRepeating ve artık tüm uyarıları el ile tetiklemeniz gerekir.
Harici Depolama
Dış depolama artık iki türe ayrılır-uygulamanıza özel depolama alanı ve birden çok uygulama tarafından paylaşılan veriler. Uygulamanızın dış depolamada belirli bir konumuna okunması ve yazılması özel izin gerektirmez. Paylaşılan depolamada bulunan verilerle etkileşim kurma artık READ_EXTERNAL_STORAGE veya iznini gerektirir WRITE_EXTERNAL_STORAGE . İki tür şöyle sınıflandırılabilir:
Bir yöntemi çağırarak bir dosya veya dizin yolu alıyorsanız
Context, örneğin,GetExternalFilesDirveyaGetExternalCacheDirs- Uygulamanız ek izin gerektirmez.
Bir özelliğe erişerek veya bir yöntemi çağırarak bir dosya veya dizin yolu alıyorsanız
Environment, örneğinGetExternalStorageDirectoryveyaGetExternalStoragePublicDirectory, uygulamanızREAD_EXTERNAL_STORAGEveyaWRITE_EXTERNAL_STORAGEiznini gerektirir.
Not
WRITE_EXTERNAL_STORAGE izni gösterir READ_EXTERNAL_STORAGE , bu nedenle yalnızca bir izin ayarlamanız gerekir.
SMS birleştirme
KitKat, Kullanıcı tarafından seçilen tek bir varsayılan uygulamadaki tüm SMS içeriğini toplayarak Kullanıcı için mesajlaşma basitleştirir. Geliştirici, uygulamayı varsayılan mesajlaşma uygulaması olarak seçilebilir hale getirmekten ve uygulamanın seçilmese de kodda ve hayata göre uygun şekilde davranmasından sorumludur. SMS uygulamanızı KitKat 'a geçme hakkında daha fazla bilgi için, Google 'dan SMS uygulamalarınızı KitKat Için hazırlanıyor kılavuzuna bakın.
WebView uygulamaları
WebView , KitKat içinde bir edinmesine aldı. En büyük değişiklik, ' a içerik yüklemeye yönelik güvenlik eklenmiştir WebView . Eski API sürümlerini hedefleyen birçok uygulamanın beklenen şekilde çalışması gerekir, ancak sınıfı kullanan uygulamaların test edilmesi WebView önemle önerilir. Etkilenen WebView API 'Leri hakkında daha fazla bilgi için android 4,4 belgelerinde Web WebView 'e geçiş yapan Android 'e bakın.
Kullanıcı Deneyimi
KitKat, özellik animasyonlarını işlemeye yönelik yeni geçiş çerçevesi ve tema için bir yarı saydam Kullanıcı Arabirimi seçeneği 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 sahnelerikullanarak geçişleri özelleştirmenize olanak sağlar.
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ştirmenize olanak tanır. Örneğin, aşağıdaki kod örneği şunu kullanırTransitionManager.BeginDelayedTransition gösterme ve gizlemeyi hareketlendirmek için TextView :
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, BeginDelayedTransition çağrıyı bir sistem sürümü denetiminde sarmalayarak bu işlemi daha eski Android sürümleriyle kolayca yapabilirsiniz. Daha fazla bilgi için uygulamanızı KitKat 'ye 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 sonra uygulama gösterilmektedir:
Sonraki bölümde ele alınan sahneler ile geçiş üzerinde daha fazla denetim edinebilirsiniz.
Android sahneleri
Geliştirici, geliştiriciye animasyon üzerinde daha fazla denetim sağlamak için geçiş çerçevesinin bir parçası olarak sunulmuştur. Sahneler Kullanıcı arabiriminde dinamik alan oluşturma: kapsayıcı içindeki XML içeriği için bir kapsayıcı ve birkaç sürüm veya "sahneler" belirtirsiniz ve Android, sahneler arasındaki geçişleri hareketlendirmek için işin geri kalanını yapar. Android sahneleri, geliştirme tarafında en az iş ile karmaşık animasyonlar oluşturmanızı sağlar.
Dinamik içeriği barındıran statik kullanıcı arabirimi öğesi bir kapsayıcı veya sahne tabanıolarak adlandırılır. Aşağıdaki örnek, Android Designer oluşturmak için kullanır RelativeLayoutcontainer :
Örnek düzen Ayrıca, altında adlı bir düğmeyi de tanımlar sceneButtoncontainer . Bu düğme geçişi tetikler.
Kapsayıcının içindeki dinamik içerik iki yeni Android düzeni gerektirir. 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ı ters çevrilen scene2 adlı ikinci bir düzen içeren scene1 adlı bir düzen tanımlar. XML aşağıdaki gibidir:
Scene1. 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, merge Görünüm kodunu daha kısa hale getirmek ve Görünüm hiyerarşisini basitleştirmek için kullanır. Düzenler hakkında daha fazla bilgiyi mergemergebulabilirsiniz.
Scene.GetSceneForLayoutContext Aşağıdaki kod örneğinde gösterildiği gibi kapsayıcı nesne, sahnenin düzen dosyasının kaynak kimliği ve geçerli gibi çağırarak bir sahne oluş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ıkladığınızda iki sahne arasında ters döndürülür. Bu, Android 'in varsayılan geçiş değerleriyle animasyonunu yapar:
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 , bir Kullanıcı bir etkinliğin ikinci kez dolaştığında, oluşturma kullanılarak oluşturulan sahneleri kesintiye neden olan bilinen bir hata vardır. Java geçici çözümü buradaaçıklanmıştır.
Sahnelerde özel geçişler
transitionResources Aşağıdaki ekran görüntüsünde gösterildiği gibi, içindeki dizindeki bir XML kaynak dosyasında özel bir geçiş tanımlanabilir:
Aşağıdaki kod örneği, 5 saniye boyunca animasyona animasyonu olan ve fazla kullanımlı ilişkilendirmeyi kullanan bir geçişi tanımlar:
<changeBounds
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="5000"
android:interpolator="@android:anim/overshoot_interpolator" />
Geçiş, aşağıdaki kodda gösterildiği gibi TransitionInflaterkullanılarak Etkinlik içinde oluşturulur:
Transition transition = TransitionInflater.From(this).InflateTransition(Resource.Transition.transition);
Ardından yeni geçiş, animasyonu Go başlayan çağrıya eklenir:
TransitionManager.Go (scene1, transition);
Saydam Kullanıcı Arabirimi
KitKat, isteğe bağlı yarı saydam durum ve gezinti çubuklarıyla uygulamanıza theming üzerinde daha fazla denetim sağlar. Android temanızı tanımlamak için aynı XML dosyasındaki sistem kullanıcı arabirimi öğelerinin saydamlığını değiştirebilirsiniz. KitKat aşağıdaki özellikleri tanıtır:
windowTranslucentStatus- True olarak ayarlanırsa üst durum çubuğunu saydam yapar.windowTranslucentNavigation- True olarak ayarlanırsa alt gezinti çubuğunu saydam yapar.fitsSystemWindows- Üst veya alt çubuğu geçici olarak ayarlayan içerikler varsayılan olarak saydam kullanıcı arabirimi öğelerinin altına kaydırr. Bu özelliği olarak ayarlama, içeriğin saydam sistem kullanıcı arabirimi öğeleriyle çakışmasınıtrueönlemenin basit bir yoludur.
Aşağıdaki kod, saydam durum ve gezinti çubuklarıyla 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, yukarıdaki tema yarı saydam durum ve gezinti çubuklarıyla gösterilmiştir:
Kullanıcı İçeriği
Storage-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 yol sağlar. KitKat, kullanıcılara içeriği işlemek için bir uygulama seçmek için bir iletişim kutusu sunmak yerine, kullanıcıların verilerine tek bir toplama konumda erişmesini sağlayan yeni bir kullanıcı arabirimi açar. İçerik seçildikten sonra kullanıcı, içeriği talep eden uygulamaya geri döner ve uygulama deneyimi normal şekilde devam eder.
Bu değişiklik için geliştirici tarafında iki eylem gerekir: öncelikle sağlayıcılardan içerik gerektiren uygulamaların içerik isteği için yeni bir yolla güncelleştirilmiş olması gerekir. İkincisi, veri yazan uygulamaların yeni ContentProvider çerçeveyi kullanmak için değiştirilmeleri gerekir. Her iki senaryo da yeniDocumentsProvider API.
DocumentsProvider
KitKat'ta ile ContentProviders etkileşimler sınıfıyla DocumentsProvider soyuttur. Bu, API aracılığıyla erişilebilir olduğu sürece, SAF'ın verilerin fiziksel olarak nerede olduğunu önemser. DocumentsProvider Yerel sağlayıcılar, bulut hizmetleri ve dış depolama cihazlarının hepsi aynı arabirimi kullanır ve kullanıcıya ve geliştiriciye kullanıcının içeriğiyle etkileşim kurmak için tek bir yer sağlayarak aynı şekilde kabul edilir.
Bu bölüm, Depolama Access Framework ile içerik yükleme ve kaydetmeyi kapsar.
Sağlayıcıdan İçerik İsteği
KitKat'a Amaç ile SAF kullanıcı arabirimini kullanarak içerik seçmek istediğinize dair bir bilgi edinebilir ve bu da cihaz için kullanılabilir olan tüm içerik sağlayıcılarına bağlanmak ActionOpenDocument istediğinize işaret eder. Bu Amace filtre eklemek için belirtebilirsiniz. Bu, yalnızca açılabilir içeriğin (erişilebilir, kullanılabilir içerik) döndürülecek CategoryOpenable olması anlamına gelir. KitKat ayrıca ile içeriğin filtresini de MimeType sağlar. Örneğin aşağıdaki kod, görüntüsünü belirterek görüntü sonuçlarını MimeType filtreler:
Intent intent = new Intent (Intent.ActionOpenDocument);
intent.AddCategory (Intent.CategoryOpenable);
intent.SetType ("image/*");
StartActivityForResult (intent, save_request_code);
çağrısı, kullanıcının bir görüntü seçmek için göz atarak SAF kullanıcı StartActivityForResult arabirimini başlatması gerekir:
Kullanıcı bir görüntü seçtikten OnActivityResult sonra, seçilen Android.Net.Uri dosyanın 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üklemeye ek olarak, API'yi uygulayan ContentProvider herhangi bir kullanıcıya içerik kaydetmenizi DocumentProvider de sağlar. İçerik kaydederek ile bir IntentActionCreateDocument kullanı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ı bir dizin seçmesine izin vererek SAF kullanıcı arabirimini yükler:
Kullanıcı Kaydet'e bassa, ile Android.Net.Uri erişilebilen yeni oluşturulan dosyanın geçirilir. data.Data Yeni dosyaya veri akışı yapmak için uri 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);
}
}
}
Aşağıdakilere dikkat edin:ContentResolver.OpenOutputStream(Android.Net.Uri) , akış System.IO.Stream işleminin tamamının .NET'te yazılana kadar bir döndürür.
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
Yazdırma Hizmetleri ve girişleriyle KitKat'ta içeriği yazdırma işlemi basitleştirilir. KitKat ayrıca Google Cloud Print uygulamasını kullanarak Google'ın Cloud Print hizmeti API'lerini tam olarak kullanan ilk API sürümüdür. KitKat ile birlikte gelen çoğu cihaz, WiFi'ye ilk kez bağlanarak Google Cloud Print uygulamasını ve HP Print ServiceEklentisini otomatik olarak indirir. Kullanıcı, Sistem Yazdırması'na giderek cihazın yazdırma ayarlarını Ayarlar > olabilir:
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ını ve yazdırmayı işlemek için diğer uygulamalara göndermesini sağlar.
HTML İçeriğini Yazdırma
KitKat, ile bir PrintDocumentAdapter web görünümü için otomatik olarak bir WebView.CreatePrintDocumentAdapter oluşturur. Web içeriğini yazdırma, HTML içeriğinin yüklenmesini bekler ve Etkinlik'e seçenekler menüsünde yazdırma seçeneğinin kullanılabilir hale geleceğini ve kullanıcının Yazdır seçeneğini seçmesini ve üzerinde çağrısı yapmasını sağlayan Etkinlik'i sağlayan arasında eşgüdümli bir WebViewClientPrintPrintManager çalışmadır. Bu bölüm, ekran HTML içeriğini yazdırmak için gereken temel kurulumu kapsar.
Web içeriğini yükleme ve yazdırma için İnternet izninin gerekli olduğunu unutmayın:
Menü Öğesini Yazdır
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 bir Etkinlik üzerinde eylemler gerçekleştirmelerini sağlar. Ekranın sağ üst köşesindedir ve şu şekilde görünür:
Ek menü öğeleri, Kaynaklar altındaki menü dizinindetanı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'te seçenekler menüsüyle etkileşim ve yöntemleri OnCreateOptionsMenuOnOptionsItemSelected aracılığıyla gerçekleşir.
OnCreateOptionsMenu , menü kaynakları dizininden Yazdır seçeneği gibi yeni menü öğelerinin OnCreateOptionsMenu yerdir.
OnOptionsItemSelected , menüden Yazdır seçeneğini seçen 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 dataLoaded izlemek için adlı bir değişken de tanımlar. , tüm içerik yüklendiğinde bu değişkeni true olarak ayarlar, bu nedenle Etkinlik, Seçenekler menüsüne WebViewClient Yazdır menü öğesini eklemeyi bilir.
WebViewClient
öğesinin görevi, öğesinde bulunan verilerin, yöntemiyle yaptığı menüde yazdırma seçeneği görünene WebViewClientWebView kadar tamamen yüklendiğinden emin OnPageFinished olmaktır. OnPageFinished web içeriğinin yüklenmesinin bitip bitip Etkinlik'e seçenekler menüsünü ile yeniden oluşturulmasını InvalidateOptionsMenu 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 ();
}
}
OnPageFinished ayrıca değeri dataLoaded olarak true ayarlar, böylece OnCreateOptionsMenu menüyü Yazdır seçeneğiyle yeniden oluşturabilirsiniz.
PrintManager
Aşağıdaki kod örneği bir içeriğini WebView 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şi için bir ad ("bu örnekte MyWebPage"), birPrintDocumentAdapter belgeyi içerikten oluşturan vePrintAttributes ( null yukarıdaki örnekte). Varsayılan öznitelikler PrintAttributes çoğu senaryoyu işlemesi gerekse de, yazdırılan sayfada içerikler için içerik ayarlarına yardımcı olmak için belirtebilirsiniz.
çağrısı Print yazdırma işinin seçeneklerini listeleen yazdırma kullanıcı arabirimini yükler. Kullanıcı arabirimi, aşağıdaki ekran görüntülerde gösterildiği gibi kullanıcılara HTML içeriğini pdf biçiminde yazdırma veya kaydetme seçeneği sunar:
Donanım
KitKat, yeni cihaz özelliklerine uyum sağlayacak çeşitli API'ler ekler. Bunların en önemlileri, Host-Based Öykünmesi ve SensorManager yenileridir.
NFCHost-Based de Kart Öykünmesi
Host-Based Öykünmesi (HCE), uygulamaların, taşıyıcının özel Secure Element'ine güvenmeden NFC kartları veya NFC kart okuyucuları gibi davranmasına olanak sağlar. HCE'yi ayarlamadan önce HCE'nin ile cihazda kullanılabilir olduğundan emin PackageManager.HasSystemFeature olun:
bool hceSupport = PackageManager.HasSystemFeature(PackageManager.FeatureNfcHostCardEmulation);
HCE, hem HCE özelliğinin hem de Nfc iznin uygulamanın kaydına sahip olması AndroidManifest.xml gerekir:
<uses-feature android:name="android.hardware.nfc.hce" />
Çalışmak için, HCE'nin arka planda çalıştırabilmesi ve HCE kullanan uygulama çalışmıyor olsa bile kullanıcının NFC işlemi yapmak için başlatabilmesi gerekir. HCE kodunu olarak yazarak bunu Service gerçekleştirebilirsiniz. HCE Hizmeti, HostApduService aşağıdaki yöntemleri uygulayan arabirimini kullanır:
ProcessCommandApdu - NFC Okuyucusu ile HCE Hizmeti arasında gönderilen bir Uygulama Protokolü Veri Birimi (APDU). Bu yöntem, okuyucudan bir ADPU kullanır ve yanıt olarak bir veri birimi döndürür.
Ondevre dışı bırakıldı - HCE hizmeti artık NFC okuyucusu ile iletişim kurmadığında devre dışı bırakılır.
Bir HCE hizmeti Ayrıca uygulamanın bildirimine kaydolmalıdır ve uygun izinler, amaç filtresi ve meta veriler ile tasarlanmalıdır. Aşağıdaki kod, HostApduService özniteliğini kullanan Android bildirimine kayıtlı bir örneğidir Service . (öznitelikler hakkında daha fazla bilgi Için, HostApduService hakkında daha fazla bilgi için bkz. Xamarin with Android bildirim Kılavuzu):
[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 okuyucunun uygulamayla etkileşim kurması için bir yol sağlar, ancak NFC okuyucusu bu hizmetin taramak için gereken NFC kartını öykünmesinin mümkün olup olmadığını bilmenin bir yolu yoktur. NFC Reader 'ın hizmeti belirlemesine yardımcı olmak için hizmeti benzersiz bir uygulama kimliği (yardım)olarak atayabiliriz. HCE hizmeti hakkındaki diğer meta verilerle birlikte bir yardım ve özniteliğe kayıtlı bir XML kaynak dosyasında MetaData (Yukarıdaki kod örneğine bakın) bir yardım belirledik. Bu kaynak dosyası bir veya daha fazla yardım filtresi-benzersiz tanımlayıcı dizelerini bir veya daha fazla NFC okuyucu cihazıyla ilgili Yardımlığa karşılık gelen onaltılık biçimde belirtir:
<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>
XML kaynak dosyası, yardım filtrelerine ek olarak HCE hizmeti için kullanıcıya yönelik bir açıklama da sağlar, bir yardım grubunu (ödeme uygulaması "diğer") ve bir ödeme uygulaması durumunda kullanıcıya görüntülenecek bir 260x96 DP başlığını belirtir.
Yukarıda özetlenen kurulum, NFC kartına öykünen bir uygulama için temel yapı taşları sağlar. NFC 'nin kendisi için birkaç adım daha ve daha fazla test gerekir. Ana bilgisayar tabanlı kart öykünmesi hakkında daha fazla bilgi için, Android belge portalınabakın. Xamarin ile NFC kullanma hakkında daha fazla bilgi için XAMARIN NFC örneklerinegöz atın.
Sensörlerden
KitKat, cihaz sensörlerinden bir ile erişim sağlar SensorManager .
, SensorManager İşletim sisteminin algılayıcı bilgilerinin bir uygulamaya toplu olarak teslim edilmesini, pil ömrünü koruyarak zamanlamasını sağlar.
KitKat Ayrıca, kullanıcının adımlarını izlemek için iki yeni algılayıcı türüyle birlikte gelir. Bunlar, ivometreyi temel alır ve şunları içerir:
Stepalgılayıcı -Kullanıcı bir adım sürerse uygulama bilgilendirilir/woken algılayıcı, adımın gerçekleştiği zaman için bir saat değeri sağlar.
Stepcounter -bir sonraki cihazın yeniden başlatılmasından öncealgılayıcı kaydedildikten sonra kullanıcının aldığı adım sayısını izler.
Aşağıdaki ekran görüntüsünde, işlem içindeki adım sayacı gösterilmektedir:
SensorManagerSonucunu çağırarak ve olarak ayarlayarak oluşturabilirsiniz GetSystemService(SensorService)SensorManager . Adım sayacını kullanmak için üzerinde öğesini çağırın GetDefaultSensorSensorManager . Algılayıcısı kaydedebilir ve adım sayısı içindeki değişiklikleri dinlemek içinISensorEventListener Aşağıdaki kod örneğinde gösterildiği gibi arabirim:
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 planda olduğunda adım sayısı güncelleştirildiğinde çağrılır. Uygulama arka plana girerse veya cihaz uyku moduna girerse, OnSensorChanged çağrılmaz; ancak, bu adımlar çağrılana kadar sayılmasına devam edecektir UnregisterListener .
Adım sayısı değerinin algılayıcı kaydeden tüm uygulamalarda birikimliolduğunu aklınızda bulundurun. Bu, uygulamanızı kaldırsanız ve yeniden yükledikten ve bu count değişkeni uygulama başlangıcında 0 ' da başlattığınızda, algılayıcı tarafından bildirilen değer, sensörde, uygulamanız ya da başka bir işlem olup olmadığı sırada gerçekleştirilen adımların toplam sayısını sürdürür. UnregisterListenerAşağıdaki kodla gösterildiği gibi, uygulamanızın ' de öğesini çağırarak adım sayacına eklemesini engelleyebilirsiniz SensorManager :
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ısı veya cihazın durumunu kullanan diğer uygulamalardan bağımsız olarak, uygulama için doğru bir sayı bildirdiğinden emin olmak için ek kod gerektirir.
Not
Adım algılama ve sayma API 'SI KitKat ile birlikte sevk edilirken, tüm telefonlar sensörle birlikte kullanılamaz. Sensörin çalışır durumda olup olmadığını denetleyebilir PackageManager.HasSystemFeature(PackageManager.FeatureSensorStepCounter); veya döndürülen değerinin olup olmadığını kontrol edebilirsiniz GetDefaultSensornull .
Geliştirici Araçları
Ekran kaydı
KitKat, geliştiricilerin uygulamaları eylemde kaydedebilmeleri için yeni ekran kaydı özellikleri içerir. Ekran kaydına, Android SDK bir parçası olarak indirilebilen Android Debug Bridge (ADB) istemcisiyle erişilebilir.
Ekranınızı kaydetmek için cihazınızı bağlayın; sonra 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 3 dakikalık videoyu varsayılan olarak 4Mbps çözünürlükte 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 Mbps hızında bir dakika-uzun video kaydeder:
adb shell screenrecord --bit-rate 8000000 --time-limit 60 /sdcard/screencast.mp4
Videonuzu cihazınızda bulabilirsiniz; kayıt tamamlandığında galeriniz görüntülenir.
Diğer KitKat eklemeleri
Yukarıda açıklanan değişikliklere ek olarak, KitKat şunları yapmanıza olanak sağlar:
Tam ekran -KitKat, içeriğe gözatmak, oyun oynamak ve tam ekran deneyiminden faydalanabilecek diğer uygulamaları çalıştırmak için yeni bir modern mod sunar.
Bildirimleri özelleştirme -sistem bildirimleri hakkında daha fazla bilgi alın
NotificationListenerService. Bu, bilgileri uygulamanızın içinde farklı bir şekilde sunmanıza olanak sağlar.Drawable kaynakları yansıtma -drawable kaynakları yeni bir
autoMirroredsisteme, soldan sağa düzenler için bir çevirme gerektiren görüntüler için yansıtılmış bir sürüm oluşturulmasını söyleyen özniteliği.Animasyonları duraklatma -ile oluşturulan animasyonları duraklatma ve devam ettirme
Animatorsınıfı.Dinamik olarak değişen metin okuma -yeni metinle birlikte dinamik olarak güncelleştiren Kullanıcı arabiriminin parçalarını yeni metinle birlikte "canlı bölgeler"
accessibilityLiveRegionözniteliği, bu nedenle yeni metin erişilebilirlik modunda otomatik olarak okunacaktır.Ses deneyimini geliştirin -
LoudnessEnhancer, bir ses akışının tepe ve RMS 'siniVisualizerses video eşitlemesine yardımcı olması için birVisualizerbilgi alın.ContentResolver 'ı özel aralıkta Eşitle -KitKat, eşitleme isteğinin gerçekleştirildiği zamana biraz değişkenlik ekler.
ContentResolver' A çağırarak ve geçirerek özel bir zaman veya Aralık eşitleyinContentResolver.RequestSyncSyncRequest.Denetleyiciler arasında ayrım yapın-KitKat içinde, denetleyicilerin, cihazın özelliği aracılığıyla erişilebilen benzersiz tamsayı tanımlayıcıları atanır . Bu, oyuncuları bir oyunda anlatmayı kolaylaştırır.
Uzaktan denetim -hem donanım hem de yazılım tarafında birkaç değişiklik Ile, KitKat kullanarak bir CIHAZı bir IR vericisinde uzak bir denetime çevirip Yeni
RemoteControllerGetVersionEx.
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 ' de (API düzeyi 19) sunulan yeni API 'lerden bazıları ve bir uygulamayı KitKat 'e geçiş yaparken kapsanan en iyi uygulamalar tanıtılmıştır. Geçiş çerçevesi ve yeni Temaseçenekleri de dahil olmak üzere, API 'lerde Kullanıcı deneyimini etkileyen değişiklikler açıklanmıştır. daha sonra, Depolama erişim çerçevesini ve sınıfını ve yeni yazdırma apı 'lerinikullanıma sunmuştur. Araştırılan ana bilgisayar tabanlı kart öykünmesinin yanı sıra kullanıcının adımlarını izlemeye yönelik iki yeni algılayıcı dahil düşük güç sensörlerlenasıl çalışayor. Son olarak, ekran kaydıylauygulamaların gerçek zamanlı tanıtımları yakaladığı ve KitKat API değişikliklerinin ve eklemelerinin ayrıntılı bir listesini sağlamış.















