Как я могу установить приложение для Android, которое воспроизводит определенный шум или звук в определенное время каждый день?
Пока мой код состоит из кнопки, которая будет воспроизводить шум при нажатии.Android-приложение, которое воспроизводит звук ежедневно
-1
A
ответ
1
вы должны создать службу и на службе вы играете ю песню из папки активов каждые 10:00 AM, например .. услуга будет выглядеть следующим образом: MyService.java
import android.app.Service;
import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.media.MediaPlayer;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.text.format.Time;
import android.widget.Switch;
import android.widget.Toast;
import java.io.IOException;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class MyService extends Service {
private int Annee;
private int Mois;
private int Jour;
private int Heure;
private int Minute;
boolean afficher=true;
private Handler customHandler = new Handler();
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
throw new UnsupportedOperationException("Non implementé");
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onStart(Intent intent, int startId) {
Toast.makeText(this,"Service demarré",Toast.LENGTH_LONG).show();
customHandler.postDelayed(updateTimerThread, 3000);
super.onStart(intent, startId);
}
@Override
public void onDestroy() {
onStop();
Toast.makeText(this,"Service arrété",Toast.LENGTH_LONG).show();
customHandler.removeCallbacks(updateTimerThread);
super.onDestroy();
}
public void onStop(){
}
private Runnable updateTimerThread = new Runnable() {
public void run() {
final Calendar cal = Calendar.getInstance();
Annee = cal.get(Calendar.YEAR);
Mois = cal.get(Calendar.MONTH)%12+1;
Jour = cal.get(Calendar.DAY_OF_MONTH);
Heure=cal.get(Calendar.HOUR_OF_DAY)%24+1;
if(Heure==24)Heure=0;
Minute=cal.get(Calendar.MINUTE);
String min=Integer.toString(Minute);
String heure=Integer.toString(Heure);
String h=heure+":"+min;
java.text.SimpleDateFormat simpleTimeFormat = new java.text.SimpleDateFormat("HH:mm");
String h2 = null;
try {
h2 = simpleTimeFormat.format(simpleTimeFormat.parse(h));
} catch (ParseException e) {
e.printStackTrace();
}
String a, m, j;
j = Integer.toString(Jour);
m = Integer.toString(Mois);
a = Integer.toString(Annee);
String d = j + "/" + m + "/" + a;
java.text.SimpleDateFormat simpleDateFormat = new java.text.SimpleDateFormat("dd/MM/yyyy");
String d2 = null;
try {
d2 = simpleDateFormat.format(simpleDateFormat.parse(d));
} catch (ParseException e) {
e.printStackTrace();
}
if (h2.equals("10:00")) {
if (afficher){
Intent intent =new Intent(getBaseContext(),AlertD.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("Cle",cur.getString(0));
getApplication().startActivity(intent);
afficher=false;}
}}
customHandler.postDelayed(this , 3000);
};
}
bootCompleted.java
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
/**
* Created by Mechalikh on 21/12/2014.
*/
public class BootCompleted extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equalsIgnoreCase(Intent.ACTION_BOOT_COMPLETED)){
Intent serviceIntent= new Intent(context,MyService.class);
context.startService(serviceIntent);
}
}
}
alertD.java (диалог тревоги)
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class AlertD extends Activity {
MediaPlayer m;
public static String cle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
m=new MediaPlayer();
cle =getIntent().getStringExtra("Cle");
final AlertDialog alertDialog =new AlertDialog.Builder(this).create();
alertDialog.setTitle("Votre rendez-vous");
alertDialog.setMessage("Vous avez un rendez-vous dans UNE HEURE !");
alertDialog.setButton("Arréter", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
m.stop();
AlertD.super.onBackPressed();
}
});
alertDialog.show();
Alarme();
}
private void Alarme() {
try {
if (m.isPlaying()) {
m.stop();
m.release();
m = new MediaPlayer();
}
AssetFileDescriptor descriptor = getAssets().openFd("Alarm.mp3");
m.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
descriptor.close();
m.prepare();
m.setVolume(1f, 1f);
m.setLooping(true);
m.start();
}catch (Exception e){
e.printStackTrace();
}
}
}
подробнех см этого учебного пособия http://blog.vogella.com/2011/12/11/automatically-starting-services-in-android-after-booting/
0
Используйте Alarm Manager и установите неточный повторяющийся сигнал тревоги в свое время выбора.
1
менеджера Использования сигнализации и запланировать повторяющуюся тревогу.
Проверить это демо на повторение графика сигнализации:
https://developer.android.com/training/scheduling/alarms.html