0

Это мой код время получает от предпочтений и после того, как наборы для правильного формата каландр и после этого выполнить TimerTask установить notificatinКак показать диалог, когда локальное оповещение приходит

public class MyService extends Service { 

    private static final String TAG = "com.wat.compassapp"; 
    private SharedPreferences myPrefs; 
    int mYear, mMonth, mDay, msecs; 
    String fadjrtime, dhuhrtime, asrtime, magrhibtime, ishatime, citygmt; 
    private NotificationManager mManager; 
    private Context context; 
    MediaPlayer mMediaPlayer; 
    Time sqlTime3, fajrsqlTime3, dhuhrsqlTime3, asrsqlTime3, maghribsqlTime3, 
      ishasqlTime3; 
    static long miliSeconds; 
    static Date resultdate; 
    Dialog dialog; 
    AlertDialog.Builder builder; 
    Timer mTimer = new Timer(); 
    TimerTask mDataTask; 
    Calendar c; 
    AlertDialog dail; 

    @Override 
    public void onCreate() { 
     Log.i(TAG, "Service onCreate"); 
     myPrefs = getSharedPreferences("myPrefs", MODE_PRIVATE); 
     mManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
     fadjrtime = myPrefs.getString("fadjrtime", null); 
     dhuhrtime = myPrefs.getString("dhuhrtime", null); 
     asrtime = myPrefs.getString("asrtime", null); 
     magrhibtime = myPrefs.getString("magrhibtime", null); 
     ishatime = myPrefs.getString("ishatime", null); 
     mMediaPlayer = new MediaPlayer(); 
     citygmt = myPrefs.getString("citygmt", null); 
     dialog = new Dialog(getApplicationContext()); 
     // dialog.setContentView(R.layout.) 

     builder = new AlertDialog.Builder(getApplicationContext()) 
       .setTitle("Delete entry") 
       .setMessage("Are you sure you want to delete this entry?") 
       .setPositiveButton(android.R.string.yes, 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, 
            int which) { 
           Toast.makeText(getApplicationContext(), "OK", 
             1000).show(); 

          } 
         }) 
       .setNegativeButton(android.R.string.no, 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, 
            int which) { 
           // do nothing 
          } 
         }).setIcon(android.R.drawable.ic_dialog_alert); 
     dail = builder.create(); 
     dail.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 
     dail.show(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     // TODO Auto-generated method stub 

     Log.d(TAG, "onStart"); 


     final Calendar ca = Calendar.getInstance(); 
     String[] sca = fadjrtime.split(":"); 
     ca.set(Calendar.HOUR_OF_DAY, Integer.parseInt(sca[0])); 
     ca.set(Calendar.MINUTE, Integer.parseInt(sca[1])); 
     ca.set(Calendar.SECOND, 00); 

     SimpleDateFormat ra = new SimpleDateFormat("HH:mm:ss"); 
     String fayourTime = Integer.parseInt(sca[0]) + ":" 
       + Integer.parseInt(sca[1]) + ":00"; 

     Date fayourDate; 
     try { 
      fayourDate = ra.parse(fayourTime); 
      fajrsqlTime3 = new Time(fayourDate.getTime()); 
      Log.d("fajrsqlTime3 on prayerfragment", fajrsqlTime3 + ""); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     final Calendar cal = Calendar.getInstance(); 
     String[] scal = dhuhrtime.split(":"); 
     cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(scal[0])); 
     cal.set(Calendar.MINUTE, Integer.parseInt(scal[1])); 
     cal.set(Calendar.SECOND, 00); 
     String dhyourTime = Integer.parseInt(scal[0]) + ":" 
       + Integer.parseInt(scal[1]) + ":00"; 

     Date dhyourDate; 
     try { 
      dhyourDate = ra.parse(dhyourTime); 
      dhuhrsqlTime3 = new Time(dhyourDate.getTime()); 
      Log.d("dhuhrsqlTime3 on prayerfragment", dhuhrsqlTime3 + ""); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 

     final Calendar cale = Calendar.getInstance(); 
     String[] scale = asrtime.split(":"); 
     cale.set(Calendar.HOUR_OF_DAY, Integer.parseInt(scale[0])); 
     cale.set(Calendar.MINUTE, Integer.parseInt(scale[1])); 
     cale.set(Calendar.SECOND, 00); 
     String asyourTime = Integer.parseInt(scale[0]) + ":" 
       + Integer.parseInt(scale[1]) + ":00"; 

     Date asyourDate; 
     try { 
      asyourDate = ra.parse(asyourTime); 
      asrsqlTime3 = new Time(asyourDate.getTime()); 
      Log.d("asrsqlTime3 on prayerfragment", asrsqlTime3 + ""); 
     } catch (ParseException e) { 

      e.printStackTrace(); 
     } 

     final Calendar calen = Calendar.getInstance(); 
     String[] scalen = magrhibtime.split(":"); 
     calen.set(Calendar.HOUR_OF_DAY, Integer.parseInt(scalen[0])); 
     calen.set(Calendar.MINUTE, Integer.parseInt(scalen[1])); 
     calen.set(Calendar.SECOND, 00); 
     String mayourTime = Integer.parseInt(scalen[0]) + ":" 
       + Integer.parseInt(scalen[1]) + ":00"; 

     Date mayourDate; 
     try { 
      mayourDate = ra.parse(mayourTime); 
      maghribsqlTime3 = new Time(mayourDate.getTime()); 
      Log.d("maghribsqlTime3 on prayerfragment", maghribsqlTime3 + ""); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     final Calendar calend = Calendar.getInstance(); 
     String[] scalend = ishatime.split(":"); 
     calend.set(Calendar.HOUR_OF_DAY, Integer.parseInt(scalend[0])); 
     calend.set(Calendar.MINUTE, Integer.parseInt(scalend[1])); 
     calend.set(Calendar.SECOND, 00); 
     String isyourTime = Integer.parseInt(scalend[0]) + ":" 
       + Integer.parseInt(scalend[1]) + ":00"; 

     Date isyourDate; 
     try { 
      isyourDate = ra.parse(isyourTime); 
      ishasqlTime3 = new Time(isyourDate.getTime()); 
      Log.d("ishasqlTime3 on prayerfragment", ishasqlTime3 + ""); 
     } catch (ParseException e) { 

      e.printStackTrace(); 
     } 
     Log.i(TAG, "Service running"); 

     // Log.i("Service running sqlTime3", sqlTime3 + ""); 
     mDataTask = new MyTimerTask(); 
     mTimer.scheduleAtFixedRate(mDataTask, 0, 1000 /* 60000 */); 

     return START_STICKY; 
    } 

    @Override 
    public void onStart(Intent intent, int startId) { 

    } 

    private class MyTimerTask extends TimerTask { 
     @Override 
     public void run() { 
      if (citygmt != null) { 
       if (citygmt.length() > 0) { 

        Calendar c = Calendar.getInstance(TimeZone 
          .getTimeZone("GMT")); 
        Log.d("citygmt dsfs", citygmt); 
        c.setTimeZone(TimeZone.getTimeZone(citygmt)); 
        System.out.println("The Date in the local time zone " 
          + c.get(Calendar.HOUR_OF_DAY) + ":" 
          + c.get(Calendar.MINUTE) + ":" 
          + c.get(Calendar.SECOND)); 
        String yourTime = c.get(Calendar.HOUR_OF_DAY) + ":" 
          + c.get(Calendar.MINUTE) + ":" 
          + c.get(Calendar.SECOND); 
        // msecs = c.get(Calendar.SECOND); 
        SimpleDateFormat ra = new SimpleDateFormat("HH:mm:ss"); 
        Date yourDate; 
        try { 
         yourDate = ra.parse(yourTime); 
         sqlTime3 = new Time(yourDate.getTime()); 
         Log.d("sqlTime3 on prayerfragment 1", sqlTime3 + ""); 
        } catch (ParseException e) { 

         e.printStackTrace(); 
        } 
        SharedPreferences.Editor editor = myPrefs.edit(); 
        editor.putString("citygmt", ""); 
        editor.commit(); 
       } else { 
        Calendar c = Calendar.getInstance(); 
        mYear = c.get(Calendar.YEAR); 
        mMonth = c.get(Calendar.MONTH); 
        mDay = c.get(Calendar.DAY_OF_MONTH); 
        msecs = c.get(Calendar.SECOND); 
        String yourTime = c.get(Calendar.HOUR_OF_DAY) + ":" 
          + c.get(Calendar.MINUTE) + ":" 
          + c.get(Calendar.SECOND); 
        msecs = c.get(Calendar.SECOND); 
        SimpleDateFormat ra = new SimpleDateFormat("HH:mm:ss"); 
        Date yourDate; 
        try { 
         yourDate = ra.parse(yourTime); 
         sqlTime3 = new Time(yourDate.getTime()); 
         Log.d("sqlTime3 on prayerfragment 2", sqlTime3 + ""); 
        } catch (ParseException e) { 

         e.printStackTrace(); 
        } 

       } 
      } else { 
       Calendar c = Calendar.getInstance(); 
       mYear = c.get(Calendar.YEAR); 
       mMonth = c.get(Calendar.MONTH); 
       mDay = c.get(Calendar.DAY_OF_MONTH); 
       msecs = c.get(Calendar.SECOND); 
       String yourTime = c.get(Calendar.HOUR_OF_DAY) + ":" 
         + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.SECOND); 
       msecs = c.get(Calendar.SECOND); 
       SimpleDateFormat ra = new SimpleDateFormat("HH:mm:ss"); 
       Date yourDate; 
       try { 
        yourDate = ra.parse(yourTime); 
        sqlTime3 = new Time(yourDate.getTime()); 
        Log.d("Service sqlTime3 calenadr", 
          c.get(Calendar.HOUR_OF_DAY) + ":" 
            + c.get(Calendar.MINUTE) + ":" 
            + c.get(Calendar.SECOND) + ""); 
        Log.d("sqlTime3 on prayerfragment 3", sqlTime3 + ""); 
       } catch (ParseException e) { 

        e.printStackTrace(); 
       } 
      } 

      Log.d("Service sqlTime3", sqlTime3 + ""); 
      Log.d("Service fajrsqlTime3", fajrsqlTime3 + ""); 
      Log.d("Service dhuhrsqlTime3", dhuhrsqlTime3 + ""); 
      Log.d("Service asrsqlTime3", asrsqlTime3 + ""); 
      Log.d("Service maghribsqlTime3", maghribsqlTime3 + ""); 
      Log.d("Service ishasqlTime3", ishasqlTime3 + ""); 

      if (sqlTime3.equals(fajrsqlTime3) && !sqlTime3.after(fajrsqlTime3)) { 
       // mMediaPlayer.start(); 
       GenerateNotification(getApplicationContext(), "fajr"); 
       // dail.show(); 

      } else if (sqlTime3.after(fajrsqlTime3) 
        && sqlTime3.equals(dhuhrsqlTime3) 
        && !sqlTime3.after(dhuhrsqlTime3)) { 
       Log.i(TAG, "Service dhuhrsqlTime3"); 
       // mMediaPlayer.start(); 
       GenerateNotification(getApplicationContext(), "dhuhr"); 
       // dail.show(); 
      } 

      else if (sqlTime3.after(fajrsqlTime3) 
        && sqlTime3.after(dhuhrsqlTime3) 
        && sqlTime3.equals(asrsqlTime3) 
        && !sqlTime3.after(asrsqlTime3)) { 
       Log.i(TAG, "Service asrsqlTime3"); 
       // mMediaPlayer.start(); 
       GenerateNotification(getApplicationContext(), "asr"); 
       // dail.show(); 
      } 

      else if (sqlTime3.after(fajrsqlTime3) 
        && sqlTime3.after(dhuhrsqlTime3) 
        && sqlTime3.after(asrsqlTime3) 
        && sqlTime3.equals(maghribsqlTime3) 
        && !sqlTime3.after(maghribsqlTime3)) { 
       Log.i(TAG, "Service maghribsqlTime3"); 
       // mMediaPlayer.start(); 
       GenerateNotification(getApplicationContext(), "maghrib"); 
       // dail.show(); 
      } else if (sqlTime3.equals(ishasqlTime3) 
        && !sqlTime3.after(ishasqlTime3)) { 
       Log.i(TAG, "Service ishasqlTime3"); 
       // mMediaPlayer.start(); 
       GenerateNotification(getApplicationContext(), "isha"); 
       // dail.show(); 
      } /* 
      * else if (sqlTime3.after(ishasqlTime3)) { Log.i(TAG, 
      * "Service ishasqlTime3"); mMediaPlayer.start(); 
      * GenerateNotification(getApplicationContext(), "fajr"); } 
      */ 
     } 
    } 

    @SuppressWarnings("deprecation") 
    private void GenerateNotification(Context context, String string) { 

     Intent intent1 = new Intent(context, Selectlanguag.class); 

     Notification notification = new Notification(R.drawable.islamiclogo, 
       " Prayer time for " + string, System.currentTimeMillis()); 

     intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP 
       | Intent.FLAG_ACTIVITY_CLEAR_TOP); 

     PendingIntent pendingNotificationIntent = PendingIntent.getActivity(
       context, 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT); 
     notification.flags |= Notification.FLAG_AUTO_CANCEL; 
     notification.setLatestEventInfo(context, "WAT Prayer", 
       " Upcoming prayer time is " + string, 
       pendingNotificationIntent); 
     Uri path = Uri.parse("android.resource://com.wat.compassapp/raw/du"); 
     notification.sound = path; 
     mManager.notify(0, notification); 

    } 

    @Override 
    public void onDestroy() { 

     Log.w(TAG, "onDestroy"); 
     if (mMediaPlayer.isPlaying()) { 
      mMediaPlayer.stop(); 
     } 

    } 

    @Override 
    public IBinder onBind(Intent arg0) { 
     // TODO Auto-generated method stub 
     Log.i(TAG, "Service onBind"); 
     return null; 
    } 
} 

Я хочу, чтобы показать alertdialog, когда уведомление появляется (для откладывание уведомления) я использовать окно предупреждения системы

, пожалуйста, помогите мне написать совершенный код для этой проблемы

+0

Вы хотите диалог, когда уведомление нажимается или сразу же при получении уведомления? –

+0

сразу после получения уведомления –

+0

Перемещено первое описание вверху, чтобы было ясно (более ясно), что такое фрагмент кода о ... –

ответ

0

Ладно тогда, когда вы вызываете метод generateNotification, просто использовать runOnUiThread, и покажите свой диалог здесь. В вашей деятельности ставьте контекст как: static Contaxt context = YourActivity.this;

    ((Activity) YourActivity.context) 
         .runOnUiThread(new Runnable() { 
          @Override 
          public void run() { 
           // place your dialog here 

          } 
         }); 
+0

Активность, не попадающая в класс обслуживания –

+0

Итак, в вашей деятельности сделайте контекст статичным как: static Contaxt context = YourActivity.this; а затем в runOnUiThread использовать «YourActivity.context» insted из «контекста», я усовершенствую свои ans, попробуйте это –

Смежные вопросы