Aracılığıyla paylaş


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_STORAGEgibi) 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.Dialogayarlarsanı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