今天,可以将C#编程用于多个移动平台,例如:
(如果我错过了一些,请随时编辑)当然,它仍然是UI的编程工作,但可以共享主要的应用程序库.
我们都感谢一群聚集在Mono项目和超级英雄Miguel de Icaza的团队,他们的努力是无价的.
困扰我的是,这些选择的好处是什么?在多个移动平台上维护一个应用程序的成本是否较低,然后必须单独编写每个库以获得更好的性能.每种语言的学习曲线?作为所有行业的杰克与.NET忍者
或者知道在原生环境中编写的应用程序二进制文件的大小较小,甚至可能更好地进行优化,而不是忘记您必须等待新平台操作系统更新的支持.
更新:显然还有一件事需要考虑,那就是支持.由于Novell被Attachmate Group收购,所有Mono团队都被解雇了.然而,由Miguel De Icaza领导的团队的核心成员创建了新公司 Xamarin,它将从零开始重塑Mono Mobile开发工具.
我的应用程序集成了电子邮件,用户可以直接从应用程序提交错误报告,反馈等.我正在使用application/octet-stream作为Intent的SetType.当您提交电子邮件时,您将获得内容选择器,并显示来自Evernote,Facebook,电子邮件等的各种项目.
如何让此选择器仅显示电子邮件,以免将用户与适合内容选择器类型的所有其他项目混淆?
谢谢.
如何在活动主题/样式中使用背景图像?
如果我使用颜色这样做:
<style name="CustomTheme" parent="android:Theme.Light">
<item name="android:windowBackground">@color/custom_theme_color</item>
</style>
Run Code Online (Sandbox Code Playgroud)
它工作正常,但如果我用以下代码替换:
<item name="android:windowBackground">@drawable/splash_image</item>
Run Code Online (Sandbox Code Playgroud)
图像显示正确,但所有内容都被压缩到屏幕左上角的一个小块中.状态栏下方的阴影也会被切断或混乱.
我正在使用Mono for Android,图像是一个有效的九补丁png.
android background splash-screen android-manifest xamarin.android
以下MarkerClick实现工作,非常好.我可以打开其他View viaShowViewModel
View.cs
mMap.MarkerClick += MMap_MarkerClick;
private void MMap_MarkerClick(object sender, GoogleMap.MarkerClickEventArgs e)
{
ViewModel.MapInfoSelected(e.Marker.Title);
}
Run Code Online (Sandbox Code Playgroud)
ViewModel.cs
public void MapInfoSelected(string name)
{
ShowViewModel<StudentViewModel>(new { studentName = name});
}
Run Code Online (Sandbox Code Playgroud)
InfoWindowClick 不会触发打开其他视图.
View.cs
mMap.InfoWindowClick += MMap_InfoWindowClick;
private void MMap_InfoWindowClick(object sender, GoogleMap.InfoWindowClickEventArgs e)
{
ViewModel.MapInfoSelected(e.Marker.Title);
}
Run Code Online (Sandbox Code Playgroud)
ViewModel.cs
public void MapInfoSelected(string name)
{
// it hits here, but does not hit `StudentViewModel` Init() method, the app is frozen and do nothing
ShowViewModel<StudentViewModel>(new { studentName = name});
}
Run Code Online (Sandbox Code Playgroud)
我甚至尝试了SetOnInfoWindowClickListener如下,它也没有打开视图.
mMap.SetOnInfoWindowClickListener(this);
public …Run Code Online (Sandbox Code Playgroud) 我正在使用此代码但是当我停止进程时它不会获得ping统计信息:
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "ping";
p.StartInfo.Arguments = "-c " + count + " -i " + interval + " -s " + buffer + " -W " + timeout + " " + address;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
string readData = "";
DateTime dt = DateTime.Now.AddSeconds(5);
if (p.Start())
{
Scanner scanner = new Scanner(p.StandardOutput.BaseStream);
while (scanner.HasNextLine)
{
readData = scanner.NextLine().ToString();
Console.WriteLine(readData.ToString());
if (!string.IsNullOrEmpty(readData) && !readData.StartsWith("---"))
{
Match M = Regex.Match(readData, @"^[\d]+ bytes from ([^:]+): …Run Code Online (Sandbox Code Playgroud) 我已经对这个问题进行了2天的斗争,但找不到任何解决方案.
我在Visual Studio 2017中有一个Xamarin Android应用程序,包含三个项目:
NUnit 3 Test Project (Android)使用NUnit Templates for Visual Studio创建的类型项目Unit Test Project (.NET Framework))一切都运作良好,直到现在.当我选择我的主项目作为启动项目时,我的应用程序已部署到设备/模拟器.当我选择特定于Android的单元测试项目时,部署测试项目并在设备/模拟器上由nUnit Xamarin Runners执行单元测试.
但是几天前我用最新的可用更新更新了我的Visual Studio 2017,现在,当我尝试构建这个特定于android的单元测试项目时,我收到以下错误:
The file "obj\Debug\android\bin\packaged_resources" does not exist.
我到处搜索,包括这个和这个 SO主题.我还完全重新安装了包含Android SDK的Visual Studio 2017和Xamarin.什么都没有帮助.根据我的阅读,我怀疑我安装的Android SDK Build-tools版本有问题.这是我目前在SDK Manager中安装的内容:

正如其他SO线程建议的那样,我尝试卸载最新的Android SDK Build-tools(25.0.2)并安装了版本23.0.3(我的所有项目都针对Android 6.0),但它也没有帮助,我仍然有相同的错误.
也许值得补充一点,当我尝试在我的应用程序中阅读本教程时实现RecyclerView时,这个问题可能已经开始发生,他们建议在SDK Manager中安装Android 7.1.1(API 25).然而,在此之后我撤消了我的所有更改,甚至重新命名了VS2017 + Xamarin.
你知道为什么会这样吗?我真的很感激任何帮助.谢谢!
编辑2017-04-09:
呃,我删除了VS2017,用全新的Android SDK安装VS2015仍然是同样的问题:(
我有
public class MyApp : Application
Run Code Online (Sandbox Code Playgroud)
在Java中,我会在清单中添加一行,并将其传递给我的应用程序的名称空间和名称:
<application android:icon="@drawable/icon" android:label="@string/app_name"
android:name="com.devahead.extendingandroidapplication.MyApplication">
Run Code Online (Sandbox Code Playgroud)
在Xamarin中,有[Application]属性,但文档声明该Name成员不受支持.那么如何让我的子类注册?在哪里应用属性?
如果我将属性添加到我的子类,我得到:
System.NotSupportedException: Unable to activate instance of type TestClient_Android.MyApplication from native handle 14d00019
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用已安装的Xamarin,Android SDK和Android模拟器在Visual Studio 2015中创建一个新的空白应用程序(Android).在尝试创建新项目时,我只是弹出一条消息:
值不能为空.参数名称:path1
解决方案资源管理器为空,只在Projects文件夹中创建一个空文件夹.
我该如何解决?
我想在手机锁定时从wifi接收数据包.问题是,当我锁定屏幕时,我的前台服务停止接收数据包.我正在使用Foreground Service,如下所示:
public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
{
var notification = new Notification.Builder(this)
.SetContentTitle(Resources.GetString(Resource.String.app_name))
.SetContentText(Resources.GetString(Resource.String.notification_text))
.SetSmallIcon(Resource.Drawable.ic_stat_name)
.SetContentIntent(BuildIntentToShowMainActivity())
.SetOngoing(true)
.AddAction(BuildRestartTimerAction())
.AddAction(BuildStopServiceAction())
.Build();
// Enlist this instance of the service as a foreground service
StartForeground(Constants.SERVICE_RUNNING_NOTIFICATION_ID, notification);
/*DO THIS EVEN WHEN SCREEN IS LOCKED*/
var powerManager = (PowerManager)GetSystemService(PowerService);
_wakeLock = powerManager.NewWakeLock(WakeLockFlags.Partial, "WakeLockTag");
_wakeLock.Acquire();
var wifiManager = (WifiManager)GetSystemService(WifiService);
_wifiLock = wifiManager.CreateWifiLock(WifiMode.FullHighPerf, "xamarin_wifi_lock");
_wifiLock.Acquire();
if (!powerManager.IsIgnoringBatteryOptimizations("com.xamarin.xample.foregroundservicedemo") ||
!_wakeLock.IsHeld || !_wifiLock.IsHeld)
throw new InvalidOperationException("OPTIMIZATIONS NOT ACTIVE");
string msg = timestamper.GetFormattedTimestamp();
Log.Debug(TAG, msg); …Run Code Online (Sandbox Code Playgroud) android ×10
xamarin.android ×10
xamarin ×6
c# ×2
.net ×1
background ×1
google-maps ×1
mono ×1
mvvmcross ×1
xamarin.ios ×1