如何使用Xamarin Forms为外部应用程序指定完整的android软件包名称?

问题描述 投票:0回答:1

我在使用Xamarin Forms创建小部件配置活动时遇到了麻烦。我认为正在进行的工作是,在编译时,包的名称将被主要活动之类的随机#/ string所代替。但是,如果检查生成的APK,则可以看到<appwidget-provider ... android:configure="my.package.myClass".../>没有更新。我认为应该是<appwidget-provider ... android:configure="randomstring.myClass".../>。因此,我认为这可以防止配置屏幕出现。有没有一种方法可以强制使用Xamarin更新此属性上的包名称?还是有办法在小部件放置期间调用该属性之前在代码中设置此属性?

这是我的配置(软件包名称已简化以帮助调试):

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="288dip"
    android:minHeight="72dip"
    android:resizeMode="horizontal"
    android:minResizeWidth="144dip"
    android:updatePeriodMillis="1000"
    android:initialLayout="@layout/Widget"
    android:previewImage="@drawable/previewImage"
    android:configure="quickclip.QuickClipConfigActivity"

/>
namespace quickclip
{
    [Activity(Label = "QuickClipConfigActivity", Name= "quickclip.QuickClipConfigActivity", Exported=true )]
    [IntentFilter(new string[] { "android.appwidget.action.APPWIDGET_CONFIGURE" })]
    public class QuickClipConfigActivity : Activity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.Setup);
            SetResult(Result.Canceled);


            // Create your application here
        }
    }
}

[Activity]属性的名称字段仅出于调试目的而添加。有或没有它,放置窗口小部件都不会显示配置屏幕,也不会输入活动类(由断点验证),也不显示窗口小部件。但是,如果删除android:configure="my.package.myClass",则可以使小部件正常显示。

android xamarin xamarin.forms android-widget
1个回答
2
投票

如果未明确指定,则Xamarin.Android将计算一些MD5,并使用该MD5为所有Android Callable Wrappers命名空间添加该MD5作为前缀。

为了避免您可以在类型上使用RegisterAttribute

[Register("my.cool.namespace.MyType")]
public class MyType : SomeJavaType
{
}

对于ActivityService,您可以像这样使用NameActivityAttribute中的ServiceAttribute属性:

[Activity(Label = "My Activity", Name = "my.cool.namespace.MyActivity")]
public class MyActivity : Activity
{
}

或者您可以将ActivityAttributeRegisterAttribute组合在一起:

[Register("my.cool.namespace.MyActivity")]
[Activity(Label = "My Activity")]
public class MyActivity : Activity
{
}

这应该会在您的AndroidManifest中产生一个不错的条目,可以从布局文件或其他Apps / Widgets中轻松使用。

© www.soinside.com 2019 - 2024. All rights reserved.