这是我第一次接触Xamarin Forms,所以也许(也可能)我以错误的方式做事。
我有以下Xaml:
<ContentPage.Content>
<StackLayout VerticalOptions="FillAndExpand"
HorizontalOptions="FillAndExpand"
Orientation="Vertical"
Spacing="15" x:Name="stackLayout">
<Button x:Name="giveFeedback" Text="Start Recording" Clicked="OnStartRecording" />
<Button x:Name="stopRecording" Text="Stop Recording" IsEnabled="false" Clicked="OnStopRecording" />
<Label Text="Feedback:" />
<Editor x:Name="feedbackTranscription" VerticalOptions="FillAndExpand" >
</Editor>
<Button x:Name="saveFeedback" IsEnabled="false" Text="Save feedback" Clicked="OnSave" />
</StackLayout>
</ContentPage.Content>
我想访问设备的麦克风以捕获音频。经过一番研究,我发现了适用于android的MediaRecorder类。问题是我无法弄清楚如何在MainActivity类上访问MainPage.xaml中的元素。
MainActivity.cs
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
MediaRecorder _recorder;
Button _start;
Button _stop;
string path = "/sdcard/test.3gpp";
protected override void OnCreate(Bundle bundle)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
//_start.Click += delegate {
// _stop.Enabled = !_stop.Enabled;
// _start.Enabled = !_start.Enabled;
// _recorder.SetAudioSource(AudioSource.Mic);
// _recorder.SetOutputFormat(OutputFormat.ThreeGpp);
// _recorder.SetAudioEncoder(AudioEncoder.AmrNb);
// _recorder.SetOutputFile(path);
// _recorder.Prepare();
// _recorder.Start();
//};
//_stop.Click += delegate {
// _stop.Enabled = !_stop.Enabled;
// _recorder.Stop();
// _recorder.Reset();
//};
base.OnCreate(bundle);
global::Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new App());
}
在我想绑定giveFeedback和stopRecording MainActivity类的_start和_stop按钮的情况下。我有一个FindById<Button>(Resource.Id.start)
的例子。我应该为我的按钮设置ID并执行相同的操作吗?我应该使用MVVM吗?
PS:目前,我只想学习Android版的Xamarin Forms。
答案 0 :(得分:1)
在PCL中创建这样的界面
public interface PortableInterface
{
object GetLogicFromAndroidProject();
}
在你的android项目中添加扩展此界面,如下所示
using System;
using Xamarin.Forms;
[assembly: Dependency(typeof(PortableInterfaceRenderer))]
namespace YourProjectName.iOS
{
public class PortableInterfaceRenderer : PortableInterface
{
public object GetLogicFromAndroidProject()
{
throw new NotImplementedException(); // here write your logic
}
}
}
现在你必须在PCL项目中调用这个方法
var obj = DependencyService.Get<PortableInterface>().GetLogicFromAndroidProject();
希望这会有所帮助