Android bildirimiyle çalışma
AndroidManifest.xml , Android platformunda uygulamanızın işlevlerini ve gereksinimlerini açıklamanıza olanak tanıyan güçlü bir dosyadır. Ancak, ile çalışmak kolay değildir. Xamarin. Android, sınıflarınıza özel öznitelikler eklemenize izin vererek bu sorunu en aza indirmenize yardımcı olur. Bu, daha sonra size otomatik olarak bildirim oluşturmak için kullanılır. Hedefimiz, kullanıcılarımızın %99 ' un AndroidManifest.xmlel ile değiştirmesi gerekmez.
AndroidManifest.xml yapı sürecinin 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.xmlobj alt dizininde yer alır; Örneğin, hata ayıklama derlemeleri için obj/Debug/Android/AndroidManifest.xml konumunda bulunur. Birleştirme işlemi önemsiz: XML öğeleri oluşturmak için kod içinde özel öznitelikler kullanır ve bu öğeleri AndroidManifest.xmlekler .
Temeller
Derleme zamanında derlemeler, abstractabstract türetilen ve [Activity] özniteliği üzerinde bildirildiği sınıflar için taranır. Daha sonra bildirimi derlemek 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.xmlhiçbir şeyin üretilmemesi sonucunu vermez. Bir <activity/> öğenin oluşturulmasını istiyorsanız, şunu kullanmanız gerekir[Activity] Özel öznitelik:
namespace Demo
{
[Activity]
public class MyActivity : Activity
{
}
}
Bu örnek, aşağıdaki XML parçasının AndroidManifest.xmleklenmesine neden olur:
<activity android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity" />
[Activity]Özniteliğin türler üzerinde hiçbir etkisi yoktur abstract ; abstract türler yoksayılır.
Etkinlik Adı
Xamarin. Android 5,1 ile başlayarak, bir etkinliğin tür adı, dışarıya aktarılmakta olan türün derleme nitelikli adının MD5SUM dayanır. Bu, iki farklı derlemeden aynı tam nitelikli adın sağlanmasını sağlar ve paketleme hatası almaz. (Xamarin. Android 5,1 ' den önce, etkinliğin varsayılan tür adı, küçük harf olarak kullanılan 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, Name özelliğini kullanın:
[Activity (Name="awesome.demo.activity")]
public class MyActivity : Activity
{
}
Bu örnek, aşağıdaki XML parçasını üretir:
<activity android:name="awesome.demo.activity" />
Not
NameBu özelliği yalnızca geriye dönük uyumluluk nedenleriyle kullanmanız gerekir, çünkü bu yeniden adlandırma, çalışma zamanında tür aramayı yavaşlatabilir. Etkinliğin varsayılan tür adının küçük harfli ad alanına ve sınıf adına dayanmasını bekleyen eski bir kodunuz varsa, Uyumluluk sağlama hakkında ipuçları için Android çağrılabilir sarmalayıcı adlandırma bölümüne bakın.
Etkinlik başlık çubuğu
Varsayılan olarak, Android uygulamaya çalışırken bir başlık çubuğu sağlar.
Bunun için kullanılan değer /manifest/application/activity/@android:label .
Çoğu durumda, bu değer sınıfınızın adından farklı olacaktır. Başlık çubuğunda uygulamanızın etiketini belirtmek için Label özelliğini kullanın.
Örnek:
[Activity (Label="Awesome Demo App")]
public class MyActivity : Activity
{
}
Bu örnek, aşağıdaki XML parçasını üretir:
<activity android:label="Awesome Demo App"
android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity" />
Uygulama Seçicnden launchable
Varsayılan olarak, etkinliğinizi Android 'in uygulama başlatıcısı ekranında gösterilmez. Bunun nedeni, uygulamanızda çok sayıda etkinlik olması ve her biri için bir simgenin olmasını istemezsiniz. Uygulama başlatıcısında hangi birinin launcholması gerektiğini belirtmek için MainLauncher özelliğini kullanın. Örnek:
[Activity (Label="Awesome Demo App", MainLauncher=true)]
public class MyActivity : Activity
{
}
Bu örnek, aşağıdaki XML parçasını üretir:
<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ğinizi sistem tarafından sağlanan varsayılan Başlatıcı simgesi olarak verilir. Özel bir simge kullanmak için öncelikle .pngkaynaklara/drawableöğesine ekleyin, derleme eylemini AndroidResourceolarak ayarlayın ve ardından kullanılacak simgeyi belirtmek için özelliğini kullanın. Örnek:
[Activity (Label="Awesome Demo App", MainLauncher=true, Icon="@drawable/myicon")]
public class MyActivity : Activity
{
}
Bu örnek, aşağıdaki XML parçasını üretir:
<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 bildirimine izinler eklediğinizde ( Android bildiriminde Izinleri eklemebölümünde açıklandığı gibi), bu izinler Özellikler/AndroidManifest.xmlkaydedilir.
Örneğin, INTERNET izin ayarlarsanız, şu öğe INTERNETeklenir:
<uses-permission android:name="android.permission.INTERNET" />
Hata ayıklama derlemeleri hata ayıklamayı daha kolay hale getirmek için bazı izinleri otomatik olarak ayarlar (örneğin INTERNET , ve READ_EXTERNAL_STORAGE ) – Bu ayarlar yalnızca oluşturulan INTERNET olarak ayarlanır ve READ_EXTERNAL_STORAGE ayarlarında etkin olarak gösterilmez.
Örneğin, obj/Debug/Android/AndroidManifest.xmlkonumunda oluşturulan bildirim dosyasını incelerseniz, aşağıdaki eklenmiş izin öğelerini görebilirsiniz:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Bildirimin yayın derlemesi sürümünde ( obj/Debug/Android/AndroidManifest.xml), bu izinler otomatik olarak yapılandırılmaz. bir yayın derlemesine geçiş yapmak, uygulamanızın hata ayıklama derlemesinde bulunan bir izni kaybetmesine neden olur, bu izni uygulamanızın gerekli izinler ayarlarında açıkça ayarlamış olduğunuzu doğrulayın (bkz. Mac için Visual Studio android uygulaması oluşturma Visual Studio).
Gelişmiş Özellikler
Amaç eylemleri ve özellikleri
Android bildirimi, etkinliğinizin yeteneklerini açıklamanız için bir yol sağlar. Bu işlem, amaçlar ve[IntentFilter] Özel öznitelik. Etkinlikleriniz için hangi eylemlerin uygun olduğunu şu şekilde belirtebilirsinizIntentFilter oluşturucuya ve hangi kategorilerin uygun olduğunuCategories özelliði. En az bir etkinliğin sağlanması gerekir (Bu neden, oluşturucunun oluşturucuda sağlanması). [IntentFilter] birden çok kez bulunabilir ve her kullanım sonuçları içindeki ayrı bir öğe ile sonuçlanır <intent-filter/><activity/> . Örnek:
[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ı üretir:
<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 Ayrıca, uygulamanızın bütünü için özellikler bildirmeniz için bir yol sağlar. Bu, <application> öğesi ve onun karşılık gelen <application> özel özniteliği aracılığıyla yapılır. Bunların etkinlik başına ayarlar yerine uygulama genelinde (bütünleştirilmiş kod genelinde) ayarlar olduğunu unutmayın. Genellikle, <application> Tüm uygulamanız için özellikleri bildirir ve ardından bu ayarları (gerektiğinde) Etkinlik başına temelinde geçersiz kılabilirsiniz.
Örneğin, aşağıdaki öznitelik, Application uygulamanın ayıklanamayacağını, Kullanıcı tarafından okunabilen adının Uygulamamolduğunu ve tüm etkinlikler için varsayılan tema olarak stili kullandığını belirtmek için Application öğesine eklenir :
[assembly: Application (Debuggable=true,
Label="My App",
Theme="@android:style/Theme.Light")]
Bu bildirim, aşağıdaki XML parçasının obj/Debug/Android/AndroidManifest.xmliçinde 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 değişir Theme.Light . Bir etkinliğin temasını olarak ayarlarsanız Theme.Dialog , Theme.Dialog uygulamanızdaki diğer tüm etkinlikler, Theme.Light öğesinde ayarlandığı şekilde varsayılan olarak stile göre yalnızca bu etkinlik stili kullanacaktır <application> .
ApplicationÖğe, öznitelikleri yapılandırmanın tek yolu değildir <application> . Alternatif olarak, öznitelikleri doğrudan <application><application>öğesine ekleyebilirsiniz. Bu ayarlar, <application><application>içinde bulunan son öğe ile birleştirilir. Özelliklerin/AndroidManifest.xml içeriğinin her zaman özel öznitelikler tarafından belirtilen verileri geçersiz kıldığını unutmayın.
Öğesinde yapılandırabileceğiniz birçok uygulama genelinde öznitelik vardır <application> ; Bu ayarlar hakkında daha fazla bilgi Için applicationattribute'un <application> bölümüne bakın.
Özel özniteliklerin listesi
- Android. app. ActivityAttribute : /manifest/Application/Activity XML parçası oluşturur
- Android. app. ApplicationAttribute : bir /manifest/Application XML parçası oluşturur
- Android. app. ınstrumentationattribute : /manifest/Instrumentation XML parçası oluşturur
- Android. app. ıntfilterattribute : bir TINT-Filter XML parçası oluşturur
- Android. app. MetaDataAttribute : bir /bir/-meta veri XML parçası oluşturur
- Android. app. PermissionAttribute : bir /-izin XML parçası oluşturur
- Android. app. PermissionGroupAttribute : bir //-Grup XML parçası oluşturur
- Android. app. PermissionTreeAttribute : bir ypermission-Tree XML parçası oluşturur
- Android. app. ServiceAttribute : /manifest/Application/Service XML parçası oluşturur
- Android. app. Uıseskütüphanaryattribute : /manifest/Application/uses-Library XML parçası oluşturur
- Android. app. Uısespermissionattribute : bir /manifest/uses-Permission XML parçası oluşturur
- Android. Content. BroadcastReceiverAttribute : /manifest/Application/ahize XML parçası oluşturur
- Android. Content. ContentProviderAttribute : bir /manifest/Application/Provider XML parçası oluşturur
- Android. Content. GrantUriPermissionAttribute : /manifest/Application/Provider/Grant-Uri-Permission XML parçası oluşturur