Xamarin.Forms 点击按钮怎么打开另外一个程序? 目前只知道另外程序的packname。求解决方案

Xamarin.Forms 点击按钮怎么打开另外一个程序? 目前只知道另外程序的packname。求解决方案

基于Monster 组和GPT的调写:

  • 在 Android 中,用 Intent 来打开另一个应用。在 Xamarin.Forms 中,用 DependencyService 来调用 Android 特定的代码。
  • 先要在你的 Xamarin.Forms 项目中创建一个接口。这个接口定义了你想要执行的操作。在你的情况下要创建一个如下的接口:
public interface IAppHandler
{
    Task<bool> LaunchApp(string packageName);
}

然后在 Android 项目中实现这个接口:

[assembly: Xamarin.Forms.Dependency(typeof(AppHandler))]
namespace YourNamespace.Droid
{
    public class AppHandler : IAppHandler
    {
        public Task<bool> LaunchApp(string packageName)
        {
            bool result = false;

            Intent intent = Android.App.Application.Context.PackageManager.GetLaunchIntentForPackage(packageName);

            if (intent != null)
            {
                intent.AddFlags(ActivityFlags.NewTask);
                Android.App.Application.Context.StartActivity(intent);
                result = true;
            }

            return Task.FromResult(result);
        }
    }
}

最后在 Xamarin.Forms 中调用这个方法:

var appHandler = DependencyService.Get<IAppHandler>();
await appHandler.LaunchApp("com.yourpackage.name");
  • 这个代码会试启动一个特定包名的应用。如果设备上没有这个应用,或者这个应用没有主活动,GetLaunchIntentForPackage 将会返回 null,然后 LaunchApp 方法会返回 false。如果成功启动了应用,LaunchApp 方法会返回 true。

在使用代码之前,你要声明应用权限在使用await Launcher.OpenAsync("com.example.packname");
官方链接:https://developer.android.google.cn/training/permissions/declaring?hl=zh-cn
https://blog.csdn.net/webxscan/article/details/107309126

public interface IAppLauncher
{
    void LaunchApp(string packageName);
}

[assembly: Dependency(typeof(AppLauncher))]
public class AppLauncher : IAppLauncher
{
    public void LaunchApp(string packageName)
    {
        Intent launchIntent = Android.App.Application.Context.PackageManager.GetLaunchIntentForPackage(packageName);
        Android.App.Application.Context.StartActivity(launchIntent);
    }
}

// Call the method in your shared project
DependencyService.Get<IAppLauncher>().LaunchApp("com.example.packname");


该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
要在Xamarin.Forms中打开另一个应用程序,您可以使用Xamarin.Essentials库中的Launcher类。Launcher类提供了一组静态方法,用于启动其他应用程序或打开设备上的文件。

以下是一个示例代码,展示如何使用Launcher类在Xamarin.Forms中打开另一个应用程序:

using Xamarin.Essentials;

private async void OpenAppButton_Clicked(object sender, EventArgs e)
{
    var packageName = "com.example.otherapp"; // 替换为您想要打开的应用程序的包名
    var status = await Launcher.TryOpenAsync(packageName);
    if (!status)
    {
        // 如果无法打开应用程序,则显示错误消息
        await DisplayAlert("Error", "Could not open app", "OK");
    }
}

在这个示例代码中,我们使用Launcher.TryOpenAsync()方法来打开另一个应用程序。该方法接受一个字符串参数,表示要打开的应用程序的包名。如果应用程序成功打开,则返回true,否则返回false

注意:在使用Launcher.TryOpenAsync()方法之前,请确保已经在应用程序的AndroidManifest.xml文件中添加了相应的权限。例如,如果您想要打开另一个应用程序的相机,您需要在AndroidManifest.xml文件中添加android.permission.CAMERA权限。

希望这个示例代码能够帮助您在Xamarin.Forms中打开另一个应用程序。如有疑问,请随时提问。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢