当调用 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)));
}
} }
假设您要打开的应用程序的包名为
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");
}