Xamarin.android 针对xamarin android的循环中的音频文件问题
使用迭代循环提取数字,效果良好。 我的问题是,我想在完成这个过程时添加一个声音,每次完成这个过程时,都会有一个声音,我使用了下面的代码,但是声音有时会出现,有时不会Xamarin.android 针对xamarin android的循环中的音频文件问题,xamarin.android,Xamarin.android,使用迭代循环提取数字,效果良好。 我的问题是,我想在完成这个过程时添加一个声音,每次完成这个过程时,都会有一个声音,我使用了下面的代码,但是声音有时会出现,有时不会 OnCreate _player = MediaPlayer.Create(this, Resource.Raw.beep); string[] words = str.Split("\n"); foreach (var word in words) {
OnCreate
_player = MediaPlayer.Create(this, Resource.Raw.beep);
string[] words = str.Split("\n");
foreach (var word in words)
{
if (!word.Any(c => c < '0' || c > '9'))
{
txtView.Text = word;
_player.Start();
buttn.Visibility = ViewStates.Invisible;
_player.Stop();
}
}
OnCreate
_player=MediaPlayer.Create(这个,Resource.Raw.beep);
string[]words=str.Split(“\n”);
foreach(单词中的var单词)
{
如果(!word.Any(c=>c<'0'| | c>'9'))
{
Text=word;
_player.Start();
buttn.Visibility=ViewStates.Invisible;
_player.Stop();
}
}
我希望这能有所帮助
OnCreate += async (sender, e) => {
string s = await getNumber(anyStringArg, true, ", ");
if (s != "")
{
txtView.Text = s;
buttn.Visibility = ViewStates.Invisible;
if (_player != null) _player.reset();
try
{
_player = await prepareMediaPlayer(Resource.Raw.beep);
_player.start();
}
catch (Exception ex)
{
// your exception handler
}
}
}
async Task<string> getNumber(string str, bool isAll = false, string separator = "")
{
if (str != "")
{
string[] words = str.Split("\n");
// only first number match
if (!isAll)
{
int i = 0, n = words.Length();
while (i < n && !isNumber(words[i])) i++;
if (i < n) return words[i];
}
// all numbers
else
{
List<string> nums = new List<string>();
foreach (string word in words)
{
if (isNumber(word))
{
nums.Add(word);
}
}
return String.Join(separator, nums);
}
}
return "";
}
bool isNumber(string str)
{
int i = 0, n = str.Length();
while (i < n && !(str[i] < '0' || str[i] > '9')) i++;
return n > 0 && i == n;
}
/* If you are not use custom Task,
you can avoid problem on unasync Prepare()
by invoke MediaPlayer.PrepareAsync()
after the MediaPlayer.Create(). */
async Task<MediaPlayer> prepareMediaPlayer(url)
{
MediaPlayer mediaPlayer;
await Task.Run(() => {
mediaPlayer = MediaPlayer.Create(this, url);
});
return mediaPlayer;
}
OnCreate+=async(发送方,e)=>{
字符串s=await getNumber(anyStringArg,true,“”);
如果(s!=“”)
{
txtView.Text=s;
buttn.Visibility=ViewStates.Invisible;
如果(_player!=null)_player.reset();
尝试
{
_player=wait preparemediplayer(Resource.Raw.beep);
_player.start();
}
捕获(例外情况除外)
{
//您的异常处理程序
}
}
}
异步任务getNumber(字符串str,bool isAll=false,字符串分隔符=)
{
如果(str!=“”)
{
string[]words=str.Split(“\n”);
//只有第一个数字匹配
如果(!isAll)
{
int i=0,n=words.Length();
而(i'9'))i++;
返回n>0&&i==n;
}
/*如果不使用自定义任务,
您可以避免unasync Prepare()上的问题
通过调用MediaPlayer.PrepareAsync()
在MediaPlayer.Create()之后*/
异步任务层(url)
{
媒体播放器;
等待任务。运行(()=>{
mediaPlayer=mediaPlayer.Create(这个url);
});
返回媒体播放器;
}
似乎有条件地错过了循环逻辑上的break子句。否则,如果在循环逻辑之后调用mediaplayer会更好。另外,当您希望获取与条件匹配的所有项目时。