Launcher.Default.TryOpenAsync() 在 MAUI 应用程序中不起作用

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

当调用 Launcher.Default.TryOpenAsync() 时,它在 MAUI 应用程序中始终返回 false。 我们需要通过单击按钮打开设备中已安装的应用程序。如果没有安装,请前往Play商店下载。

尝试过此代码,但不起作用

private async void Button1_ClickAsync(object sender, EventArgs e)
{
try
{   string package_name = txtPackagename.Text;   

    // bool supportsUri = await Launcher.Default.CanOpenAsync("com.google.android.youtube") // not working...

    // Try to open You tube App installed.
    bool launcherOpened = await Launcher.Default.TryOpenAsync("com.google.android.youtube");

    if (launcherOpened)
    {
        await DisplayAlert("Done", "Application Successfully Open.", "OK");
    }
}
catch (Exception ex)
{
    await DisplayAlert("No Support", ex.Message, "OK");
} 
}

即使安装了应用程序,它也始终返回 false。我们如何在毛伊岛实现这一目标? 在Android studio中,我们可以通过包名打开一个应用程序。

Android Studio 代码(此代码在 Android Studio 项目中工作)

public void openApplication(Context context, String packageN) {
Intent i = context.getPackageManager().getLaunchIntentForPackage(packageN);
if (i != null) {
    i.addCategory(Intent.CATEGORY_LAUNCHER);
    context.startActivity(i);
} else {
    try {
        context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageN)));
    }
    catch (android.content.ActivityNotFoundException anfe) {
        context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + packageN)));
    }
} }
android android-studio maui deep-linking android-deep-link
1个回答
0
投票

假设您要打开的应用程序的包名为

com.xamarin.secondapp

然后您需要将

IntentFilter
Exported =true
添加到您要打开的应用程序的
MainActivity.cs
com.xamarin.secondapp
)。

如下:

  [Activity(Label = "SecondApp", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true,Exported =true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] 
    [
    IntentFilter
    (
        new[] { Android.Content.Intent.ActionView },
        Categories = new[]
            {
                Android.Content.Intent.CategoryDefault,
                Android.Content.Intent.CategoryBrowsable
            },
        DataSchemes = new[] { "myapp" }
    )
]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());
        }
    }

注意:记得添加代码

DataSchemes = new[] { "myapp" }

对于当前应用程序,您需要在文件

queries
中为要打开的应用程序添加
manifest.xml
标签。

例如:

  <?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.openappapp1">
    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="33" />
    <application android:label="OpenappApp1.Android" android:theme="@style/MainTheme">

      </application>
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


      <queries>
            <package android:name="com.xamarin.secondapp" />
      </queries>
</manifest>

和用法示例:

public async void OpenSecondApp()
{

    var supportsUri = await Launcher.Default.CanOpenAsync("myapp://");
    if (supportsUri)
        await Launcher.Default.OpenAsync("myapp://com.xamarin.secondapp");

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