如何在Xamarin中使用Activity属性android:showForAllUsers?

时间:2017-08-22 22:04:44

标签: xamarin xamarin.android android-manifest

该属性未在Xamarin中实现。这意味着我不能将它声明为我的活动类的属性,就像它应该:

[Activity(Label = "@string/app_name", Theme = "@style/MainTheme.StopAlarm", LaunchMode = Android.Content.PM.LaunchMode.SingleTask, ScreenOrientation = Android.Content.PM.ScreenOrientation.Portrait, NoHistory = true)]
public class StopAlarmActivity : Activity
{
...
}

没有ShowForAllUsers选项。

另一个选项是编辑Properties => AndroidManifest.xml并手动添加活动:

<activity
          android:name=".StopAlarmActivity"
          android:label="@string/app_name"
          android:theme="@style/MainTheme.StopAlarm"
          android:showForAllUsers="true">
</activity>

但是一旦我编译完最终的AndroidManifest.xml文件包含两个声明,手动添加和编译一个来自类声明。

<activity android:name=".StopAlarmActivity" android:label="@string/app_name" android:theme="@style/MainTheme.StopAlarm" android:showForAllUsers="true"></activity>
<activity android:label="@string/app_name" android:launchMode="singleTask" android:noHistory="true" android:screenOrientation="portrait" android:theme="@style/MainTheme.StopAlarm" android:name="md5e24228758d0205525e724fe958bff865.StopAlarmActivity" />

也就是说,看起来唯一的选择是在每次编译后编辑已编译的AndroidManifest.xml文件。这是对问题的重大破坏。

任何其他方式来实现它,我不需要在每次编译应用程序时都依赖它来记住它?

1 个答案:

答案 0 :(得分:1)

Activity属性上,应用Name以避免基于MD5的Java类自动命名:

[Activity(Name = "com.sushihangover.MainActivity")]

在您的清单中,使用与您希望应用于此活动的属性相同的完全限定名称(无缩写点表示法):

<activity
  android:name="com.sushihangover.MainActivity"
  android:showForAllUsers="true"
   android:icon="@mipmap/icon" 
   android:label="MainActivity" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

注意:此活动的所有属性都需要添加到清单中,而不是活动类属性。

最终的清单条目将正确合并:

<activity android:name="com.sushihangover.MainActivity" android:showForAllUsers="true" android:icon="@mipmap/icon" android:label="MainActivity">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>