作为启动器放置的内容:启动器收藏夹的ClassName

时间:2016-04-07 08:15:24

标签: xamarin xamarin.android xamarin.forms

我的客户希望将我开发的应用程序放在他们的启动器中,并且他们要求启动器的包名和类名。 包名是非常简单的,但ClassName不是因为如果我查看清单,类名前面有一个这样的哈希:md599e473470f20dc18f556aff51bcfbcb1.LaunchScreen

那么我必须使用哪个类名来启动发射器,整个或只有类名称LaunchScreen?

由于

1 个答案:

答案 0 :(得分:0)

(如果你提供播放链接,恭喜你进入他们的最爱; - )

正如您所说,包名称很简单,它在清单中定义为package元素的manifest属性:

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

启动器类名称是在Activity C#类属性中标记的类,&#34; MainLauncher = true&#34;

反过来,这会在清单中创建activity属性片段:

<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>

您的班级名称是完整的android:name属性,因为它不以句点开头。这是一个生成的唯一子类标识符,因此在我的示例中,这是完整的类名:

md5d2519388ea1895e3e3594794d2e0c4ce.MainActivity

虽然大多数人永远不会看到此类ID,但我高度建议您覆盖此生成类标识符并使​​用包含您的包名称的点类表示法。

通常,这是通过使用带有句点的BEGINS android:name提供名称来完成的(这是标准的Android类命名101 ;-)但是Xamarin目前支持Android速记样式类名称以点开头,因此您需要将完全限定的包名称与您的类ID名称一起使用。

因此Main Activity属性变为:

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

生成的清单变为:

<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>

我的启动器类名称变为:

com.sushihangover.playscriptstarling2.MyBigBadGameEveryOneShouldPlay

Android文档:

  

声明类名

     

许多元素对应于Java对象,包括应用程序本身(元素)及其主要组件的元素 - activities(),services(),broadcast receiver()和content providers()。

     

如果定义子类,就像组件类(Activity,Service,BroadcastReceiver和ContentProvider)几乎总是那样,子类是通过name属性声明的。名称必须包括完整的包装名称。例如,Service子类可能声明如下:

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

但是,作为简写,如果字符串的第一个字符是句点,则该字符串将附加到应用程序的包名称(由元素的包属性指定)。

以下分配与上述分配相同:

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

启动组件时,Android会创建指定子类的实例。如果未指定子类,则会创建基类的实例。

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

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