MainActivity:
- package com.xin.app2;
-
- import android.app.ListActivity;
- import android.content.Context;
- import android.content.Intent;
- import android.database.Cursor;
- import android.database.sqlite.SQLiteDatabase;
- import android.database.sqlite.SQLiteOpenHelper;
- import android.net.Uri;
- import android.os.Bundle;
- import android.support.design.widget.FloatingActionButton;
- import android.support.design.widget.Snackbar;
- import android.support.v4.view.MenuItemCompat;
- import android.support.v7.app.AlertDialog;
- import android.support.v7.widget.SearchView;
- import android.util.Log;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.support.design.widget.NavigationView;
- import android.support.v4.view.GravityCompat;
- import android.support.v4.widget.DrawerLayout;
- import android.support.v7.app.ActionBarDrawerToggle;
- import android.support.v7.app.AppCompatActivity;
- import android.support.v7.widget.Toolbar;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.view.ViewGroup;
- import android.widget.AdapterView;
- import android.widget.BaseAdapter;
- import android.widget.CheckBox;
-
- import android.widget.Filter;
- import android.widget.Filterable;
- import android.widget.ListView;
- import android.widget.TextView;
- import android.widget.Toast;
-
- import com.google.android.gms.ads.AdRequest;
- import com.google.android.gms.ads.AdView;
-
- import java.text.SimpleDateFormat;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.Vector;
-
- public class MainActivity extends AppCompatActivity
- implements NavigationView.OnNavigationItemSelectedListener {
- Vector<DateItem> o ;
- boolean isSelectMode = false ;
- SQLiteDatabase sqLiteDatabase;
- MenuItem[] menuItem ;
- AlarmList alarmList ;
- Cursor c ;
- Context context ;
- private void LoadAdRequest(){
- AdView adView = (AdView)findViewById(R.id.adView);
- adView.loadAd(new AdRequest.Builder().build());
-
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- if(sqLiteDatabase != null){
- sqLiteDatabase.close();
- sqLiteDatabase = null;
- }
- }
- public void WindowView(Intent intent){
- if(intent.getIntExtra("view",-1)>0){
- View v= LayoutInflater.from(this).inflate(R.layout.view,null);
- TextView title = (TextView) v.findViewById(R.id.view_title);
- title.setText(intent.getStringExtra("title"));
- TextView con = (TextView) v.findViewById(R.id.view_content);
- con.setText(intent.getStringExtra("content"));
- AlertDialog.Builder builder = new AlertDialog.Builder(this).setView(v);
- builder.setPositiveButton("close",null);
- AlertDialog dialog = builder.create();
- dialog.getWindow().setDimAmount(0.5f);
- builder.show();
-
- }
- }
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
-
- context = getBaseContext();
- WindowView(getIntent());
- Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);setSupportActionBar(toolbar);
- toolbar.setLogo(R.mipmap.ic_launcher);
- getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.p0502_m));
- LoadAdRequest();
-
-
- final FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
- fab.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
- .setAction("Action", null).show();
- }
- });
-
- DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
-
- final ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
- this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
- drawer.addDrawerListener(toggle);
- toggle.syncState();
-
- NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
- navigationView.setNavigationItemSelectedListener(this);
- navigationView.setItemIconTintList(null);
-
- FloatingActionButton floatingActionButton = (FloatingActionButton) findViewById(R.id.fab);
- floatingActionButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent = new Intent(MainActivity.this, ADD.class);
- startActivity(intent);
- }
- });
-
-
- }
-
- @Override
- protected void onResume() {
- super.onResume();
-
- installation();
- }
- public void setMenuItem(boolean b){
- for(int i =0;i<5;i++) {
- if (i < 2) menuItem[i].setVisible(b);
- else menuItem[i].setVisible(!b);
- }
- }
- public void setCheckCompept(boolean b){
- int isVisible ;
- if(b){
- isVisible = View.VISIBLE ;
- isSelectMode=true;
- }
- else{
- isVisible = View.GONE ;
- isSelectMode=false;
- }
-
- for(DateItem h : o){
- if (h.checkBox != null) {
- h.checkBox.setChecked(false);
- h.checkBox.setVisibility(isVisible);
-
- }
- }
-
- }
- public void installation(){
- o = new Vector<DateItem>();
- MyDataBase myDataBase = new MyDataBase(this,"Alarm_database",null,1);
- sqLiteDatabase = myDataBase.getWritableDatabase();
- c = sqLiteDatabase.query("Alarm_table",new String[]{"id","name","content","date","DateMillSec","MusicName"},null,null,null,null,null);
-
- while(c.moveToNext()){
- o.add(new DateItem(c.getInt(0), new String[]{c.getString(1),c.getString(2),c.getString(3)},c.getLong(4),c.getString(5))) ;
- }
-
- alarmList = new AlarmList();
- listView = (ListView) findViewById(R.id.listview);
- listView.setAdapter(alarmList);
-
- listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){
- @Override
- public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
- setCheckCompept(true);
- setMenuItem(true);
- return true;
- }
- });
-
- listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- Intent Update = new Intent(context, com.xin.app2.Update.class);
- String _id = String.valueOf(o.get(position).id);
- Update.putExtra("id",_id);
- startActivity(Update);
- }
- });
- }
- ListView listView ;
- @Override
- public void onBackPressed() {
- DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
- if (drawer.isDrawerOpen(GravityCompat.START)) {
- drawer.closeDrawer(GravityCompat.START);
- } else {
- super.onBackPressed();
- }
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.main, menu);
- MenuItem menu_Item = menu.findItem(R.id.app_bar_search);
- final SearchView searchView = (SearchView) menu_Item.getActionView();
-
- MenuItemCompat.setOnActionExpandListener(menu_Item, new MenuItemCompat.OnActionExpandListener() {
- @Override
- public boolean onMenuItemActionExpand(MenuItem item) {
- item.setVisible(false);
- return true;
- }
-
- @Override
- public boolean onMenuItemActionCollapse(MenuItem item) {
- setCheckCompept(false);
- invalidateOptionsMenu();
- return true;
- }
- });
-
- searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
- @Override
- public boolean onQueryTextSubmit(String query) {
- return false;
- }
-
- @Override
- public boolean onQueryTextChange(String newText) {
- alarmList.getFilter().filter(newText);
- return false;
- }
- });
-
- menuItem = new MenuItem[5];
- for(int i=0;i<menuItem.length;i++)
- menuItem[i] = menu.getItem(i);
- return true;
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- int id = item.getItemId();
- switch(id){
- case R.id.action_settings:
- startActivity(new Intent(this,Setting.class));
- break;
- case R.id.remove:
- setCheckCompept(true);
- setMenuItem(true);
- return true;
- case R.id.cancelRemove:
- setCheckCompept(false);
- setMenuItem(false);
- return true;
- case R.id.yesRemove:
- boolean isSuccess =false;
-
- for(int i=0;i<o.size();i++){
- if(o.get(i).checkBox.isChecked()){
- isSuccess = sqLiteDatabase.delete("Alarm_table","id = ?",new String[]{String.valueOf(o.get(i).id)})>0?true:false;
- }
- }
- if(isSuccess){
- startActivity(new Intent(this,MainActivity.class));
- Toast.makeText(this,R.string.刪除成功,Toast.LENGTH_SHORT).show();
- finish();
- }
- return true;
- }
-
- return super.onOptionsItemSelected(item);
- }
- public void setCheckVillby(Boolean isopen){
- if(!isopen) {
- for (int i = 0; i < 5; i++) menuItem[i].setVisible(isopen);
- }else {
- for(int i =2;i<4;i++) menuItem[i].setVisible(isopen);
- }
- }
-
- @SuppressWarnings("StatementWithEmptyBody")
- @Override
- public boolean onNavigationItemSelected(MenuItem item) {
-
- int id = item.getItemId();
- switch (id){
- case R.id.setting:
- startActivity(new Intent(this,Setting.class));
- break;
- case R.id.author :
- Intent i = new Intent(Intent.ACTION_VIEW);
- i.setData(Uri.parse("https://xinjava.blogspot.tw/"));
- startActivity(i);
- break;
- case R.id.email:
- Intent emailIntent = new Intent(Intent.ACTION_SENDTO,Uri.parse("mailto:koer3741@gmail.com"));
- emailIntent.putExtra(Intent.EXTRA_SUBJECT, "問題回報");
- emailIntent.putExtra(Intent.EXTRA_TEXT, "撰述您的問題:");
- startActivity(emailIntent);
- break;
- }
-
-
-
-
-
- DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
- drawer.closeDrawer(GravityCompat.START);
- return true;
- }
-
-
- class AlarmList extends BaseAdapter implements Filterable {
- LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
- Vector<DateItem> oringnalList ;
- @Override
- public int getCount() {
- return o.size();
- }
- @Override
- public Object getItem(int position) {
- return o.get(position);
- }
- @Override
- public long getItemId(int position) {
- return o.get(position).id;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
-
- View v = convertView ;
- Holder holder ;
- if(v!=null){
- holder = (Holder) v.getTag();
- }else{
- v = inflater.inflate(R.layout.item,null);
- holder = new Holder();
- holder.id = o.get(position).id;
- holder.textView = (TextView) v.findViewById(R.id.textView2);
- holder.checkBox = (CheckBox) v.findViewById(R.id.checkBox);
- v.setTag(holder);
- }
-
- DateItem dateItem= o.get(position);
- dateItem.checkBox = holder.checkBox ;
-
- if(isSelectMode) dateItem.checkBox.setVisibility(convertView.VISIBLE);
-
- SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd hh:mm a");
- Calendar calendar = Calendar.getInstance();
- calendar.setTimeInMillis(dateItem.SecInMill);
-
- String buffer = dateItem.name ;
-
- if(buffer.contains(MainActivity.this.getResources().getString(R.string.閱讀完畢))){
- buffer = buffer.replace(getString(R.string.閱讀完畢),"");
- holder.textView.setTextColor(getResources().getColor(R.color.white));
- }
- if(buffer.length()>=10) buffer = buffer.substring(0,10);
-
- holder.textView.setText(buffer+"\r\n"+format.format(calendar.getTime()));
-
-
- return v;
- }
- @Override
- public Filter getFilter() {
- Filter filter = new Filter() {
- @Override
- protected FilterResults performFiltering(CharSequence charSequence) {
- FilterResults results = new FilterResults();
- charSequence = charSequence ;
- if(oringnalList == null){
- synchronized (this){
- oringnalList = new Vector<DateItem>(o);
- }
- }
- Vector<DateItem> mListItem ;
- if(charSequence !=null&&charSequence.toString().length()>0){
- synchronized(AlarmList.this){
- mListItem = new Vector<>();
- for(int i=0;i<oringnalList.size();i++){
- if(oringnalList.get(i).name.contains(charSequence))
- mListItem.add(oringnalList.get(i));
- }
- results.count = mListItem.size();
- results.values = mListItem;
- }
- }else {
-
- synchronized (AlarmList.this){
- mListItem = new Vector<>(oringnalList);
- results.count = mListItem.size();
- results.values = mListItem;
- }
- }
-
- return results;
- }
-
- @Override
- protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
- o = (Vector<DateItem>) filterResults.values;
- if(o.size()>0)
- notifyDataSetChanged();
- else
- notifyDataSetInvalidated();
- }
- };
-
- return filter;
- }
- }
- class Holder {
- int id ;
- TextView textView ;
- CheckBox checkBox;
- }
-
-
-
- }
-
- class MyDataBase extends SQLiteOpenHelper {
- private static final String TAG = "MyDataBase have Create ";
- public MyDataBase(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
- super(context, name, factory, version);
- }
-
- @Override
- public void onCreate(SQLiteDatabase db) {
- db.execSQL("CREATE TABLE Alarm_table ( id Integer primary key autoincrement , name text , content text , DateMillSec Integer , MusicName text ,date text )");
- }
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- db.execSQL("DROP TABLE IF EXISTS Alarm_table");
- onCreate(db);
- }
- }
- class DateItem{
- int id ;
- String name , content ,date,MusicName;
- long SecInMill;
- CheckBox checkBox ;
- DateItem(int id ,String[] data,long state,String Music){
- this.id = id;
- name = data[0];
- content = data[1];
- date = data[2];
- SecInMill = state;
- MusicName = Music;
- }
-
- public String getName() {
- return name;
- }
- }
alarm :
package com.xin.app2;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.Build;
import android.support.v4.app.NotificationCompat;
import android.support.v7.app.AlertDialog;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.RemoteViews;
import android.widget.TextView;
import android.widget.Toast;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class alarm extends BroadcastReceiver {
SQLiteDatabase sqLiteDatabase;
SharedPreferences preferences;
@Override public void onReceive(Context context, Intent intent) {
int id ;
if((id = intent.getIntExtra("_id",-1))<0){
Toast.makeText(context,"無",Toast.LENGTH_LONG).show();
return;
}
//客製化按鈕關閉 if(intent.getIntExtra("close",-1)>0){
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
//停止音樂 取消通知 context.stopService(new Intent(context,MusicService.class));
notificationManager.cancel(id);
} else{
if(intent.getStringExtra("MusicUri")!=null){
preferences = context.getSharedPreferences("xin",context.MODE_PRIVATE);
MyDataBase myDataBase = new MyDataBase(context,"Alarm_database",null,1);
sqLiteDatabase = myDataBase.getWritableDatabase();
Uri Music = Uri.parse(intent.getStringExtra("MusicUri"));
String _id = String.valueOf(id);
Cursor c = sqLiteDatabase.query("Alarm_table",new String[]{"id","name","content","date","DateMillSec","MusicName"},"id=?",new String[]{_id},null,null,null);
if(c.getCount()>0){
c.moveToFirst();
//客製化按鈕 Intent intent1 = new Intent(context,alarm.class);
intent1.putExtra("_id",id);
intent1.putExtra("close",555);
intent1.addCategory(Calendar.getInstance().getTime().toString()+id);//分辨不同意圖 PendingIntent pendingIntent = PendingIntent.getBroadcast(context,0,intent1,PendingIntent.FLAG_UPDATE_CURRENT);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.notifity);
String title = c.getString(1).length()>9?c.getString(1).substring(0,9):c.getString(1);
remoteViews.setTextViewText(R.id.textView7,title);
remoteViews.setOnClickPendingIntent(R.id.button5,pendingIntent);
SimpleDateFormat format = new SimpleDateFormat("E hh:mm a");
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(c.getLong(4));
remoteViews.setTextViewText(R.id.textView6,format.format(calendar.getTime()));
Intent open = new Intent(context,MainActivity.class);
open.putExtra("title",c.getString(1));
open.putExtra("content",c.getString(2));
open.putExtra("view",558);
open.addCategory(Calendar.getInstance().getTime().toString()+id);//分辨不同意圖 PendingIntent open_pend = PendingIntent.getActivity(context,0,open,PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.button8,open_pend);
Notification notification = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
notification = new Notification.Builder(context).setSmallIcon(R.mipmap.ic_launcher)
.setCustomBigContentView(remoteViews)
.build();
}else{
notification = new Notification.Builder(context)
.setSmallIcon(R.mipmap.ic_launcher_round)
.setContentTitle(c.getString(1))
.setContentText(c.getString(2))
.setContentIntent(open_pend)
.build();
}
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
isVibrate(context,notification);
notificationManager.notify(id,notification);
playMusic(context,Music);
//刪除資料 removwItem(_id,context,c.getString(1));
//如果活動正使用 就更新 if(getCurrentActivityName(context).equals("com.xin.app2.MainActivity")){
Intent intent2 = new Intent(context, MainActivity.class);
intent2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);//清除之前所有活動 context.startActivity(intent2);
}
}
}
}
}
private void isVibrate(Context context,Notification notification){
if(preferences.getBoolean("isVir",false)){
notification.vibrate = new long[]{100,250,100,500};
}
}
public void playMusic(Context context,Uri Music){
//音樂
Intent MusicIntent = new Intent(context,MusicService.class);
int len = preferences.getInt("Length",25);
if(len<5) len=6;
MusicIntent.putExtra("Length",len);
MusicIntent.setData(Music);
context.startService(MusicIntent);
}
public void removwItem(String id,Context context,String s){
if(preferences.getBoolean("isAuto",false)){
if(sqLiteDatabase.delete("Alarm_table","id=?",new String[]{id})!=-1) Log.d("remove ","Success");
}else{
ContentValues contentValues = new ContentValues();
contentValues.put("name",s+context.getResources().getString(R.string.閱讀完畢));
if(sqLiteDatabase.update("Alarm_table",contentValues,"id=?",new String[]{id})>0)
Log.d("Update ","Success");
}
}
private String getCurrentActivityName(Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Activity.ACTIVITY_SERVICE);
// get the info from the currently running task List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
ComponentName componentInfo = taskInfo.get(0).topActivity;
return componentInfo.getClassName();
}
}
AlarmInitReceiver:
package com.xin.app2;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.icu.text.DateFormat;
import android.os.Build;
import android.util.Log;
import android.widget.Toast;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Vector;
public class AlarmInitReceiver extends BroadcastReceiver {
private SQLiteDatabase sqLiteDatabase;
Vector<DateItem> o ;
@Override public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
MyDataBase myDataBase = new MyDataBase(context, "Alarm_database", null, 1);
SQLiteDatabase sqLiteDatabase = myDataBase.getWritableDatabase();
final Cursor c = sqLiteDatabase.query("Alarm_table",new String[]{"id","name","content","date","DateMillSec","MusicName"},null,null,null,null,null);
while(c.moveToNext()){
if(c.getString(1).contains(context.getResources().getString(R.string.閱讀完畢)))
continue;
Calendar ca = Calendar.getInstance();
ca.setTimeInMillis(c.getLong(4));
Intent intent1 = new Intent(context, alarm.class);
intent1.putExtra("MusicUri",c.getString(5));
intent1.putExtra("_id", c.getInt(0));
intent1.addCategory(ca.getTime().toString()+c.getInt(0));
PendingIntent pi = PendingIntent.getBroadcast(context, c.getInt(0), intent1, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd-HH-mm");
//Toast.makeText(context,format1.format(ca.getTime()),Toast.LENGTH_LONG).show();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,ca.getTimeInMillis(), pi);
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) am.setExact(AlarmManager.RTC_WAKEUP,ca.getTimeInMillis(), pi);
else am.set(AlarmManager.RTC_WAKEUP,ca.getTimeInMillis(), pi);
}
Log.d("Complie"," success");
}
}
}
Setting:
package com.xin.app2;
import android.content.SharedPreferences;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.widget.CompoundButton;
import android.widget.SeekBar;
import android.widget.Switch;
import android.widget.Toast;
public class Setting extends AppCompatActivity {
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setting);
getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.p0502_m));
final Switch Virate = (Switch) findViewById(R.id.switch3);
final SharedPreferences preferences = getSharedPreferences("xin",MODE_PRIVATE);
boolean isVirate = preferences.getBoolean("isVir",false);
if(isVirate){
Virate.setChecked(true);
}else{
Virate.setChecked(false);
}
Virate.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
SharedPreferences.Editor editor = preferences.edit();
if(isChecked){
editor.putBoolean("isVir",true);
}else{
editor.putBoolean("isVir",false);
}
editor.apply();
}
});
///************************************* final Switch AutoDel = (Switch) findViewById(R.id.switch4);
boolean isAuto = preferences.getBoolean("isAuto",false);
if(isAuto){
AutoDel.setChecked(true);
}else{
AutoDel.setChecked(false);
}
AutoDel.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
SharedPreferences.Editor editor = preferences.edit();
if(isChecked){
editor.putBoolean("isAuto",true);
}else{
editor.putBoolean("isAuto",false);
}
editor.apply();
}
});
///************************************* SeekBar Length = (SeekBar) findViewById(R.id.seekBar);
int length = preferences.getInt("Length",25);
Length.setProgress(length);
Length.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
SharedPreferences.Editor editor = preferences.edit();
@Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
editor.putInt("Length", progress);
editor.apply();
}
@Override public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
}
Update:
package com.xin.app2;
import android.app.AlarmManager;
import android.app.DatePickerDialog;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import android.support.annotation.IntegerRes;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Vector;
public class Update extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener,DatePickerDialog.OnDateSetListener {
private SQLiteDatabase sqLiteDatabase;
Vector<DateItem> o ;
CalendarObj calendarObj ;
TextView title ,se_date ,Music;
EditText content ;
private static final int ADD_MUSIC = 5012;
Uri MusicUri ;
public void findViewID(){
title = (TextView) findViewById(R.id.Update_Name);
se_date = (TextView) findViewById(R.id.Update_time);
Music = (TextView) findViewById(R.id.Update_Music_Name);
content = (EditText) findViewById(R.id.Update_Content);
}
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
if(hourOfDay > -1 && view != null ){
calendarObj.hour=hourOfDay;
calendarObj.minute=minute;
Calendar calendar = Calendar.getInstance();
calendar.set(calendarObj.year,calendarObj.month,calendarObj.day,calendarObj.hour,calendarObj.minute);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
se_date.setText( format1.format(calendar.getTime()));
}
}
@Override public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
if(year > -1 && view != null ){
calendarObj = new CalendarObj(year,month,dayOfMonth);
Calendar current = Calendar.getInstance();
current.setTimeInMillis(System.currentTimeMillis());
TimePickerDialog dialog = new TimePickerDialog(this,android.R.style.Theme_Holo_Light_Dialog,this,current.get(Calendar.HOUR_OF_DAY),current.get(Calendar.MINUTE),false);
dialog.setTitle("選擇時間");
dialog.show();
}
}
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode != RESULT_OK) return;
switch (requestCode){
case ADD_MUSIC:
Uri u = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
Ringtone ringtone = RingtoneManager.getRingtone(this,u);
Music = (TextView) findViewById(R.id.Update_Music_Name);
Music.setText(ringtone.getTitle(this));
MusicUri = u ;
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
public void addMusic(View view) {
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_ALARM);
// 列表中不显示"默认铃声"选项,默认是显示的 intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT,
true);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT,false);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_INCLUDE_DRM,
true);
// 设置列表对话框的标题,不设置,默认显示"铃声" intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, R.string.選擇音樂);
startActivityForResult(intent, ADD_MUSIC);
}
public void SelectTime(View view) {
Calendar current = Calendar.getInstance();
current.setTimeInMillis(System.currentTimeMillis());
DatePickerDialog datePickerDialog = new DatePickerDialog(this,this,current.get(Calendar.YEAR),current.get(Calendar.MONTH),current.get(Calendar.DAY_OF_MONTH));
datePickerDialog.setTitle(R.string.選擇日期);
datePickerDialog.show();
}
public int Update(Calendar select_calendar){
String id = getIntent().getStringExtra("id");
ContentValues contentValues = new ContentValues();
contentValues.put("name",title.getText().toString().replace(getString(R.string.閱讀完畢),""));
contentValues.put("content",content.getText().toString());
contentValues.put("date",select_calendar.getTime().toString());
contentValues.put("DateMillSec",select_calendar.getTimeInMillis());
contentValues.put("MusicName",MusicUri.toString());
if(sqLiteDatabase.delete("Alarm_table","id=?",new String[]{id})>0 &&sqLiteDatabase.insert("Alarm_table",null,contentValues) >0){
Cursor c = sqLiteDatabase.query("Alarm_table",new String[]{"id"},null,null,null,null,null);
c.moveToLast();
return c.getInt(0);
}
return -1;
}
public void SetAlarmClock(int id,Calendar select_calendar){
Intent intent = new Intent(this, alarm.class);
intent.putExtra("MusicUri",MusicUri.toString());
intent.putExtra("_id", id);
intent.addCategory(select_calendar.getTime().toString()+id);
PendingIntent pi = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(this.ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,select_calendar.getTimeInMillis(), pi);
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) am.setExact(AlarmManager.RTC_WAKEUP,select_calendar.getTimeInMillis(), pi);
else am.set(AlarmManager.RTC_WAKEUP,select_calendar.getTimeInMillis(), pi);
}
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_update);
getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.p0502_m));
if(getIntent()==null&&getIntent().getStringExtra("id")==null){
Toast.makeText(this,"not found",Toast.LENGTH_SHORT).show();
finish();
}
findViewID();
installation();
}
public void installation(){
String id = getIntent().getStringExtra("id");
o = new Vector<DateItem>();
MyDataBase myDataBase = new MyDataBase(this,"Alarm_database",null,1);
sqLiteDatabase = myDataBase.getWritableDatabase();
Cursor c = sqLiteDatabase.query("Alarm_table",new String[]{"id","name","content","date","DateMillSec","MusicName"},"id = ?",new String[]{id},null,null,null);
c.moveToFirst();
if(c.getCount()>0&&!c.isNull(0)){
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(c.getLong(4));
Date date = new Date(c.getString(3));
Ringtone ringtone = RingtoneManager.getRingtone(this, Uri.parse(c.getString(5)));
MusicUri = Uri.parse(c.getString(5));
title.setText(c.getString(1).replace(getString(R.string.閱讀完畢),""));
se_date.setText(format1.format(calendar.getTime()));
content.setText(c.getString(2));
Music.setText(ringtone.getTitle(this));
//讀取時間放入物件 calendarObj = new CalendarObj(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH)
,calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE));
}
}
int[] StringArrayToIntArray(String[] s)
{
int[] ints = new int[s.length];
for(String c : s) ints[0] = Integer.parseInt(c);
return ints ;
}
public void Update_OK(View view) {
Intent i = new Intent(this,MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
try{
if(title.getText().toString().equals("")){
title.setText(R.string.無標題);
}else if(title.getText().toString().length()>13){
title.setText(R.string.字數過長);
}else if(title.getText().toString().contains(getString(R.string.閱讀完畢))){
title.setText("TITLE ERROR");
}else if(title.getText().toString().equals("time")){
Toast.makeText(this,R.string.選擇日期,Toast.LENGTH_SHORT).show();
}else if(MusicUri==null){
Toast.makeText(this,R.string.選擇音樂,Toast.LENGTH_SHORT).show();
} else {
Calendar select_calendar = Calendar.getInstance();
select_calendar.set(calendarObj.year,calendarObj.month,calendarObj.day,calendarObj.hour,calendarObj.minute);
int id = Update(select_calendar) ;
if(id ==-1){
Toast.makeText(this,R.string.更新失敗,Toast.LENGTH_SHORT).show();
}else{
SetAlarmClock(id,select_calendar);
Toast.makeText(this,R.string.更新成功,Toast.LENGTH_SHORT).show();
}
startActivity(i);
}
}catch (Exception e){
Toast.makeText(this,R.string.更新失敗,Toast.LENGTH_SHORT).show();
startActivity(i);
}
}
private void Back(){
Intent i = new Intent(this,MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
public void Update_remove(View view) {
String id = getIntent().getStringExtra("id");
if(sqLiteDatabase.delete("Alarm_table","id = ? ",new String[]{id}) > 0){
Toast.makeText(this,"刪除成功",Toast.LENGTH_SHORT).show();
}else Toast.makeText(this,"刪除失敗",Toast.LENGTH_SHORT).show();
Back();
}
public void Update_Cancel(View view) {
Back();
}
}
ADD:
package com.xin.app2;
import android.Manifest;
import android.app.AlarmManager;
import android.app.DatePickerDialog;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.content.ContentValues;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.ColorStateList;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class ADD extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener,DatePickerDialog.OnDateSetListener {
private static final int ADD_MUSIC = 5012;
SQLiteDatabase sqLiteDatabase;
TextView time ;
EditText name , content ;
CalendarObj calendarObj ;
TextView textView5 ;
private final int MAIN = 2032;
Uri MusicUri ;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.p0502_m));
MyDataBase myDataBase = new MyDataBase(this,"Alarm_database",null,1);
sqLiteDatabase = myDataBase.getWritableDatabase();
time = (TextView) findViewById(R.id.textView4);
name = (EditText) findViewById(R.id.editText);
content = (EditText) findViewById(R.id.editText3);
}
@Override protected void onDestroy() {
super.onDestroy();
if(sqLiteDatabase != null){
sqLiteDatabase.close();
sqLiteDatabase = null;
}
}
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode != RESULT_OK) return;
switch (requestCode){
case ADD_MUSIC:
Uri u = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
Ringtone ringtone = RingtoneManager.getRingtone(this,u);
textView5 = (TextView) findViewById(R.id.textView5);
textView5.setText(ringtone.getTitle(this));
MusicUri = u ;
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
public void addMusic(View view) {
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_ALARM);
// 列表中不显示"默认铃声"选项,默认是显示的 intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT,
true);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT,false);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_INCLUDE_DRM,
true);
// 设置列表对话框的标题,不设置,默认显示"铃声" intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, R.string.選擇音樂);
startActivityForResult(intent, ADD_MUSIC);
}
public void SelectTime(View view) {
Calendar current = Calendar.getInstance();
current.setTimeInMillis(System.currentTimeMillis());
DatePickerDialog datePickerDialog = new DatePickerDialog(this,this,current.get(Calendar.YEAR),current.get(Calendar.MONTH),current.get(Calendar.DAY_OF_MONTH));
datePickerDialog.setTitle(R.string.選擇日期);
datePickerDialog.show();
}
@Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
if(hourOfDay > -1 && view != null ){
calendarObj.hour=hourOfDay;
calendarObj.minute=minute;
Calendar calendar = Calendar.getInstance();
calendar.set(calendarObj.year,calendarObj.month,calendarObj.day,calendarObj.hour,calendarObj.minute);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
time.setText( format1.format(calendar.getTime()));
}
}
@Override public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
if(year > -1 && view != null ){
calendarObj = new CalendarObj(year,month,dayOfMonth);
Calendar current = Calendar.getInstance();
current.setTimeInMillis(System.currentTimeMillis());
TimePickerDialog dialog = new TimePickerDialog(this,android.R.style.Theme_Holo_Light_Dialog,this,current.get(Calendar.HOUR_OF_DAY),current.get(Calendar.MINUTE),false);
dialog.setTitle(R.string.選擇日期);
dialog.show();
}
}
public int insert(Calendar select_calendar){
ContentValues contentValues = new ContentValues();
contentValues.put("name",name.getText().toString());
contentValues.put("content",content.getText().toString());
contentValues.put("date",select_calendar.getTime().toString());
contentValues.put("DateMillSec",select_calendar.getTimeInMillis());
contentValues.put("MusicName",MusicUri.toString());
if(sqLiteDatabase.insert("Alarm_table",null,contentValues)!=-1 ){
Cursor c = sqLiteDatabase.query("Alarm_table",new String[]{"id"},null,null,null,null,null);
c.moveToLast();
Toast.makeText(this,R.string.新增成功,Toast.LENGTH_SHORT).show();
return c.getInt(0);
}
return -1;
}
public void SetAlarmClock(int id,Calendar select_calendar){
Intent intent = new Intent(this, alarm.class);
intent.putExtra("MusicUri",MusicUri.toString());
intent.putExtra("_id", id);
intent.addCategory(select_calendar.getTime().toString()+id);
PendingIntent pi = PendingIntent.getBroadcast(this,id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(this.ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,select_calendar.getTimeInMillis(), pi);
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) am.setExact(AlarmManager.RTC_WAKEUP,select_calendar.getTimeInMillis(), pi);
else am.set(AlarmManager.RTC_WAKEUP,select_calendar.getTimeInMillis(), pi);
}
public void addItem(View view) {
if(name.getText().toString().equals("")){
name.setText(R.string.無標題);
}else if(name.getText().toString().length()>13){
name.setText(R.string.字數過長);
}else if(name.getText().toString().toString().contains(getString(R.string.閱讀完畢))){
name.setText("TITLE ERROR");
} else if(time.getText().toString().equals("time")){
Toast.makeText(this,R.string.選擇日期,Toast.LENGTH_SHORT).show();
}else if(MusicUri==null){
Toast.makeText(this,R.string.選擇音樂,Toast.LENGTH_SHORT).show();
} else {
Calendar select_calendar = Calendar.getInstance();
select_calendar.set(calendarObj.year,calendarObj.month,calendarObj.day,calendarObj.hour,calendarObj.minute);
int id = insert(select_calendar) ;
if(id ==-1){
Toast.makeText(this,R.string.新增失敗,Toast.LENGTH_SHORT).show();
}else{
SetAlarmClock(id,select_calendar);
}
Back();
}
}
private void Back(){
Intent i = new Intent(this,MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
public void CANCEL(View view) {
Back();
}
}
class CalendarObj {
int year, month, day, hour, minute;
CalendarObj(int y, int m, int day) {
year = y;
month = m;
this.day = day;
}
CalendarObj(int y, int m, int day,int h ,int minute) {
year = y;
month = m;
this.day = day;
hour = h ;
this.minute = minute ;
}
}
MusicService:
package com.xin.app2;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.IBinder;
import android.support.annotation.IntDef;
public class MusicService extends Service implements MediaPlayer.OnCompletionListener{
MediaPlayer mediaPlayer ;
public MusicService() {
}
@Override public IBinder onBind(Intent intent) {
return null;
}
public void stopMusic(){
if(mediaPlayer!=null){
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null ;
}
}
@Override public void onDestroy() {
super.onDestroy();
stopMusic();
}
@Override public void onCreate() {
super.onCreate();
}
@Override public int onStartCommand(Intent intent, int flags, int startId) {
try {
Uri Music = intent.getData();
if(mediaPlayer==null){
mediaPlayer = MediaPlayer.create(this,Music);
mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setLooping(true);
}
mediaPlayer.start();
final int len = intent.getIntExtra("Length",15);
new Thread(new Runnable() {
@Override public void run() {
try {
Thread.currentThread().sleep(len*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
stopMusic();
}
}).start();
}catch (Exception e){
e.printStackTrace();
}
return START_STICKY;
}
@Override public void onCompletion(MediaPlayer mp) {
}
}
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。