2014-10-16 58 views
0

我有一個FragmentA..that是一個列表片段,它加載一個聯繫人列表,並顯示它們類似於電話簿將做什麼。現在如果我點擊一個聯繫人說「John Doe」應用程序將啓動另一個應用程序(在我的情況下爲Sim Tool Kit),並顯示用戶的姓名和號碼以供用戶在使用STK時使用。一旦用戶完成使用STK或導航迴應用程序,然後應該消失。但在我的情況下,吐司仍然存在,並且在某些情況下,即使我退出我的應用時,吐司也會無限顯示。我該如何糾正?下面是我的代碼的片段堅持吐司列表項點擊哪個啓動另一個應用程序

list.setOnItemClickListener(new OnItemClickListener() { 
    @SuppressLint("RtlHardcoded") 
    @SuppressWarnings("deprecation") 
    public void onItemClick(AdapterView<?> parent, View view, final int position, long id) { 
     @SuppressWarnings("unchecked") 
     HashMap<String, String> h = (HashMap<String, String>) list.getAdapter().getItem(position); 
     String Name="",Number=""; 
     Name = h.get(KEY_NAME); 
     Number = h.get(KEY_PHONENUMBER); 

     toast = Toast.makeText(context, "", Toast.LENGTH_LONG); 
     toast.setGravity(Gravity.TOP|Gravity.RIGHT, 0, 0); 
     toast.setView(layout); 
     toast.cancel(); 

     userNameText.setText(Name); 
     userNumberText.setText(Number); 
     PersistToast(); 
     getActivity().startService(ServiceIntent); 

     try { 
      if (!ReceiverON) { 
       getActivity().registerReceiver(objReceiver, filter); 
       ReceiverON=true; 
      } 
     } catch (IllegalArgumentException illegalargumentexception) { 
      illegalargumentexception.printStackTrace(); 
     } catch (Exception exception) { 
      exception.printStackTrace(); 
     } 
    } 
} 

的持續吐司方法

private void PersistToast() { 
    long delay = 1000; 
    long period = 1000; 
    mDoTask = new TimerTask() { 
     @Override 
     public void run() {      
      toast.show(); 
     } 
    }; 

    mT.scheduleAtFixedRate(mDoTask, delay, period); 
} 

接收機

private class Receiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent arg1) { 
     if (!(currentTask().equals("com.android.stk"))){ 
      try { 
       if(toast != null) { 
        toast.cancel(); 
        mDoTask.cancel(); 
       } 
      } catch(Exception e) { 
      } 
     } 
    } 
} 

public String currentTask() { 
    return ((android.app.ActivityManager.RunningTaskInfo)((ActivityManager)context.getSystemService("activity")).getRunningTasks(1).get(0)).topActivity.getPackageName().trim(); 
} 

服務坪接收週期性,使得接收機依次檢查,如果當前前面的活動是STK,如果不是那麼它取消了吐司和計時器任務

+0

我不認爲你應該改變的是,敬酒是爲了工作的方式;這實際上只是對用戶的快速響應。您應該設計它,以便屏幕上有一個信息窗口,並且需要它。 – 2014-10-16 13:27:29

+0

Toast請求堆棧意味着它們可以在應用程序被殺後很長一段時間顯示,更不用說留下了。 – dominik4142 2014-10-16 13:28:32

+0

@JaySnayder and dominik您的意見與站在什麼不用烤麪包。這個問題真的不是祝酒,而是在瀏覽應用程序時取消它的正確位置和方式。在我的情況下堅持烤麪包已經使用了一個時間任務,所以殺死時間任務結束了烤麪包。我只是無法找到正確的方式 – 2014-10-16 13:33:12

回答

0

這是烤麪包的濫用,不是爲這些任務設計的。從android 4.1用戶甚至可以禁用應用程序的通知(這也會禁用應用程序的敬酒) - 所以敬酒是不可靠的,應該只顯示額外的信息,可以忽略不計。

您的方法是使用疊加活動。見How to create always-top fullscreen overlay activity in Android

+0

我的點擊開始一個活動(STK),所以我不能使用你的方法.. – 2014-10-16 14:15:47

+0

這是獨立的事件。您可以逐個開始2個活動。所以這是可能的。 – curioushikhov 2014-10-16 14:27:58

+0

讓我試試你建議的活動方法... – 2014-10-16 14:39:49

相關問題