我有 2 个使用 Xamarin.Forms 开发的应用程序(A 和 B)。我需要从应用 B 打开应用 A。
我已经按照这个 thread 尝试如下:
在 View
var appname = @"otherappId";
var result = await DependencyService.Get<IAppHandler>().LaunchApp(appname);
接口(interface)public interface IAppHandler
{
Task<bool> LaunchApp(string uri);
}
安卓[Activity(Label = "OpenAppAndroid")]
public class OpenAppAndroid : Activity, IAppHandler
{
public Task<bool> LaunchApp(string uri)
{
bool result = false;
try
{
var aUri = Android.Net.Uri.Parse(uri.ToString());
var intent = new Intent(Intent.ActionView, aUri);
Xamarin.Forms.Forms.Context.StartActivity(intent);
result = true;
}
catch (ActivityNotFoundException)
{
result = false;
}
return Task.FromResult(result);
}
}
IOS public class OpenAppiOS : IAppHandler
{
public Task<bool> LaunchApp(string uri)
{
try
{
var canOpen = UIApplication.SharedApplication.CanOpenUrl(new NSUrl(uri));
if (!canOpen)
return Task.FromResult(false);
return Task.FromResult(UIApplication.SharedApplication.OpenUrl(new NSUrl(uri)));
}
catch (Exception ex)
{
return Task.FromResult(false);
}
}
System.NullReferenceException: 'Object reference not set to an instance of an object.'
运行项目时。我不知道代码中的应用名称是什么?我试过用包名。引用:
https://forums.xamarin.com/discussion/92666/detect-and-open-another-app-on-device
Is it possible to open another app in my app with xamarin.form?
最佳答案
Xamarin.Forms.Forms.Context
自 XF 2.5 以来已过时。所以你可以使用 Android.App.Application.Context
代替它或使用插件Plugin.CurrentActivity
所以你可以像下面这样修改Android中的代码
using System.Threading.Tasks;
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using App14;
using App14.Droid;
using Xamarin.Forms;
[assembly: Dependency(typeof(OpenAppAndroid))]
namespace App14.Droid
{
public class OpenAppAndroid : IAppHandler
{
public Task<bool> LaunchApp(string packageName)
{
bool result = false;
try
{
PackageManager pm = Android.App.Application.Context.PackageManager;
if (IsAppInstalled(packageName))
{
Intent intent = pm.GetLaunchIntentForPackage(packageName);
if (intent != null)
{
intent.SetFlags(ActivityFlags.NewTask);
Android.App.Application.Context.StartActivity(intent);
}
}
else
{
Intent intent = pm.GetLaunchIntentForPackage("the package name of play store on your device");
if (intent != null)
{
intent.SetFlags(ActivityFlags.NewTask);
Android.App.Application.Context.StartActivity(intent);
}
}
}
catch (ActivityNotFoundException)
{
result = false;
}
return Task.FromResult(result);
}
private bool IsAppInstalled(string packageName)
{
PackageManager pm = Android.App.Application.Context.PackageManager;
bool installed = false;
try
{
pm.GetPackageInfo(packageName, PackageInfoFlags.Activities);
installed = true;
}
catch (PackageManager.NameNotFoundException e)
{
installed = false;
}
return installed;
}
}
}
对于 iOS,您可以引用 Launch Another IOS App from Xamarin Forms App .
关于android - Xamarin 表单 : How to open an app from another app?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63594273/