Android Bildirimi ile çalışma
AndroidManifest.xml, Android platformunda uygulamanızın işlevselliğini ve gereksinimlerini Android'e açıklamanızı sağlayan güçlü bir dosyadır. Ancak, bununla çalışmak kolay değildir. Xamarin.Android, sınıflarınıza özel öznitelikler eklemenize olanak tanıyarak bu zorluğu en aza indirmenize yardımcı olur. Bu öznitelikler sizin için bildirimi otomatik olarak oluşturmak için kullanılır. Hedefimiz, kullanıcılarımızın %99'unun AndroidManifest.xml el ile değiştirmesi gerekmemesidir.
AndroidManifest.xml derleme işleminin bir parçası olarak oluşturulur ve Özellikler/AndroidManifest.xml içinde bulunan XML, özel özniteliklerden oluşturulan XML ile birleştirilir. Sonuçta elde edilen birleştirilmiş AndroidManifest.xml obj alt dizininde bulunur; örneğin, hata ayıklama derlemeleri için obj/Debug/android/AndroidManifest.xml konumunda bulunur. Birleştirme işlemi önemsizdir: XML öğeleri oluşturmak için kod içindeki özel öznitelikleri kullanır ve bu öğeleri AndroidManifest.xml ekler.
Temeller
Derleme zamanında, derlemeler Activity'den türetilen ve [Activity]
öznitelikleri bunlar üzerinde bildirilen sınıflarabstract
için taranır. Daha sonra bildirimi oluşturmak için bu sınıfları ve öznitelikleri kullanır. Örneğin, aşağıdaki kodu göz önünde bulundurun:
namespace Demo
{
public class MyActivity : Activity
{
}
}
Bu, AndroidManifest.xml hiçbir şey oluşturulmamasıyla sonuçlanıyor. Bir <activity/>
öğenin oluşturulmasını istiyorsanız, [Activity]
özel öznitelik:
namespace Demo
{
[Activity]
public class MyActivity : Activity
{
}
}
Bu örnek, aşağıdaki xml parçasının AndroidManifest.xml eklenmesine neden olur:
<activity android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity" />
Özniteliğin [Activity]
türler üzerinde abstract
hiçbir etkisi yoktur; abstract
türler yoksayılır.
Etkinlik Adı
Xamarin.Android 5.1 sürümünden başlayarak etkinliğin tür adı, dışarı aktarılmakta olan türün derleme nitelikli adının MD5SUM değerini temel alır. Bu, aynı tam adın iki farklı derlemeden sağlanmasına izin verir ve paketleme hatası almaz. (Xamarin.Android 5.1'den önce, etkinliğin varsayılan tür adı küçük harfli ad alanından ve sınıf adından oluşturulmuştur.)
Bu varsayılanı geçersiz kılmak ve etkinliğinizin adını açıkça belirtmek istiyorsanız özelliğini kullanın Name
:
[Activity (Name="awesome.demo.activity")]
public class MyActivity : Activity
{
}
Bu örnek aşağıdaki xml parçasını oluşturur:
<activity android:name="awesome.demo.activity" />
Not
Özelliğini yalnızca geriye dönük uyumluluk nedeniyle kullanmanız Name
gerekir, bu nedenle yeniden adlandırma çalışma zamanında tür aramasını yavaşlatabilir. Etkinliğin varsayılan tür adının küçük harfli ad alanına ve sınıf adına dayalı olmasını bekleyen eski kodunuz varsa, uyumluluğu koruma ipuçları için bkz . Android Çağrılabilen Sarmalayıcı Adlandırma .
Etkinlik Başlık Çubuğu
Varsayılan olarak, Android çalıştırıldığında uygulamanıza bir başlık çubuğu verir.
Bunun için kullanılan değerdir /manifest/application/activity/@android:label
.
Çoğu durumda, bu değer sınıf adınızdan farklı olur. Başlık çubuğunda uygulamanızın etiketini belirtmek için özelliğini kullanın Label
.
Örneğin:
[Activity (Label="Awesome Demo App")]
public class MyActivity : Activity
{
}
Bu örnek aşağıdaki xml parçasını oluşturur:
<activity android:label="Awesome Demo App"
android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity" />
Uygulama Seçici'den başlatılabilir
Varsayılan olarak, etkinliğiniz Android'in uygulama başlatıcı ekranında gösterilmez. Bunun nedeni, uygulamanızda büyük olasılıkla birçok etkinlik olması ve her biri için bir simge istemenizdir. Hangisinin uygulama başlatıcısından başlatılabilir olacağını belirtmek için özelliğini kullanın MainLauncher
. Örneğin:
[Activity (Label="Awesome Demo App", MainLauncher=true)]
public class MyActivity : Activity
{
}
Bu örnek aşağıdaki xml parçasını oluşturur:
<activity android:label="Awesome Demo App"
android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Etkinlik Simgesi
Varsayılan olarak, etkinliğinize sistem tarafından sağlanan varsayılan başlatıcı simgesi verilir. Özel simge kullanmak için önce .png Resources/drawable'a ekleyin, Derleme Eylemi'ni AndroidResource olarak ayarlayın, ardından kullanılacak simgeyi belirtmek için özelliğini kullanınIcon
. Örneğin:
[Activity (Label="Awesome Demo App", MainLauncher=true, Icon="@drawable/myicon")]
public class MyActivity : Activity
{
}
Bu örnek aşağıdaki xml parçasını oluşturur:
<activity android:icon="@drawable/myicon" android:label="Awesome Demo App"
android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
İzinler
Android Bildirimi'ne izin eklediğinizde (Android Bildirimine İzin Ekleme bölümünde açıklandığı gibi), bu izinler Özellikler/AndroidManifest.xml'a kaydedilir.
Örneğin, izni ayarlarsanız INTERNET
Özellikler/AndroidManifest.xml öğesine aşağıdaki öğe eklenir:
<uses-permission android:name="android.permission.INTERNET" />
Hata ayıklama derlemeleri, hata ayıklamayı kolaylaştırmak için (ve READ_EXTERNAL_STORAGE
gibi) bazı izinleri otomatik olarak INTERNET
ayarlar. Bu ayarlar yalnızca oluşturulan obj/Debug/android/AndroidManifest.xml ayarlanır ve Gerekli izin ayarlarında etkin olarak gösterilmez.
Örneğin, obj/Debug/android/AndroidManifest.xml adresinde oluşturulan bildirim dosyasını incelerseniz, aşağıdaki ek izin öğelerini görebilirsiniz:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Bildirimin Sürüm derleme sürümünde ( obj/Debug/android/AndroidManifest.xml), bu izinler otomatik olarak yapılandırılmaz . Yayın derlemesine geçmenin uygulamanızın Hata Ayıklama derlemesinde kullanılabilen bir izni kaybetmesine neden olduğunu fark ederseniz, bu izni uygulamanızın Gerekli izinler ayarlarında açıkça ayarladığınızı doğrulayın (bkz. Mac için Visual Studio'de Android Uygulaması Derleme>; bkz. Visual Studio'da Özellikler > Android Bildirimi).
Gelişmiş Özellikler
Amaç Eylemleri ve Özellikleri
Android bildirimi, etkinliğinizin özelliklerini açıklamanız için bir yol sağlar. Bu, Amaçlar ve [IntentFilter]
özel öznitelik. Etkinliğiniz için hangi eylemlerin uygun olduğunu IntentFilter
oluşturucu ve hangi kategorilerin Categories
Özellik. En az bir etkinlik sağlanmalıdır (bu nedenle oluşturucuda etkinlikler sağlanır). [IntentFilter]
birden çok kez sağlanabilir ve her kullanım içinde ayrı <intent-filter/>
bir öğeyle <activity/>
sonuçlanabilir. Örneğin:
[Activity (Label="Awesome Demo App", MainLauncher=true, Icon="@drawable/myicon")]
[IntentFilter (new[]{Intent.ActionView},
Categories=new[]{Intent.CategorySampleCode, "my.custom.category"})]
public class MyActivity : Activity
{
}
Bu örnek aşağıdaki xml parçasını oluşturur:
<activity android:icon="@drawable/myicon" android:label="Awesome Demo App"
android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.SAMPLE_CODE" />
<category android:name="my.custom.category" />
</intent-filter>
</activity>
Uygulama Öğesi
Android bildirimi, tüm uygulamanızın özelliklerini bildirmeniz için bir yol da sağlar. Bu, öğesi ve buna karşılık gelen Application özel özniteliği aracılığıyla <application>
gerçekleştirilir. Bunların Etkinlik başına ayarlar yerine uygulama genelinde (bütünleştirilmiş kod genelinde) ayarlar olduğunu unutmayın. Genellikle, uygulamanızın tamamı için özellikleri bildirir <application>
ve ardından bu ayarları (gerektiğinde) Etkinlik temelinde geçersiz kılarsınız.
Örneğin, uygulamanın hata ayıklanabileceğini, kullanıcı tarafından okunabilir adının Uygulamam olduğunu ve tüm etkinlikler için varsayılan tema olarak stili kullandığını Theme.Light
belirtmek üzere aşağıdaki Application
öznitelik AssemblyInfo.cs eklenir:
[assembly: Application (Debuggable=true,
Label="My App",
Theme="@android:style/Theme.Light")]
Bu bildirim, obj/Debug/android/AndroidManifest.xml içinde aşağıdaki XML parçasının oluşturulmasına neden olur:
<application android:label="My App"
android:debuggable="true"
android:theme="@android:style/Theme.Light"
... />
Bu örnekte, uygulamadaki tüm etkinlikler varsayılan olarak stile göre Theme.Light
ayarlanacaktır. Bir Etkinliğin temasını olarak Theme.Dialog
ayarlarsanız, yalnızca bu Etkinlik stili kullanırken Theme.Dialog
, uygulamanızdaki Theme.Light
diğer tüm etkinlikler varsayılan olarak öğesinde <application>
ayarlandığı gibi stile ayarlanır.
Application
öğesi öznitelikleri yapılandırmanın <application>
tek yolu değildir. Alternatif olarak, öznitelikleri doğrudan <application>
Properties/AndroidManifest.xml öğesine ekleyebilirsiniz. Bu ayarlar obj/Debug/android/AndroidManifest.xml içinde bulunan son <application>
öğeyle birleştirilir. Özellikler/AndroidManifest.xml içeriğinin her zaman özel öznitelikler tarafından sağlanan verileri geçersiz kıldığını unutmayın.
öğesinde <application>
yapılandırabileceğiniz birçok uygulama genelinde öznitelik vardır; bu ayarlar hakkında daha fazla bilgi için ApplicationAttribute'un Genel Özellikler bölümüne bakın.
Özel Özniteliklerin Listesi
- Android.App.ActivityAttribute: /manifest/application/activity XML parçası oluşturur
- Android.App.ApplicationAttribute: /manifest/application XML parçası oluşturur
- Android.App.InstrumentationAttribute: /manifest/instrumentation XML parçası oluşturur
- Android.App.IntentFilterAttribute : //intent-filter XML parçası oluşturur
- Android.App.MetaDataAttribute: //meta-veri XML parçası oluşturur
- Android.App.PermissionAttribute : //permission XML parçası oluşturur
- Android.App.PermissionGroupAttribute: //permission-group XML parçası oluşturur
- Android.App.PermissionTreeAttribute : //permission-tree XML parçası oluşturur
- Android.App.ServiceAttribute : / manifest/application/service XML parçası oluşturur
- Android.App.UsesLibraryAttribute : / manifest/application/uses-library XML parçası oluşturur
- Android.App.UsesPermissionAttribute : / manifest/uses-permission XML parçası oluşturur
- Android.Content.BroadcastReceiverAttribute : /manifest/application/receiver XML parçası oluşturur
- Android.Content.ContentProviderAttribute : /manifest/application/provider XML parçası oluşturur
- Android.Content.GrantUriPermissionAttribute : Bir /manifest/application/provider/grant-uri-permission XML parçası oluşturur