2013-07-07 5 views
0

hi Я создал свое первое приложение android app, чтобы воспроизводить звук в определенное время. Я сделал свой код хорошо, и я добавил список дней и времени, которые звучат. когда я искал больше о том, как воспроизводить звук, когда мобильный заблокирован как сигнал тревоги. наконец, я понял, что должен использовать диспетчер аварийных сигналов. пожалуйста, мне нужно, чтобы кто-то помог мне, поскольку я не мог этого сделать. как я хочу, когда конкретные времена, которые я добавил ниже звука воспроизведения.Как использовать диспетчер аварийных сигналов с конкретными датами?

Примечание: я использую класс интерфейса для вызова называют HTML файлы андроид

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 ) throws ParseException { 


    //get current date time with Date() 

    String dateStr = "0, 3, 11, 9, 7, 2013"; 

    SimpleDateFormat dateFormat = new SimpleDateFormat("ss,hh,mm,yyyy,MM,dd"); 
    Time time = new Time(); 
    System.out.println(dateFormat.format(time)); 

    //1day 
    time.set(0, 3, 11, 9, 7, 2013); 
    time.set(0, 3, 18, 9, 7, 2013); 
    time.set(0, 5, 0, 9, 7, 2013); 
    time.set(0, 12, 1, 9, 7, 2013); 
    time.set(0, 3, 37, 9, 7, 2013); 
    time.set(0, 7, 0, 9, 7, 2013); 
    time.set(0, 8, 32, 9, 7, 2013); 
    //2day 
    time.set(0, 3, 11, 10, 7, 2013); 
    time.set(0, 3, 18, 10, 7, 2013); 
    time.set(0, 5, 0, 10, 7, 2013); 
    time.set(0, 12, 1, 10, 7, 2013); 
    time.set(0, 3, 37, 10, 7, 2013); 
    time.set(0, 7, 0, 10, 7, 2013); 
    time.set(0, 8, 31, 10, 7, 2013); 

}

public class x extends Activity { 

private MediaPlayer mediaplayer; 
private String TAG; 
Context mContext; 
private IntentListener listener = new IntentListener(); 

WebAppInterface wb=null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity); 


    //Call HTML Files 
    WebView myWebView = (WebView) findViewById(R.id.web_engine); 

    WebSettings webSettings = myWebView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    myWebView.loadUrl("file:///android_asset/index.html"); 

    //Initialise WebAppInterface and pass this ref.. 
    wb=new WebAppInterface(this); 
    myWebView.addJavascriptInterface(wb, "Android"); 

} 

}

ответ

0

сначала нужно создать класс, который расширяет BroadcastReceiver:

public class AlarmManagerBroadcastReciever extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    PowerManager pm = (PowerManager) context 
      .getSystemService(Context.POWER_SERVICE); 
    PowerManager.WakeLock wl = pm.newWakeLock(
      PowerManager.PARTIAL_WAKE_LOCK, "YOUR TAG"); 
    // Acquire the lock 
    wl.acquire(); 
    MediaPlayer mp=MediaPlayer.create(context,R.raw.<your audio>); 
    mp.start(); 
    // Release the lock 
    /// do your playing sound here 
    wl.release(); 
} 

public void SetAlarm(Context con, int id, int hour, int min) { 
    AlarmManager am = (AlarmManager) con 
      .getSystemService(Context.ALARM_SERVICE); 
    Calendar cal = Calendar.getInstance(); 
    cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), 
      cal.get(Calendar.DAY_OF_MONTH), hour, min); 
    Intent intent = new Intent(con, AlarmManagerBroadcastReciever.class); 

    PendingIntent sender = PendingIntent.getBroadcast(con, id, intent, 
      PendingIntent.FLAG_UPDATE_CURRENT); 
    am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender); 
} 

public void CancelAlarm(Context context, int size) { 
      // canceling all alarms 
    for (int i = 0; i < size; i++) { 
     Intent intent = new Intent(context, 
       AlarmManagerBroadcastReciever.class); 
     PendingIntent sender = PendingIntent.getBroadcast(context, i, 
       intent, 0); 
     AlarmManager alarmManager = (AlarmManager) context 
       .getSystemService(Context.ALARM_SERVICE); 
     alarmManager.cancel(sender); 
    } 
} 

}

в вашем MainActivity сделать объект этого класса:

AlarmManagerBroadcastReciever alarm = new AlarmManagerBroadcastReciever(); 

и добавить методы ниже:

public void startTimer(int hour, int min, int id) { 
    Context context = this.getApplicationContext(); 
    if (alarm != null) { 
     alarm.SetAlarm(context, id, hour, min); 
    } else { 
     Toast.makeText(context, "Alarm is null", Toast.LENGTH_SHORT).show(); 
    } 
} 

public void cancelTimer() { 
    Context context = this.getApplicationContext(); 
    if (alarm != null) { 
     alarm.CancelAlarm(context, <number of alarms>); 
    } else { 
     Toast.makeText(context, "Alarm is null", Toast.LENGTH_SHORT).show(); 
    } 
} 

использование StartTimer(), чтобы установить определенную тревогу и в onRecieve() из broadcastReciever сделать ваш things.Don't забудьте добавить broadcastReciever явить файл:

<receiver android:name="<package name>.AlarmManagerBroadcastReciever" 
     > 
    </receiver> 

удачи;)

+0

я имел эти ошибки Конструктор Date() не определен, метод getApplicationContext() не определен для типа WebAppInterface. WebAppInterface интерфейс класса – Myworld

+0

Я не знаю, что вызывает эти ошибки. убедитесь, что вы используете методы StartTimer и CancelTimer в Activity. не должно быть никаких проблем с конструктором date() –

+0

, пожалуйста, как можно использовать playound() с конкретными моментами на вашем, а также при установке даты (0) ошибка исчезла. отредактируйте свой код для удовлетворения моих потребностей. спасибо, я знаю, что я доберусь до решения – Myworld

Смежные вопросы