【问题标题】:How to launch an app from another in Xamarin forms如何在 Xamarin 表单中从另一个应用程序启动应用程序
【发布时间】:2020-05-23 02:15:07
【问题描述】:

我正在尝试启动一个我从我正在开发的另一个应用中创建的应用。问题是我一直在互联网上搜索并找到了一些东西,但它没有用,所以我在这里寻求帮助。

这是我在要启动的应用程序上所做的:

在我的 xaml.cs 上:

public async void GoToDigDitApp(object sender, EventArgs e)
        {
            var appname = "digdit://";
            var result = await DependencyService.Get<IAppHandler>().LaunchApp(appname);
        } 

我创建了一个接口:

    public interface IAppHandler
    {
        Task<bool> LaunchApp(string uri);
    }

在Android项目中:


[assembly: Dependency(typeof(OpenAppAndroid))]
namespace SupervisingApp.Droid
{
    [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);
                Android.App.Application.Context.StartActivity(intent);


                result = true;
            }
            catch (ActivityNotFoundException)
            {
                result = false;
            }
            return Task.FromResult(result);
        }
    }
}

这是我要启动清单的应用程序:

<?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.Tab2" android:installLocation="auto">
   <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
   <uses-permission android:name="android.permission.INTERNET" />
   <uses-permission android:name="android.permission.READ_PHONE_STATE" />
   <uses-permission android:name="android.permission.CAMERA" />
   <application android:label="Dig Dit" android:icon="@drawable/ic_launcher">
       <activity android:icon="@drawable/ic_launcher" android:label="Dig Dit" android:name="digdit.urlentryclass">
           <intent-filter>
               <action android:name="android.intent.action.VIEW" />
               <category android:name="android.intent.category.DEFAULT" />
               <category android:name="android.intent.category.BROWSABLE" />
               <data android:scheme="digdit" />
           </intent-filter>
       </activity>
   </application>
</manifest>

目前我只对 Android 部分感兴趣,它似乎不起作用。希望大家能帮帮我。

【问题讨论】:

标签: android android-intent android-activity xamarin.forms


【解决方案1】:

你可以使用PackageManager.GetLaunchIntentForPackage

试试下面的代码。 com.companyname.app2是App2的包名。

 Intent intent = PackageManager.GetLaunchIntentForPackage("com.companyname.app2");
            StartActivity(intent);

更新:

创建接口:

 public interface IDpendencyService
{
    Task<bool> Launch(string stringUri);
}

Android的实现:

 public class DependencyImplementation : Activity, IDpendencyService
{
    public Task<bool> Launch(string stringUri)
    {

        Intent intent = Android.App.Application.Context.PackageManager.GetLaunchIntentForPackage(stringUri);
        if (intent != null)
        {
            intent.AddFlags(ActivityFlags.NewTask);
            Forms.Context.StartActivity(intent);
            return Task.FromResult(true);
        }
        else
        {
            return Task.FromResult(true);
        }



    }
}

主页的使用:

<StackLayout>
    <!--  Place new controls here  -->
    <Label
        FontAttributes="Bold"
        FontSize="Large"
        HorizontalOptions="Center"
        Text="Welcome to App1!"
        VerticalOptions="CenterAndExpand" />
    <Button x:Name="GotoApp2" Text="GotoApp2" Clicked="GotoApp2_Clicked"></Button>
</StackLayout>


 private void GotoApp2_Clicked(object sender, EventArgs e)
    {
        DependencyService.Get<IDpendencyService>().Launch("com.companyname.app2");
    }

我已经上传到 GitHub,你可以从StartAnotherApp_Xamarin.forms/App1 文件夹下载以供参考。 https://github.com/WendyZang/Test.git

【讨论】:

  • 我得到这个异常:未处理的异常:Java.Lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'android.content.pm.PackageManager android.content.Context.getPackageManager()'
  • 我用过这个“com.companyname.Tab2”,但是没有用
  • 此应用 Tab2 需要安装在设备上。该代码在 xamarin android 上运行良好。如果您想在 xamarin.forms 中执行此操作。你可以使用依赖服务。
【解决方案2】:

您可以从 xamarin.forms 打开您的应用

Device.BeginInvokeOnMainThread(() =>
{
    Xamarin.Forms.Device.OpenUri(new Uri("digdit://555-1111"));
});

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-12
相关资源
最近更新 更多