【问题标题】:Build works, but media play doesn't seem to load构建工作,但媒体播放似乎没有加载
【发布时间】:2017-12-27 22:42:07
【问题描述】:

我目前正在开发一个 Android 应用程序,其目的是在午夜播放一首特定的歌曲。我知道应用商店中可能已经有用于此目的的应用,但我是编码新手,想尝试自己编写应用。 所以现在我已经到了不知道该怎么办的地步了。我尝试在运行 Android 6.0 的 LG H818P 上调试该应用程序。它张贴,图标,名称和一切都是正确的,但我没有播放这首歌,即使我将它应该播放的时间设置为建筑物开始后两分钟。

这就是 Visual Studio 2017 中 MainActivity.cs 的代码,谁能发现任何错误?

using Android.App;
using Android.Widget;
using Android.OS;
using System;
using Android.Media;

namespace Name of the App
{
    [Activity(Label = "Name of the App", MainLauncher = true)]
    public class MainActivity : Activity


    {
        string text = "status";
        protected void onCreate(Bundle savedInstanceState)

        {


        }

        public void main()
        {
            try
            {

                string systemtime = DateTime.Now.ToString();

                for (int i = 0; i > 0; i++)
                {
                    if (systemtime == "09:07:00 pm")
                    {
                        StartPlayer();
                        player.Start();
                    }
                }
            }
            catch
            {
                text = "Error!";
            }
        }

        protected MediaPlayer player;
        public void StartPlayer()
        {
            if (player == null)
            {
                player = new MediaPlayer();
                player.SetDataSource("Ressources.raw.file2beplayed.mp3");
                player.Prepare();
                player.Start();
                text = "Playing!";
            }
            else
            {
                player.Reset();
                player.SetDataSource("Ressources.raw.file2beplayed.mp3");
                player.Prepare();
                player.Start();
            }
        }

    }


}

正如我所说,我是编码方面的菜鸟,很抱歉可能是丑陋的代码 :) 感谢您的回复!

【问题讨论】:

  • 是的,看起来你有点像新手。 :) 完全删除你的 for 循环,它会工作。您基本上从不执行 startplayer() 方法,因为 i 被初始化为 0,并且此循环仅在 i 大于 0 时执行。为什么这里有 for 循环?

标签: c# android visual-studio xamarin


【解决方案1】:

DateTimeToString 的默认格式是MM/dd/yyyy,因此您的比较systemtime == "09:07:00 pm" 永远不会为真。

您可以使用TimeSpanTimeOfDay 来自DateTime 的属性;

if(DateTime.Now.TimeOfDay == new Timespan(21,7,0))
  //...

此外,当您将 i 初始化为 0 时,您的循环将永远不会执行,因此在第一次检查时,i 不会大于 0,因此不会执行循环。

最后,Android 不使用main 函数,是一种特殊类型的程序,你的初始化代码应该在OnCreate 函数中,但是如果你在该函数中创建一个无限循环,Android 将关闭应用程序为它不会完成它的初始化,您需要使用计时器并每秒检查一次条件。

【讨论】:

  • 感谢 for 循环和时间的提示,我猜这有点用 :D 但是你知道为什么媒体播放器仍然没有启动吗?顺便说一句,我总是在更改时间,因此它与我导出构建的时间相匹配
  • 抱歉,没有看到你的新代码,我猜不出有什么问题。
  • 对不起,那是我的愚蠢;)我将新代码上传到 pastebin,因为它一直渴望评论pastebin.com/kEmt2KdA
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 2012-04-18
  • 2015-02-13
  • 1970-01-01
  • 2014-02-25
相关资源
最近更新 更多