1

Android プロジェクトにスケジュール機能を実装したいと考えています。そこで、アラーム マネージャ プログラムを探しましたが、問題を解決できませんでした。

ユーザーが決定するカスタム時間でアラームを設定したい。service と BroadcastReciver の 2 つのクラスを作成しました。しかし、アラームは間違っています。たとえば、アラームに2分を設定していますが、アプリの任意は機能します.eg 2分または3分または5分または1分....

主な活動:

SharedPreferences preferences1 = getSharedPreferences("min", 0);

String min1 = preferences1.getString("minute", "");

if (min1.length() <= 0) {

    s = 120000;

} else {

    s = Long.parseLong(min1);
    s = s * 60000;

}

t = new Timer();
// Set the schedule function and rate
t.scheduleAtFixedRate(new TimerTask() {

    @Override
    public void run() {
        // Called each time when 1000 milliseconds (1 second)
        // (the period parameter)

        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.SECOND, 10);
        Intent intent = new Intent(CategoryListActivity.this,
                Service_class.class);

        PendingIntent pintent = PendingIntent.getService(
                CategoryListActivity.this, 0, intent, 0);
        AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        alarm.setRepeating(AlarmManager.RTC_WAKEUP,
                cal.getTimeInMillis(), s, pintent);

        Log.e("Timer", t.toString());
    }

},
// Set how long before to start calling the TimerTask (in
// milliseconds)
        0,
        // Set the amount of time between each execution (in
        // milliseconds)
        s);

service_class.java :

@Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO Auto-generated method stub
        dbflash = new DatabaseFlashCard(getApplicationContext());
        db = dbflash.getReadableDatabase();

        SharedPreferences preferences_notify = getSharedPreferences("notify", 0);
        Calendar c = Calendar.getInstance();
        String time_one = preferences_notify.getString("time_first", "");
        String time_two = preferences_notify.getString("time_second", "");
        int hour = c.get(Calendar.HOUR_OF_DAY);

        if (time_one.length() <= 0) {
            time_one = "21";
        }

        if (time_two.length() <= 0) {
            time_two = "5";
        } 

        int timeFirst = Integer.parseInt(time_one);
        int timeSecond = Integer.parseInt(time_two);

        if (hour < timeFirst && hour > timeSecond) {

            // nothing

        } else {

            // notify and alert


            preferences_language = getSharedPreferences("language_sql", 0);
            editor_language = preferences_language.edit();
            String language = preferences_language.getString("language", "");


            String sql="SELECT * FROM " + dbflash.TABLE
                    + "  where hide='0'  ORDER BY RANDOM() LIMIT 1";

            if(language.length()>0)
            {


                if(language.equalsIgnoreCase("0"))
                {

                     sql="SELECT * FROM " + dbflash.TABLE
                            + "  where hide='0'  ORDER BY RANDOM() LIMIT 1";


                }
                else
                {

                     sql="SELECT * FROM " + dbflash.TABLE
                                + "  where ids="+language+" and hide='0'  ORDER BY RANDOM() LIMIT 1";

                }


            Cursor cursors = db.rawQuery(sql, null);
            for (int i = 0; i < cursors.getCount(); i++) {
                cursors.moveToNext();
                ID = cursors.getString(cursors.getColumnIndex("ID"));
                farsi = cursors.getString(cursors.getColumnIndex("farsi"));
                english = cursors.getString(cursors.getColumnIndex("english"));
                question = cursors
                        .getString(cursors.getColumnIndex("question"));
                count = cursors.getString(cursors.getColumnIndex("count"));

            }



            preferences_status = getSharedPreferences("notify_status", 0);

            String status = preferences_status.getString("status", "");
            SharedPreferences.Editor editor_status;
            editor_status = preferences_status.edit();
            if (status.length() <= 0) {
                status="1";
                editor_status.putString("status", "1");
                editor_status.commit();
                Log.e("Notification Status ", "Enable Now..for First");
            } else if(status.equalsIgnoreCase("0")) {

                Log.e("Notification Status ", "disable");
            }

            else
            {
                Log.e("Notification Status ", "enable");

                if (english==null || english=="") {

                } else {

                    SharedPreferences preferences = getSharedPreferences("music", 0);
                    String address=preferences.getString("address", "");

                    if(address.length()<=0)
                    {
                    mp = MediaPlayer.create(getApplicationContext(), R.raw.ring);
                    mp.start();
                    }

                    else
                    {
                        mp = MediaPlayer.create(getApplicationContext(),Uri.parse(address));
                        mp.start();

                    }

                    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
                    Intent contentIntent = new Intent(this,
                            QuestionActivity.class);
                    contentIntent.putExtra("ID", ID);
                    contentIntent.putExtra("english", english);
                    contentIntent.putExtra("farsi", farsi);
                    contentIntent.putExtra("count", count);
                    contentIntent.putExtra("question", question);
                    Notification notification = new Notification(
                            R.drawable.icon, "یاد آوری",
                            System.currentTimeMillis());
                    notification.setLatestEventInfo(this, english, "",
                            PendingIntent.getActivity(this.getBaseContext(), 0,
                                    contentIntent,
                                    PendingIntent.FLAG_CANCEL_CURRENT));
                    notification.flags = Notification.FLAG_AUTO_CANCEL;
                    notificationManager.notify(SIMPLE_NOTFICATION_ID,
                            notification);

                }
            }
            }

        }

        return START_STICKY;
    }

とマイレシーバー

public class Myreceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub

        Intent serviceLauncher = new Intent(context, Service_class.class);
        context.startService(serviceLauncher);

    }

Android マニフェスト:

   <service android:name=".Service_class" />

        <receiver
            android:name="com.pttat.flashcard.services.Myreceiver"
            android:process=":remote" />

問題を解決するためにコードを変更するにはどうすればよいですか?

Oncreate で Calling Alarm Manager を変更する必要がありますか?

ありがとう

4

0 に答える 0