gpt4 book ai didi

c# - 在 Xamarin Forms 中应该使用哪个包而不是 Android.Content 来获取类 Intent?

转载 作者:行者123 更新时间:2023-12-02 00:04:52 25 4
gpt4 key购买 nike

TL;博士:

需要使用类Intent对于不同的事情。在网上找到了例子 using Android.Content用来。这不适用于Xamarin.Forms(我认为)。需要什么 NuGet 软件包才能正常工作?

不..我有时间:

简介(不必要阅读)

我刚开始从事移动应用程序开发,所以我对任何事情都一无所知。希望在这里得到简洁的答案。

我的应用程序主要是 WebView具有其他一些次要功能的容器。我正在使用 Visual Studio 2019Xamarin.Forms,但目前我正在单独编译为 AndroidiOSUWP是我曾经的目标,至少有一个应用程序完全完成了Android

问题 1 和我在哪里

现在我需要添加两件事。一个是“给我们评分”,另一个是“分享”链接,均位于主菜单中(从左侧滑动或单击汉堡包图标将其打开)。我的菜单中已经有三个列表项,每个列表项都会在应用程序中打开一个页面。

我想出了如何向菜单添加另一个项目,但我目前将此列表项链接到 market://details?id=com.mycompany.myapp我的应用程序在 PlayStore 上的 url。它在 PlayStore 中打开得很好,但按后退按钮后,它会转到主屏幕而不是返回到应用程序。

我添加“给我们评分”的当前代码

MainPage.xaml.cs

using MyApp.Models;
using Plugin.Geolocator;
using System.Collections.Generic;
using System.ComponentModel;
using System.Threading.Tasks;
using Xamarin.Essentials;
using Xamarin.Forms;

namespace MyApp.Views {
...
public partial class MainPage : MasterDetailPage {
...
public async Task NavigateFromMenu(int id) {
if (!MenuPages.ContainsKey(id) {
switch(id) {
...
case (int)MenuItemType.RateUs:
await Browser.OpenAsync("market://details?id=com.mycompany.myapp", BrowserLaunchMode.SystemPreferred);
// startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=com.mycompany.myapp")));
break;
...
}
}
...
}
}
}

MenuPage.xaml.cs

using MyApp.Models;
using System.Collections.Generic;
using System.ComponentModel;
using Xamarin.Forms;

namespace MyApp.Views {
...
public partial class MenuPage : ContentPage {
...
public MenuPage() {
InitializeComponent();
menuItems = new List<HomeMenuItem> {
...
new HomeMenuItem { id = MenuItemType.RateUs, Title="Rate Us", Icon="\uf005" },
...
}
}
}
}

HomeMenuItem.cs

namespace MyApp.Models {
public enum MenuItemType {
...
RateUs,
...
}
public class HomeMenuItem {
public MenuItemType Id { get; set; }
public string Title { get; set; }
public string Icon { get; set; }
}
}

我尝试了什么

正如您在 // 中看到的那样在 MainPage.xaml.cs 中评论我发现了一个不同的解决方案,它可能会让我在从 PlayStore 返回后返回到我的应用程序。

这个特定的解决方案(显然???)有问题,位于 startActivity ,工具提示说明

The name 'startActivity' does not exist in the current context

但还有其他更复杂的解决方案,例如 THIS ONEstartActivity包裹在 public void function()我想这会有所帮助。

问题2

我需要在标题为“共享”的侧边菜单中添加另一个列表项,设备将询问您要与哪个应用程序共享(或复制到剪贴板),然后使用该应用程序进行共享我选择的一些文本和链接(对所有用户都相同)。再说一次,任何 LINK我发现用途Intent .

这里完全不知所措。如果您不能给我工具和如何使用它们的手册,请至少为我指出正确的方向。

最佳答案

有几种方法可以在您的应用程序中调用 Intent 类,其中之一,也许最好的方法是使用 DependencyService .

来自文档:

The DependencyService class is a service locator that enables Xamarin.Forms applications to invoke native platform functionality from shared code.

适用于您的用例的小示例

正如您从文档中看到的,您要做的第一件事是创建一个接口(interface)来定义您想要实现的方法。在我们的例子中,我将创建一个简单的接口(interface),定义一个名为 LaunchAppInPlayStore 的方法(您可以随意调用它!):

namespace App2
{
public interface Interface1
{
void LaunchAppOnPlayStore();
}
}

让我们继续在 Android 项目中实现它:为此,我在其中添加一个名为 MyInterfaceImplementationAndroid 的类,并从 Interface1 继承>。然后我从接口(interface)实现该方法,如下所示:

using Xamarin.Forms;
using Android.Content;
using Plugin.CurrentActivity;

[assembly: Dependency(typeof(App2.Droid.MyInterfaceImplementationAndroid))]

namespace App2.Droid
{
class MyInterfaceImplementationAndroid : Interface1
{
public void LaunchAppOnPlayStore()
{
CrossCurrentActivity.Current.AppContext.StartActivity(new Intent(Intent.ActionView, Android.Net.Uri.Parse("market://details?id=com.mycompany.myapp")));
}
}
}

您应该注意,在我的示例中,我使用 @JamesMontemagno 的 CurrentActivity 插件提供的 Context (这只是间接的,在我自己的应用程序中,我自己使用正如我在 another SO Post 中描述的不同方法(请参阅我添加 MainApplication 类以获取当前 Context 的部分,或者参阅 @DavidBritch 的 blog post (值得阅读!)))

我们快完成了!现在您只需在共享代码中调用该方法,如下所示:为了这个例子,我创建了一个带有按钮的简单页面:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="App2.TestInyection">
<ContentPage.Content>
<StackLayout>
<Button Text="Go to shop!"
Clicked="Button_Clicked"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand" />
</StackLayout>
</ContentPage.Content>
</ContentPage>

在后面的代码中,我只需调用 LaunchAppOnPlayStore 方法,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace App2
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class TestInyection : ContentPage
{
public TestInyection()
{
InitializeComponent();
}

private void Button_Clicked(object sender, EventArgs e)
{
DependencyService.Get<Interface1>().LaunchAppOnPlayStore();
}
}
}

关于c# - 在 Xamarin Forms 中应该使用哪个包而不是 Android.Content 来获取类 Intent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59648209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com