我怎么能在事件发生时在android中调用我的报警? [英] How can i call my alarm at the time of event occurs in android?

查看:157
本文介绍了我怎么能在事件发生时在android中调用我的报警?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

说明:
我在我的应用程序中创建了一个日历,它在一个月的特定日期提供诸如添加和删除事件的功能。
此事件保存在我的SQLite数据库中,并显示在db.Whatever中,我几乎解释了我做的事情。



我想要什么? / strong>



假设我在2016年12月14日添加了我的朋友的生日活动,因此,当我的朋友生日到达时,



我想要在特定日期触发该事件,例如闹钟。

p>

  public class CalendarFragment extends Fragment {

查看rootView;
String str_date =;
String month =;
String year =;
ListView event_list;
String parts [];
String monthYear =;
String monthAyear =;

private SimpleDateFormat dateFormatForMonth = new SimpleDateFormat(MMM - yyyy,Locale.getDefault());
EventAdapter adapter = null;
DatabaseHandler db = null;

List< Event> list_data;
@Override
public void onCreate(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState){
rootView = inflater .inflate(R.layout.fragment_calendar,container,false);

event_list =(ListView)rootView.findViewById(R.id.event_listview);


final ImageButton showPreviousMonthBut =(ImageButton)rootView.findViewById(R.id.prev_button);
final ImageButton showNextMonthBut =(ImageButton)rootView.findViewById(R.id.next_button);

db = new DatabaseHandler(getContext());
final TextView year_name =(TextView)rootView.findViewById(R.id.year_name);

final CompactCalendarView compactCalendarView =(CompactCalendarView)rootView.findViewById(R.id.compactcalendar_view);
compactCalendarView.drawSmallIndicatorForEvents(true);
compactCalendarView.setCurrentDayBackgroundColor(getResources()。getColor(R.color.black));

compactCalendarView.setCurrentSelectedDayBackgroundColor(getResources()。getColor(R.color.dark_red));

compactCalendarView.invalidate();

year_name.setText(dateFormatForMonth.format(compactCalendarView.getFirstDayOfCurrentMonth()));
monthYear = dateFormatForMonth.format(compactCalendarView.getFirstDayOfCurrentMonth());

parts = monthYear.split( - );
month = parts [0] .replace(,);
year = parts [1] .replace(,);

monthAyear = month + - + year;
list_data = db.getAllEvents();

showData(monthAyear);
compactCalendarView.setListener(new CompactCalendarView.CompactCalendarViewListener(){
@Override
public void onDayClick(Date dateClicked){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dd-MMM-yyyy );
str_date = simpleDateFormat.format(dateClicked);
dialogShow();

}

@Override
public void onMonthScroll日期firstDayOfNewMonth){
monthYear = dateFormatForMonth.format(firstDayOfNewMonth);
parts = monthYear.split( - );
month = parts [0] .replace(, );
year = parts [1] .replace(,);
monthAyear = month + - + year;
showData(monthAyear);
year_name。 setText(dateFormatForMonth.format(firstDayOfNewMonth));
}
});

showPreviousMonthBut.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
compactCalendarView.showPreviousMonth();
}
});

showNextMonthBut.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
compactCalendarView.showNextMonth();
}
});

//
return rootView;
}
public void dialogShow(){

final Dialog dialog = new Dialog(getContext());
dialog.setContentView(R.layout.dialog_layout);
dialog.setTitle(Add Event);

final TextView event_name =(TextView)dialog.findViewById(R.id.event_name);
final TextView event_desc =(TextView)dialog.findViewById(R.id.event_description);
final TextView event_date =(TextView)dialog.findViewById(R.id.event_date);

event_date.setText(str_date);
Button btn_save =(Button)dialog.findViewById(R.id.btn_save);

btn_save.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
db.addEvent(new Event(event_name。 getText()。toString(),event_desc.getText()。toString(),event_date.getText()。toString(),monthAyear));
dialog.hide();
Toast.makeText getContext(),Event added successfully ....,Toast.LENGTH_SHORT).show();
showData(monthAyear);
}
}
dialog.show();

}
public void showData(String monthWyear){
List< Event> list_data = db.getEvent(monthWyear);
adapter = new EventAdapter(getActivity(),list_data);
event_list.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater){
menu.findItem(R.id.spinner).setVisible(false);
super.onCreateOptionsMenu(menu,inflater)
}
}

请帮帮我。

解决方案

您需要使用AlarmManager类通过推送通知通知用户:



因此,要使这个工作,你需要传递时间以毫秒表示您的目标日期例如:2016年12月24日 - >转换为毫秒,并将其传递给AlaramManager

 私人日历日历; 
calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY,hourOfDay);
calendar.set(Calendar.MINUTE,minute);
calendar.set(Calendar.MONTH,month);
calendar.set(Calendar.YEAR,year);
calendar.set(Calendar.DAY_OF_MONTH,day);
delay = calendar.getTimeInMillis();

public class SetUpNotification {

public void setAlarm(long delay,String taskName,String taskDetails,Context context)
{
Intent alertIntent = new Intent (context,AlertReceiver.class);
alertIntent.putExtra(TaskName,taskName);
alertIntent.putExtra(TaskDetails,taskDetails);




AlarmManager alarmManager =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);

finally int _id =(int)System.currentTimeMillis();

Log.d(Delay,delay +);
Log.d(ID,_id +);
alarmManager.set(AlarmManager.RTC_WAKEUP,delay,
PendingIntent.getBroadcast(context,_id,alertIntent,
PendingIntent.FLAG_UPDATE_CURRENT));
}

}

  public class AlertReceiver extends BroadcastReceiver {
static int x = 0;

@Override
public void onReceive(Context context,Intent intent){

String taskName = intent.getStringExtra(TaskName);
String taskDetails = intent.getStringExtra(TaskDetails);

Log.d(BroadcastReceiver,OnRecieve);
createNotification(context,taskName,taskDetails,EatThatFrog);
x ++;
Log.d(X,x +);
}

public void createNotification(Context context,String msg,String msgText,String msgAlert){

PendingIntent notificIntent = PendingIntent.getActivity(context,0,
new Intent(context,DashboardActivity.class),0);

NotificationCompat.Builder mBuilder =
(NotificationCompat.Builder)new NotificationCompat.Builder(context)

.setSmallIcon(R.drawable.notification_icon)
.setContentTitle(msg)
.setTicker(msgAlert)
.setContentText(msgText);

mBuilder.setContentIntent(notificIntent);


mBuilder.setDefaults(Notification.DEFAULT_SOUND);

mBuilder.setAutoCancel(true);

NotificationManager mNotificationManager =
(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify(1 + x,mBuilder.build());

}

}


Explanation: I had created a calendar in my application.Which provides the functionality like add and delete event on the particular day of the month. This event is saved in my SQLite database and display from the db.Whatever, i explained almost things i did.

What i want?

Suppose, i added an event of birthday of my friend on 14th dec in 2016.So, this event will fired at the time when my friend birthday will arrive.

I want to fired that event on particular day like alarm.

Here is my calendar code

public class CalendarFragment extends Fragment{

    View rootView;
    String str_date="";
    String month="";
    String year="";
    ListView event_list;
    String parts[];
    String monthYear="";
    String monthAyear="";

    private SimpleDateFormat dateFormatForMonth = new SimpleDateFormat("MMM - yyyy", Locale.getDefault());
    EventAdapter adapter=null;
    DatabaseHandler db=null;

    List<Event> list_data;
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        rootView=inflater.inflate(R.layout.fragment_calendar, container, false);

        event_list=(ListView)rootView.findViewById(R.id.event_listview);


        final ImageButton showPreviousMonthBut = (ImageButton) rootView.findViewById(R.id.prev_button);
        final ImageButton showNextMonthBut = (ImageButton) rootView.findViewById(R.id.next_button);

        db=new DatabaseHandler(getContext());
        final TextView year_name=(TextView)rootView.findViewById(R.id.year_name);

        final CompactCalendarView compactCalendarView = (CompactCalendarView) rootView.findViewById(R.id.compactcalendar_view);
        compactCalendarView.drawSmallIndicatorForEvents(true);
        compactCalendarView.setCurrentDayBackgroundColor(getResources().getColor(R.color.black));

        compactCalendarView.setCurrentSelectedDayBackgroundColor(getResources().getColor(R.color.dark_red));

        compactCalendarView.invalidate();

        year_name.setText(dateFormatForMonth.format(compactCalendarView.getFirstDayOfCurrentMonth()));
        monthYear=dateFormatForMonth.format(compactCalendarView.getFirstDayOfCurrentMonth());

        parts=monthYear.split("-");
        month=parts[0].replace(" ","");
        year=parts[1].replace(" ","");

        monthAyear=month+"-"+year;
        list_data=db.getAllEvents();

        showData(monthAyear);
        compactCalendarView.setListener(new CompactCalendarView.CompactCalendarViewListener() {
            @Override
            public void onDayClick(Date dateClicked) {
                SimpleDateFormat simpleDateFormat=new SimpleDateFormat("dd-MMM-yyyy");
                str_date=simpleDateFormat.format(dateClicked);
                dialogShow();

            }

            @Override
            public void onMonthScroll(Date firstDayOfNewMonth) {
                monthYear=dateFormatForMonth.format(firstDayOfNewMonth);
                parts=monthYear.split("-");
                month=parts[0].replace(" ","");
                year=parts[1].replace(" ","");
                monthAyear=month+"-"+year;
                showData(monthAyear);
                year_name.setText(dateFormatForMonth.format(firstDayOfNewMonth));
            }
        });

        showPreviousMonthBut.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                compactCalendarView.showPreviousMonth();
            }
        });

        showNextMonthBut.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                compactCalendarView.showNextMonth();
            }
        });

//
        return rootView;
    }
    public void dialogShow(){

        final Dialog dialog=new Dialog(getContext());
        dialog.setContentView(R.layout.dialog_layout);
        dialog.setTitle("Add Event");

        final TextView event_name=(TextView)dialog.findViewById(R.id.event_name);
        final TextView event_desc=(TextView)dialog.findViewById(R.id.event_description);
        final TextView event_date=(TextView)dialog.findViewById(R.id.event_date);

        event_date.setText(str_date);
        Button btn_save=(Button)dialog.findViewById(R.id.btn_save);

        btn_save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                db.addEvent(new Event(event_name.getText().toString(),event_desc.getText().toString(),event_date.getText().toString(),monthAyear));
                dialog.hide();
                Toast.makeText(getContext(), "Event added successfully....", Toast.LENGTH_SHORT).show();
                showData(monthAyear);
            }
        });
        dialog.show();

    }
    public void showData(String monthWyear){
        List<Event> list_data=db.getEvent(monthWyear);
        adapter=new EventAdapter(getActivity(),list_data);
        event_list.setAdapter(adapter);
        adapter.notifyDataSetChanged();
    }
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        menu.findItem(R.id.spinner).setVisible(false);
        super.onCreateOptionsMenu(menu, inflater);
    }
}

Please, help me What will i do?

解决方案

You need to use the AlarmManager Class to notify the user through Push Notifications:

So, to get this working, you need to pass the time in milliseconds which represents your target date e.g : 24 Dec 2016 -> Convert to milliseconds and pass it to the AlaramManager

    private Calendar calendar;
    calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
    calendar.set(Calendar.MINUTE, minute);
    calendar.set(Calendar.MONTH, month);
    calendar.set(Calendar.YEAR, year);
    calendar.set(Calendar.DAY_OF_MONTH, day);
    delay = calendar.getTimeInMillis();

public class SetUpNotification {

public  void setAlarm(long delay, String taskName, String taskDetails, Context context)
{
    Intent alertIntent = new Intent(context, AlertReceiver.class);
    alertIntent.putExtra("TaskName", taskName);
    alertIntent.putExtra("TaskDetails", taskDetails);




    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

    final int _id = (int) System.currentTimeMillis();

    Log.d("Delay", delay+"");
    Log.d("ID", _id+"");
    alarmManager.set(AlarmManager.RTC_WAKEUP, delay,
            PendingIntent.getBroadcast(context, _id, alertIntent,
                    PendingIntent.FLAG_UPDATE_CURRENT));
}

}

public class AlertReceiver extends BroadcastReceiver {
static int x = 0;

@Override
public void onReceive(Context context, Intent intent) {

    String taskName = intent.getStringExtra("TaskName");
    String taskDetails = intent.getStringExtra("TaskDetails");

    Log.d("BroadcastReceiver", "OnRecieve");
    createNotification(context, taskName , taskDetails, "EatThatFrog");
    x++;
    Log.d("X", x+"");
}

public void createNotification(Context context, String msg, String msgText, String msgAlert){

    PendingIntent notificIntent = PendingIntent.getActivity(context, 0,
            new Intent(context, DashboardActivity.class), 0);

    NotificationCompat.Builder mBuilder =
            (NotificationCompat.Builder) new NotificationCompat.Builder(context)

                    .setSmallIcon(R.drawable.notification_icon)
                    .setContentTitle(msg)
                    .setTicker(msgAlert)
                    .setContentText(msgText);

    mBuilder.setContentIntent(notificIntent);


    mBuilder.setDefaults(Notification.DEFAULT_SOUND);

    mBuilder.setAutoCancel(true);

    NotificationManager mNotificationManager =
            (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

    mNotificationManager.notify(1 + x, mBuilder.build());

}

}

这篇关于我怎么能在事件发生时在android中调用我的报警?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆