2013-09-30 2 views
0

Destroy app resolved! Спасибо за помощь! В настоящий момент активность уничтожается, но значок статуса по-прежнему отображается в строке состояния. Вы можете помочь мне удалить значок в то же время, когда приложение закрывается? Я подозреваю, что проблема с декомпозицией ...android не может уничтожить мою деятельность


У меня есть простое приложение со значком строки состояния. Когда активность запускается и пользователь нажимает onPause(), значок значка строки состояния. Нажмите на это приложение для возобновления значка, но когда я захочу уничтожить активность, у меня есть ошибка. Кто-нибудь может помочь ми с этим?

private static final int NOTIF_ID = 1; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_jajko); 

    text = (TextView) findViewById(R.id.tvTime); 
    play = (Button) findViewById(R.id.butStart); 
    miekko = (Button) findViewById(R.id.butMiekko); 
    srednio = (Button) findViewById(R.id.butSrednio); 
    twardo = (Button) findViewById(R.id.butTwardo); 

    miekko.setOnClickListener(this); 
    srednio.setOnClickListener(this); 
    twardo.setOnClickListener(this); 
    play.setOnClickListener(this); 

    mp = MediaPlayer.create(Jajko.this, R.raw.alarm); 

    showNotification(this); 
} 


    public static void showNotification(Context context) { 
     final Intent result_intent = new Intent(context, Jajko.class); 

     result_intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);    

     TaskStackBuilder stack_builder = TaskStackBuilder.create(context); 
     stack_builder.addParentStack(Jajko.class); 
     stack_builder.addNextIntent(result_intent); 


     PendingIntent pending_intent = stack_builder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 

     android.support.v4.app.NotificationCompat.Builder builder = new android.support.v4.app.NotificationCompat.Builder(context); 

     Resources res = context.getResources(); 
     builder.setContentIntent(pending_intent) 
      .setSmallIcon(R.drawable.icon) 
      .setLargeIcon(BitmapFactory.decodeResource(res, R.drawable.icon)) 
      .setTicker("test") 
      .setWhen(System.currentTimeMillis()) 
      .setAutoCancel(false) 
      .setContentTitle("title") 
      .setContentInfo("cinfo") 
      .setContentText("ctext"); 
     Notification n = builder.build(); 
     n.flags = Notification.FLAG_ONGOING_EVENT; 

     NotificationManager nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 
     nm.notify(NOTIF_ID, n);  
    } 

public void onDestroy() { 
    try { 
     mp.release(); 
     if (isFinishing()) { 
      notificationManager.cancel(NOTIF_ID); 
     } 
    } catch (Exception e) { 
    } 
    super.onDestroy(); 

} 
+0

Не могли бы вы высказать свой код? По крайней мере, Jajko.java:252 строка? В этой строке есть что-то пустое. – fasteque

+0

что это за код этой строки Jajko.java:252 –

ответ

0

В этом случае super.onDestroy должен быть вызван для уничтожения активности из-за его части жизненного цикла Android.

Таким образом, вы можете поместить свой код в try/catch, и он будет работать.

public void onDestroy() { 
     try { 
      mp.release(); 
      if (isFinishing()) { 
       notificationManager.cancel(NOTIF_ID); 
      } 
     } catch (Exception e) { 
     } 
     super.onDestroy(); 
    } 
+0

В настоящий момент активность уничтожается, но значок статуса по-прежнему отображается в строке состояния. Вы можете помочь мне удалить значок в то же время, когда приложение закрывается? Я подозреваю, что проблема в разделе «Дедстрой» ... – bakusek

+0

Пожалуйста, подтвердите ответ, если вы сочтете это полезным? –

0

Вы NullPointerException в методе:

public void onDestroy() { 
    mp.release(); 
if (isFinishing()) { 
    notificationManager.cancel(NOTIF_ID); 
} 
super.onDestroy(); 

} 

до вызова mp.release(); убедитесь, что его не null

Я хотел бы написать это нравится:

public void onDestroy() { 

    if(mp != null){ 
     mp.release(); 
    } 

if (isFinishing()) { 
    notificationManager.cancel(NOTIF_ID); 
} 
super.onDestroy(); 

} 

Однако та же проверка вы можете надеть notificationManager.

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