1

我正在尝试研究如何使用 MAUI 在 Android 中连接 Share Intent。

我是否遇到了预览错误,或者我没有正确执行?

我在跑步MAUI Preview 10,带着Visual Studio 17.1.0 Preview 1.0

版本 1

我已将共享意图添加到AndroidManifest.xml文件中:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="31" />
    <application android:allowBackup="true" android:icon="@mipmap/appicon" android:roundIcon="@mipmap/appicon_round" android:supportsRtl="true">
        <activity android:name="SomeLongName.MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/plain" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>

然后通过向类添加Name属性MainActivity

[Activity(Name = "SomeLongName.MainActivity", Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize)]
    public class MainActivity : MauiAppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            if (Intent.Type == "text/plain")
            {

            }

        }
    }

当我在 MAUI 中调试应用程序时,应用程序构建正确,并且输出表明应用程序已部署。但是,在 Visual Studio 中,调试器无法运行,并且模拟器上没有应用程序的证据。

版本 2

在版本 2 中,我尝试为共享意图创建一个单独的活动:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="31" />
    <application android:allowBackup="true" android:icon="@mipmap/appicon" android:roundIcon="@mipmap/appicon_round" android:supportsRtl="true">
        <activity android:name="SomeLongName.ShareActivity" >
            <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/plain" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>
 [Activity(Name = "SomeLongName.ShareActivity")]
  public class ShareActivity : MauiAppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            if (Intent.Type == "text/plain" && Intent.Action == "android.intent.action.SEND")
            {
                //handleSendUrl();
            }

            base.OnCreate(savedInstanceState);

        }

我现在可以成功调试应用程序,但是当我尝试共享到应用程序时,base.OnCreate调用时出现异常:

Java.Lang.IllegalStateException: 'The specified child already has a parent. You must call removeView() on the child's parent first.'
4

1 回答 1

0

似乎问题围绕主题。解决方案在原始问题中,应用版本 2。有一些小的更新。在MainApplication类中添加定义主题的属性(与MainActivity类中相同但可能不同)。

[Application(Theme = "@style/Maui.SplashTheme")]
public class MainApplication : MauiApplication
{
    public MainApplication(IntPtr handle, JniHandleOwnership ownership)
        : base(handle, ownership)
    {
    }

    protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
}

这既可以正常工作,又可以进行调试。

在没有 MainApplication 主题设置的情况下,分享到 android 应用(传入)时,会抛出错误:

Java.Lang.IllegalArgumentException: 'The style on this component requires your app theme to be Theme.MaterialComponents (or a descendant).'

在我的辅助活动中,Activity 属性设置了主题,但被忽略并且仍然显示错误,因此需要应用程序级别。不知道为什么。

[Activity(Theme = "@android:style/Theme.MaterialComponents.Light", Name = "com.somename.receiveurlactivity", MainLauncher = false, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize)]
    
public class ReceiveUrlActivity : MauiAppCompatActivity
{
 //.... etc
于 2022-02-02T14:45:33.290 回答