Android 每天播放一个声音的应用
Android App that plays a sound daily
如何让 android 应用每天在特定时间播放特定噪音或声音?
到目前为止,我的代码包含一个按钮,该按钮将在单击时播放噪音。
使用 Alarm Manager 并在您选择的时间设置不精确的重复闹钟。
你必须创建服务
例如,在服务中,您每隔 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/
使用闹钟管理器并安排重复闹钟。
检查重复闹钟计划的演示:
https://developer.android.com/training/scheduling/alarms.html
如何让 android 应用每天在特定时间播放特定噪音或声音?
到目前为止,我的代码包含一个按钮,该按钮将在单击时播放噪音。
使用 Alarm Manager 并在您选择的时间设置不精确的重复闹钟。
你必须创建服务 例如,在服务中,您每隔 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/
使用闹钟管理器并安排重复闹钟。
检查重复闹钟计划的演示:
https://developer.android.com/training/scheduling/alarms.html