2016-04-07 5 views
0

Mein Client möchte die App, die ich entwickelt, in ihren Launcher Favoriten setzen und sie fragen nach dem Paketnamen und Klassennamen des Launcher. Paketname ist ziemlich einfach, aber Klassenname ist nicht da, wenn ich das Manifest schauen Sie in der Klassenname durch einen Hash wie folgt vorausgeht: md599e473470f20dc18f556aff51bcfbcb1.LaunchScreenWas als Launcher zu setzen ist: Klassenname für Launcher Favorit

Also, was ist der Name der Klasse I für Launcher Favorit verwenden , das Ganze oder nur der Klassenname LaunchScreen?

Dank

Antwort

0

(Congrats on in ihre Favoriten bekommen, sollten Sie einen Play-Link zur Verfügung stellen ;-)

Wie Sie sagen, der Paketname ist einfach, es ist die im Manifest definiert als package Attribut des manifest Element:

<manifest .... package="com.sushihangover.playscriptstarling2" ...> 

der Launcher Klassenname ist die Klasse, in der Activity C# class-Attribut markiert ist, "MainLauncher = true"

Dies wiederum schafft das activity Attribut Fragment im Manifest:

<activity android:icon="@mipmap/icon" android:label="PlayScriptStarling2" android:name="md5d2519388ea1895e3e3594794d2e0c4ce.MainActivity"> 
    <intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

Ihr Klassenname ist das vollständige android:name Attribut, da es mit einer Periode beginnt nicht. Dies ist eine generierte eindeutige Unterklasse Kennung, also in meinem Beispiel hierfür ist die vollständige Klassenname:

md5d2519388ea1895e3e3594794d2e0c4ce.MainActivity 

Während die meisten Leute werden nie diese Klasse ID sehen, ich sehr empfehlen Sie diese Klasse Kennung außer Kraft setzen erzeugen und die Verwendung Punktklassennotation, die Ihren Paketnamen enthält.

Normalerweise wird dies durch die Bereitstellung eines Namens die android:name Verwendung durchgeführt, die mit einem Punkt beginnt (dies ist Standard-Android-Klasse Benennung 101 ;-) aber Xamarin hat derzeit nicht Unterstützung Android Stenografie-Stil Klassennamen w/a beginnen Punkt, so müssen Sie den voll qualifizierten Paketnamen mit Ihrem Klassen-ID-Namen verwenden.

So ist die Hauptaktivität Attribut wird:

[Activity(Label = "PlayScriptStarling2", Name = "com.sushihangover.playscriptstarling2.MyBigBadGameEveryOneShouldPlay", MainLauncher = true, Icon = "@mipmap/icon")] 

Und das erzeugte offenbar wird:

<activity android:icon="@mipmap/icon" android:label="PlayScriptStarling2" android:name="com.sushihangover.playscriptstarling2.MyBigBadGameEveryOneShouldPlay"> 
    <intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

Und mein launcher Klassenname wird:

com.sushihangover.playscriptstarling2.MyBigBadGameEveryOneShouldPlay 

Android Docs:

Deklarieren Klassennamen

Viele Elemente entsprechen Java-Objekte, einschließlich der Elemente für die Anwendung selbst (das Element) und seine Hauptkomponenten - Aktivitäten(), Dienstleistungen(), Rundfunkempfangsgerät() und Content-Anbieter().

Wenn Sie eine Unterklasse wie für die Komponentenklassen (Activity, Service, BroadcastReceiver und ContentProvider) definieren, wird die Unterklasse über ein name-Attribut deklariert. Der Name muss die vollständige Paketbezeichnung enthalten. Zum Beispiel könnte eine Serviceunterklasse wie folgt deklariert werden:

<manifest . . . > 
    <application . . . > 
     <service android:name="com.example.project.SecretService" . . . > 
      . . . 
     </service> 
     . . . 
    </application> 
</manifest> 

jedoch als Abkürzung, wenn das erste Zeichen des Strings eine Periode ist, wird die Zeichenfolge in das Paket des Anwendungsnamen angehängt (wie vom Paketattribut des Elements angegeben).

Die folgende Zuordnung ist das gleiche wie die oben:

<manifest package="com.example.project" . . . > 
    <application . . . > 
     <service android:name=".SecretService" . . . > 
      . . . 
     </service> 
     . . . 
    </application> 
</manifest> 

Wenn eine Komponente ausgehend Android erstellt eine Instanz der genannten Unterklasse. Wenn keine Unterklasse angegeben wird, erstellt sie eine Instanz der Basisklasse.

Ref: http://developer.android.com/guide/topics/manifest/manifest-intro.html

Ref: https://developer.xamarin.com/guides/android/advanced_topics/working_with_androidmanifest.xml/#Intent_Actions_and_Features

+0

Vielen Dank für Ihre vollständige Antwort! –

+0

NP, und noch einmal herzlichen Glückwunsch – SushiHangover

+0

Nun, es ist der Kunde, der das Prestige hat, nicht ich. Es ist für die Spiele dieses Sommers in Brasilien, wenn Sie wissen, was ich meine. Und ich habe gerade den Anfang meines Posts geändert, weil ich nicht einmal weiß, ob ich darüber reden darf ... Danke nochmal für deine schnelle Antwort! –

Verwandte Themen