В моей базе данных ниже мне нужно вызвать строку по Id, в которой я установлю другое действие, как будто я буду воспроизводить другое аудио в этом ряду, и мне нужно установить другое аудио для остальных 4 строк. Мой вопрос: как я могу это сделать? Мне нужно сделать запрос? Если так, то где я должен его создать? и как это выглядит? Я новичок в android.
База данных. java
public class Database extends SQLiteOpenHelper {
static Database instance = null;
static SQLiteDatabase database = null;
static final String DATABASE_NAME = "DB";
static final int DATABASE_VERSION = 1;
public static final String ALARM_TABLE = "alarm";
public static final String ALARM_TABLEE = "alaarm";
public static final String COLUMN_ALARM_ID = "_id";
public static final String COLUMN_ALARM_ACTIVE = "alarm_active";
public static final String COLUMN_ALARM_TIME = "alarm_time";
public static final String COLUMN_ALARM_DAYS = "alarm_days";
public static final String COLUMN_ALARM_DIFFICULTY = "alarm_difficulty";
public static final String COLUMN_ALARM_TONE = "alarm_tone";
public static final String COLUMN_ALARM_VIBRATE = "alarm_vibrate";
public static final String COLUMN_ALARM_NAME = "alarm_name";
public static void init(Context context) {
if (null == instance) {
instance = new Database(context);
}
}
public static SQLiteDatabase getDatabase() {
if (null == database) {
database = instance.getWritableDatabase();
}
return database;
}
public static void deactivate() {
if (null != database && database.isOpen()) {
database.close();
}
database = null;
instance = null;
}
public static long create(Alarm alarm) {
ContentValues cv = new ContentValues();
cv.put(COLUMN_ALARM_ACTIVE, alarm.getAlarmActive());
cv.put(COLUMN_ALARM_TIME, alarm.getAlarmTimeString());
cv.put(COLUMN_ALARM_ID, alarm.getId());
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = null;
oos = new ObjectOutputStream(bos);
oos.writeObject(alarm.getDays());
byte[] buff = bos.toByteArray();
cv.put(COLUMN_ALARM_DAYS, buff);
} catch (Exception e){
}
cv.put(COLUMN_ALARM_DIFFICULTY, alarm.getDifficulty().ordinal());
cv.put(COLUMN_ALARM_TONE, alarm.getAlarmTonePath());
cv.put(COLUMN_ALARM_VIBRATE, alarm.getVibrate());
cv.put(COLUMN_ALARM_NAME, alarm.getAlarmName());
return getDatabase().insert(ALARM_TABLE, null, cv);
}
public static int update(Alarm alarm) {
ContentValues cv = new ContentValues();
cv.put(COLUMN_ALARM_ACTIVE, alarm.getAlarmActive());
cv.put(COLUMN_ALARM_TIME, alarm.getAlarmTimeString());
cv.put(COLUMN_ALARM_ID, alarm.getId());
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = null;
oos = new ObjectOutputStream(bos);
oos.writeObject(alarm.getDays());
byte[] buff = bos.toByteArray();
cv.put(COLUMN_ALARM_DAYS, buff);
} catch (Exception e){
}
cv.put(COLUMN_ALARM_DIFFICULTY, alarm.getDifficulty().ordinal());
cv.put(COLUMN_ALARM_TONE, alarm.getAlarmTonePath());
cv.put(COLUMN_ALARM_VIBRATE, alarm.getVibrate());
cv.put(COLUMN_ALARM_NAME, alarm.getAlarmName());
return getDatabase().update(ALARM_TABLE, cv, "_id=" + alarm.getId(), null);
}
public static int deleteEntry(Alarm alarm){
return deleteEntry(alarm.getId());
}
public static int deleteEntry(int id){
return getDatabase().delete(ALARM_TABLE, COLUMN_ALARM_ID + "=" + id, null);
}
public static int deleteAll(){
return getDatabase().delete(ALARM_TABLE, "1", null);
}
public static Alarm alarm(int id) {
// TODO Auto-generated method stub
String[] columns = new String[] {
COLUMN_ALARM_ID,
COLUMN_ALARM_ACTIVE,
COLUMN_ALARM_TIME,
COLUMN_ALARM_DAYS,
COLUMN_ALARM_DIFFICULTY,
COLUMN_ALARM_TONE,
COLUMN_ALARM_VIBRATE,
COLUMN_ALARM_NAME
};
Cursor c = getDatabase().query(ALARM_TABLE, columns, COLUMN_ALARM_ID+"="+id, null, null, null,
null);
Alarm alarm = null;
if(c.moveToFirst()){
alarm = new Alarm();
alarm.setId(c.getInt(1));
alarm.setAlarmActive(c.getInt(2)==1);
alarm.setAlarmTime(c.getString(3));
byte[] repeatDaysBytes = c.getBlob(4);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(repeatDaysBytes);
try {
ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
Alarm.Day[] repeatDays;
Object object = objectInputStream.readObject();
if(object instanceof Alarm.Day[]){
repeatDays = (Alarm.Day[]) object;
alarm.setDays(repeatDays);
}
} catch (StreamCorruptedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
alarm.setDifficulty(Difficulty.values()[c.getInt(5)]);
alarm.setAlarmTonePath(c.getString(6));
alarm.setVibrate(c.getInt(7)==1);
alarm.setAlarmName(c.getString(8));
}
c.close();
return alarm;
}
public static Cursor getCursor() {
// TODO Auto-generated method stub
String[] columns = new String[] {
COLUMN_ALARM_ID,
COLUMN_ALARM_ACTIVE,
COLUMN_ALARM_TIME,
COLUMN_ALARM_DAYS,
COLUMN_ALARM_DIFFICULTY,
COLUMN_ALARM_TONE,
COLUMN_ALARM_VIBRATE,
COLUMN_ALARM_NAME
};
return getDatabase().query(ALARM_TABLE, columns, null, null, null, null,
null);
}
public Database(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public long insertNote(String alarmName) {
// get writable database as we want to write data
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
// `id` and `timestamp` will be inserted automatically.
// no need to add them
values.put(Database.DATABASE_NAME, alarmName);
// insert row
long id = db.insert(Database.DATABASE_NAME, null, values);
// close db connection
db.close();
// return newly inserted row id
return id;
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("CREATE TABLE IF NOT EXISTS " + ALARM_TABLE + " ( "
+ COLUMN_ALARM_ID + " INTEGER primary key autoincrement, "
+ COLUMN_ALARM_ACTIVE + " INTEGER NOT NULL, "
+ COLUMN_ALARM_TIME + " TEXT NOT NULL, "
+ COLUMN_ALARM_DAYS + " BLOB NOT NULL, "
+ COLUMN_ALARM_DIFFICULTY + " INTEGER NOT NULL, "
+ COLUMN_ALARM_TONE + " TEXT NOT NULL, "
+ COLUMN_ALARM_VIBRATE + " INTEGER NOT NULL, "
+ COLUMN_ALARM_NAME + " TEXT NOT NULL)");
db.execSQL("INSERT INTO alarm VALUES ( 1, 1, '5:15','"+Alarm.Day.FRIDAY+"', 0, 'content', 1, 'Fazr')");
db.execSQL("INSERT INTO alarm VALUES ( 2, 1, '13:15','"+Alarm.Day.FRIDAY+"', 0, 'content', 1, 'Dhuhr')");
db.execSQL("INSERT INTO alarm VALUES ( 3, 1, '16:45','"+Alarm.Day.FRIDAY+"', 0, 'content', 1, 'Asr')");
db.execSQL("INSERT INTO alarm VALUES ( 4, 1, '18:15','"+Alarm.Day.FRIDAY+"', 0, 'content', 1, 'Maghrib')");
db.execSQL("INSERT INTO alarm VALUES ( 5, 1, '19:45','"+Alarm.Day.FRIDAY+"', 0, 'content', 1, 'Isha')");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + ALARM_TABLE);
onCreate(db);
}
public static List<Alarm> getAll() {
List<Alarm> alarms = new ArrayList<Alarm>();
Cursor cursor = Database.getCursor();
if (cursor.moveToFirst()) {
do {
// COLUMN_ALARM_ID,
// COLUMN_ALARM_ACTIVE,
// COLUMN_ALARM_TIME,
// COLUMN_ALARM_DAYS,
// COLUMN_ALARM_DIFFICULTY,
// COLUMN_ALARM_TONE,
// COLUMN_ALARM_VIBRATE,
// COLUMN_ALARM_NAME
Alarm alarm = new Alarm();
alarm.setId(cursor.getInt(0));
alarm.setAlarmActive(cursor.getInt(1) == 1);
alarm.setAlarmTime(cursor.getString(2));
byte[] repeatDaysBytes = cursor.getBlob(3);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(
repeatDaysBytes);
try {
ObjectInputStream objectInputStream = new ObjectInputStream(
byteArrayInputStream);
Alarm.Day[] repeatDays;
Object object = objectInputStream.readObject();
if (object instanceof Alarm.Day[]) {
repeatDays = (Alarm.Day[]) object;
alarm.setDays(repeatDays);
}
} catch (StreamCorruptedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
alarm.setDifficulty(Difficulty.values()[cursor.getInt(4)]);
alarm.setAlarmTonePath(cursor.getString(5));
alarm.setVibrate(cursor.getInt(6) == 1);
alarm.setAlarmName(cursor.getString(7));
alarms.add(alarm);
} while (cursor.moveToNext());
}
cursor.close();
return alarms;
}
AlarmAlertActivity. java
public class AlarmAlertActivity extends Activity implements OnClickListener {
private Alarm alarm = new Alarm();
private MediaPlayer mediaPlayer;
private StringBuilder answerBuilder = new StringBuilder();
private MathProblem mathProblem;
private Vibrator vibrator;
private boolean alarmActive;
private TextView problemView;
private TextView answerView;
private String answerString;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
setContentView(R.layout.alarm_alert);
Bundle bundle = this.getIntent().getExtras();
alarm = (Alarm) (bundle.getSerializable("alarm"));
mediaPlayer = new MediaPlayer();
alarm = new Alarm();
((Button) findViewById(R.id.Button_clear)).setOnClickListener(this);
startAlarm(alarm.getId());
}
@Override
protected void onResume() {
super.onResume();
alarmActive = true;
}
private void startAlarm(int id) {
if (id == 1) {
mediaPlayer = MediaPlayer.create(AlarmAlertActivity.this, R.raw.adhan_fajr);
mediaPlayer.start();
} else{
mediaPlayer=MediaPlayer.create(AlarmAlertActivity.this,R.raw.adhan);
}
mediaPlayer.start();
}
/*
* (non-Javadoc)
*
* @see android.app.Activity#onBackPressed()
*/
@Override
public void onBackPressed() {
if (!alarmActive)
super.onBackPressed();
}
/*
* (non-Javadoc)
*
* @see android.app.Activity#onPause()
*/
@Override
protected void onPause() {
super.onPause();
StaticWakeLock.lockOff(this);
}
@Override
protected void onDestroy() {
try {
if (vibrator != null)
vibrator.cancel();
} catch (Exception e) {
}
try {
mediaPlayer.stop();
} catch (Exception e) {
}
try {
mediaPlayer.release();
} catch (Exception e) {
}
super.onDestroy();
}
@Override
public void onClick(View v) {
if (!alarmActive)
return;
/*String button = (String) v.getTag();
v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
if (button.equalsIgnoreCase("clear")) {
if (answerBuilder.length() > 0) {
answerBuilder.setLength(answerBuilder.length() - 1);
answerView.setText(answerBuilder.toString());
}
} else if (button.equalsIgnoreCase(".")) {
if (!answerBuilder.toString().contains(button)) {
if (answerBuilder.length() == 0)
answerBuilder.append(0);
answerBuilder.append(button);
answerView.setText(answerBuilder.toString());
}
} else if (button.equalsIgnoreCase("-")) {
if (answerBuilder.length() == 0) {
answerBuilder.append(button);
answerView.setText(answerBuilder.toString());
}
} else {
answerBuilder.append(button);
answerView.setText(answerBuilder.toString());
if (isAnswerCorrect()) {
alarmActive = false;
if (vibrator != null)
vibrator.cancel();
try {
mediaPlayer.stop();
} catch (IllegalStateException ise) {
}
try {
mediaPlayer.release();
} catch (Exception e) {
}
this.finish();
}
}
if (answerView.getText().length() >= answerString.length()
&& !isAnswerCorrect()) {
answerView.setTextColor(Color.RED);
} else {
answerView.setTextColor(Color.BLACK);
}*/
String button = (String) v.getTag();
v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
if (button.equalsIgnoreCase("clear")) {
alarmActive = false;
if (vibrator != null)
vibrator.cancel();
try {
mediaPlayer.stop();
} catch (IllegalStateException ise) {
}
try {
mediaPlayer.release();
} catch (Exception e) {
}
this.finish();
//System.exit(0);
}
}
public boolean isAnswerCorrect() {
boolean correct = false;
try {
correct = mathProblem.getAnswer() == Float.parseFloat(answerBuilder
.toString());
} catch (NumberFormatException e) {
return false;
} catch (Exception e) {
e.printStackTrace();
return false;
}
return correct;
}
}
Тревога. java
public class Alarm implements Serializable {
public enum Difficulty{
EASY,
MEDIUM,
HARD;
@Override
public String toString() {
switch(this.ordinal()){
case 0:
return "Easy";
case 1:
return "Medium";
case 2:
return "Hard";
}
return super.toString();
}
}
public enum Day{
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY;
@Override
public String toString() {
switch(this.ordinal()){
case 0:
return "Sunday";
case 1:
return "Monday";
case 2:
return "Tuesday";
case 3:
return "Wednesday";
case 4:
return "Thursday";
case 5:
return "Friday";
case 6:
return "Saturday";
}
return super.toString();
}
}
private static final long serialVersionUID = 8699489847426803789L;
private int id;
private Boolean alarmActive = true;
private Calendar alarmTime = Calendar.getInstance();
private Day[] days = {Day.MONDAY,Day.TUESDAY,Day.WEDNESDAY,Day.THURSDAY,Day.FRIDAY,Day.SATURDAY,Day.SUNDAY};
private String alarmTonePath = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM).toString();
private Boolean vibrate = true;
private String alarmName = "";
private Difficulty difficulty = Difficulty.EASY;
public Alarm() {
}
// private void writeObject(java.io.ObjectOutputStream out) throws IOException {
// out.defaultWriteObject();
// out.writeObject(getAlarmToneUri().getEncodedPath());
// }
// private void readObject(java.io.ObjectInputStream in) throws IOException {
// try {
// in.defaultReadObject();
// this.setAlarmToneUri(Uri.parse(in.readObject().toString()));
// } catch (ClassNotFoundException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
/**
* @return the alarmActive
*/
public Boolean getAlarmActive() {
return alarmActive;
}
/**
* @param alarmActive
* the alarmActive to set
*/
public void setAlarmActive(Boolean alarmActive) {
this.alarmActive = alarmActive;
}
/**
* @return the alarmTime
*/
public Calendar getAlarmTime() {
if (alarmTime.before(Calendar.getInstance()))
alarmTime.add(Calendar.DAY_OF_MONTH, 1);
while(!Arrays.asList(getDays()).contains(Day.values()[alarmTime.get(Calendar.DAY_OF_WEEK)-1])){
alarmTime.add(Calendar.DAY_OF_MONTH, 1);
}
return alarmTime;
}
/**
* @return the alarmTime
*/
public String getAlarmTimeString() {
String time = "";
if (alarmTime.get(Calendar.HOUR_OF_DAY) <= 9)
time += "0";
time += String.valueOf(alarmTime.get(Calendar.HOUR_OF_DAY));
time += ":";
if (alarmTime.get(Calendar.MINUTE) <= 9)
time += "0";
time += String.valueOf(alarmTime.get(Calendar.MINUTE));
return time;
}
/**
* @param alarmTime
* the alarmTime to set
*/
public void setAlarmTime(Calendar alarmTime) {
this.alarmTime = alarmTime;
}
/**
* @param alarmTime
* the alarmTime to set
*/
public void setAlarmTime(String alarmTime) {
String[] timePieces = alarmTime.split(":");
Calendar newAlarmTime = Calendar.getInstance();
newAlarmTime.set(Calendar.HOUR_OF_DAY,
Integer.parseInt(timePieces[0]));
newAlarmTime.set(Calendar.MINUTE, Integer.parseInt(timePieces[1]));
newAlarmTime.set(Calendar.SECOND, 0);
setAlarmTime(newAlarmTime);
}
/**
* @return the repeatDays
*/
public Day[] getDays() {
return days;
}
public void setDays(Day[] days) {
this.days = days;
}
public void addDay(Day day){
boolean contains = false;
for(Day d : getDays())
if(d.equals(day))
contains = true;
if(!contains){
List<Day> result = new LinkedList<Day>();
for(Day d : getDays())
result.add(d);
result.add(day);
setDays(result.toArray(new Day[result.size()]));
}
}
public void removeDay(Day day) {
List<Day> result = new LinkedList<Day>();
for(Day d : getDays())
if(!d.equals(day))
result.add(d);
setDays(result.toArray(new Day[result.size()]));
}
/**
* @return the alarmTonePath
*/
public String getAlarmTonePath() {
return alarmTonePath;
}
/**
* @param alarmTonePath the alarmTonePath to set
*/
public void setAlarmTonePath(String alarmTonePath) {
this.alarmTonePath = alarmTonePath;
}
/**
* @return the vibrate
*/
public Boolean getVibrate() {
return vibrate;
}
/**
* @param vibrate
* the vibrate to set
*/
public void setVibrate(Boolean vibrate) {
this.vibrate = vibrate;
}
/**
* @return the alarmName
*/
public String getAlarmName() {
return alarmName;
}
/**
* @param alarmName
* the alarmName to set
*/
public void setAlarmName(String alarmName) {
this.alarmName = alarmName;
}
public Difficulty getDifficulty() {
return difficulty;
}
public void setDifficulty(Difficulty difficulty) {
this.difficulty = difficulty;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getRepeatDaysString() {
StringBuilder daysStringBuilder = new StringBuilder();
if(getDays().length == Day.values().length){
daysStringBuilder.append("Every Day");
}else{
Arrays.sort(getDays(), new Comparator<Day>() {
@Override
public int compare(Day lhs, Day rhs) {
return lhs.ordinal() - rhs.ordinal();
}
});
for(Day d : getDays()){
switch(d){
case TUESDAY:
case THURSDAY:
// daysStringBuilder.append(d.toString().substring(0, 4));
// break;
default:
daysStringBuilder.append(d.toString().substring(0, 3));
break;
}
daysStringBuilder.append(',');
}
daysStringBuilder.setLength(daysStringBuilder.length()-1);
}
return daysStringBuilder.toString();
}
public void schedule(Context context) {
setAlarmActive(true);
Intent myIntent = new Intent(context, AlarmAlertBroadcastReciever.class);
myIntent.putExtra("alarm", this);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, myIntent,PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, getAlarmTime().getTimeInMillis(), pendingIntent);
}
public String getTimeUntilNextAlarmMessage(){
long timeDifference = getAlarmTime().getTimeInMillis() - System.currentTimeMillis();
long days = timeDifference / (1000 * 60 * 60 * 24);
long hours = timeDifference / (1000 * 60 * 60) - (days * 24);
long minutes = timeDifference / (1000 * 60) - (days * 24 * 60) - (hours * 60);
long seconds = timeDifference / (1000) - (days * 24 * 60 * 60) - (hours * 60 * 60) - (minutes * 60);
String alert = "Alarm will sound in ";
if (days > 0) {
alert += String.format(
"%d days, %d hours, %d minutes and %d seconds", days,
hours, minutes, seconds);
} else {
if (hours > 0) {
alert += String.format("%d hours, %d minutes and %d seconds",
hours, minutes, seconds);
} else {
if (minutes > 0) {
alert += String.format("%d minutes, %d seconds", minutes,
seconds);
} else {
alert += String.format("%d seconds", seconds);
}
}
}
return alert;
}
}