gpt4 book ai didi

java - 在 AppWidgetProvider 中使用 MediaPlayer?

转载 作者:行者123 更新时间:2023-12-01 15:40:23 24 4
gpt4 key购买 nike

我有一个简单的小部件,按下时会播放声音文件。现在,我在 onRecieve 方法中有以下代码:

@Override
public void onReceive(Context context, Intent intent)
{
super.onReceive(context, intent);

int id = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1);
SharedPreferences prefs = context.getSharedPreferences(CreateWidget.PREFS, 0);
Log.d("WORKING",SFXAppWidgetProvider.KEY_SFX_URI_PREFIX+id+" = "+prefs.getString(SFXAppWidgetProvider.KEY_SFX_URI_PREFIX+id, "FAILURE"));
Log.d("WORKING", "Received Intent: " + intent.getAction());

if (intent.getAction().equals(ACTION_PLAY_SOUND))
{
try
{
if(mPlayer != null)
{
mPlayer.stop();
mPlayer.release();
Uri sfxURI= Uri.parse(prefs.getString(SFXAppWidgetProvider.KEY_SFX_URI_PREFIX+id, "null"));
mPlayer.setDataSource(context, sfxURI);
mPlayer.prepare();
mPlayer.start();
Log.d("WORKING","MediaPlayer already existed, released it");
}
else
{
Uri sfxURI= Uri.parse(prefs.getString(SFXAppWidgetProvider.KEY_SFX_URI_PREFIX+id, "null"));
mPlayer = MediaPlayer.create(context, sfxURI);
mPlayer.start();
Log.d("WORKING","MediaPlayer did not exist, making a new one");
}
} catch (IllegalStateException e)
{
e.printStackTrace();
} catch (IllegalArgumentException e)
{
e.printStackTrace();
} catch (SecurityException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}

}

}

发生的情况是,每次我播放声音时,日志都会不断报告它正在创建一个新的 MediaPlayer 实例。我猜 AppWidgetRecievers/BroadcastReceivers 不应该有对象或其他东西?任何人都知道播放声音的替代方法(最好是轻量级的,因为它只是一个小部件。我想使用 SoundPool 可能会更有效,因为它可以有多种不同的声音)?

最佳答案

I'm guessing that AppWidgetRecievers/BroadcastReceivers aren't meant to have objects or something?

list 注册的 BrodadcastReceiversAppWidgetProvider 一样,仅在 onReceive() 调用期间有效。对于它们来说,执行任何超过 onReceive() 结束时间的操作都是不安全的,并且它们不会被重用。

Anyone know an alternate way to play sounds (preferrably lightweight, since it's only a widget.

如果您的目标是长时间播放声音,请让 AppWidgetProvider 将工作委托(delegate)给管理音频播放的 Service

And I guess it may be more efficient to use a SoundPool since it's possible to have multiple different sounds)?

在某些情况下,SoundPool 可能是比 MediaPlayer 更好的选择,但这些情况不太可能与应用小部件有任何关系。

关于java - 在 AppWidgetProvider 中使用 MediaPlayer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8145569/

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