2

我有android应用程序,因为我将这些文件页面之一称为html文件以播放声音,因为用户可以在声音播放时进行管理:

星期六 _

周日 休息

星期一 _

等等。我的代码做得很好,但是当我将选择输入选项值管理为打开和关闭时,它会在我关闭应用程序或转到另一个页面时返回到默认值。所以问题是如何在用户选择时保持第一次选择选项值?另外,如果我想在特定时间播放声音:

星期六

5.30am 我该怎么办?

<播放声音方法>

public class WebAppInterface    {
  Context mContext;
  public  MediaPlayer mp = null;
  public static boolean checked = false;
  /** Instantiate the interface and set the context */
  WebAppInterface(Context c) {
    mContext = c;
    mp = MediaPlayer.create(mContext,R.raw.sound);
  }


  @JavascriptInterface
    public void playsound(String value  ) {

      if (value.equals("on")){
        checked = true;

        mp.setLooping(true);
        mp.start();
      }
      else 
      {  
        checked = false;
        mp.stop();
      }
    }
}

HTML 代码:

<html>
  <form >
    <select name="flip-1" id="flip-1" data-role="slider" onchange="getAzan(this)" >
      <option value="off" >play</option>
      <option value="on">off</option>
    </select>
  </form>

  <script type="text/javascript">
    function getAzan(sel) {
      var value = sel.options[sel.selectedIndex].value; 
      Android.playsound(value); 
    }
  </script>

注意:当用户在代码上选择值时,我确实播放了声音

4

3 回答 3

2

为什么不将这些值保存在数据库中?或者,如果您只想记住一些设置,那么只需在本地保存一个文件,并在每次启动应用程序时读取它。

关于您的时间问题,我认为这篇文章应该可以帮助您Binding MediaPlayer to be play at a specific time

编辑

   PrintWriter writer = new PrintWriter("nameTheFile.txt", "UTF-8");
   writer.println(name);
   writer.println(value);
   writer.close();

应该写在文件里。

阅读使用:

String name;
Boolean value;

BufferedReader reader = new BufferedReader(new FileReader("/path/to/file.txt"));
String line = null;
while ((line = reader.readLine()) != null) {
    name=line;
value=Boolean.Parse(line);
}
于 2013-07-05T12:17:39.210 回答
2

我会说将这些东西保存到SharedPrefences而不是将其存储在文件中会更好。

要使用 SharedPreferences 非常简单。当您获得值(即:onoff)时,只需打开 SharedPreferences,并将这些值放入其中。

private void editPlayMonday(boolean shouldIPlay) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    prefs.edit().putBoolean("PlayMonday", shouldIPlay).commit();
}

一旦你的价值观到位,如果你想知道你是否必须播放一首歌,只需检查 SharedPreferences,然后看看里面有什么:

private void playSong() {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    boolean shouldIPlay = prefs.getBoolean("PlayMonday", false);//false being the default value
    if(shouldIPlay) {
        //play song or whatever
    }
}

现在,您可以在每一天的首选项中设置一个布尔值,然后检查这些值是否为今天的日期或打开或关闭。

我希望它有帮助!

编辑: 所以,我给了你管理播放器的键,以及何时需要播放声音。该editPlayMonday功能可让您在需要播放声音时在应用程序上注册,并playSong让您检查首选项以了解是否必须播放歌曲。

现在,在您的应用程序中,您需要使用这些函数并将它们链接到 javascript。我会让你这样做,我很确定有很多教程和帮助(即:http: //developer.android.com/guide/webapps/webview.html

我没有提供细节的部分//play song or whatever,在playSong函数中会有点棘手,你应该详细说明你想用它做什么。我建议你做的是检查AlarmManager课程。它使您可以轻松地从应用程序安排事件。有关如何实现它的更多信息,请参阅 文档或本教程。

所以总结一下,你需要对你的应用程序做什么:

  • 将您的 HTML 开关链接到 AndroideditPlay...功能,以便您可以在需要播放歌曲时进行注册。
  • 当你打开你的 webview 时,检查每一天对应的 SharedPreference 是 true 还是 false。这样,您可以将不同的 HTML 开关修改为“开”或“关”。
  • editPlay...函数中,并使用 AlarmManager,您应该安排第二天的闹钟,这将链接到您的歌曲。如果给定日期的布尔值仍然为真,请记住检查 SharedPreference。你不想在错误的日子播放一首歌...
于 2013-07-05T16:15:58.180 回答
0

正如@MagicMicky 所述,您可以使用SharedPreferences将值存储在onPause()方法中

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    prefs.edit().putBoolean("Monday", true).commit();

然后检索onResume().

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean check_monday=prefs.getBoolean("Monday",false); //false being default value

现在,即使用户退出应用程序或移动到新的,您的数据也会被保存activity。就警报而言AlarmManager ,此处使用不同的示例通过检查SharedPreferences是否需要警报来安排警报,即安排警报 if check_monday==true

于 2013-07-11T19:59:34.580 回答