我有一个FragmentA ..这是一个列表片段,它加载一个联系人列表并显示它们类似于电话簿的行为。现在,如果我点击一个联系人说" John Doe"该应用程序将启动另一个应用程序(在我的情况下为Sim Tool Kit),并且还显示带有他的姓名和号码的吐司,供用户在使用STK时使用。一旦用户完成使用STK或导航回应用程序,那么吐司应该消失。但在我的情况下,Toast仍然存在,在某些情况下甚至当我退出我的应用程序时,toast将无限出现。我该如何纠正?以下是我的代码的片段
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();
}
}
}
持久的Toast方法
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();
}
服务定期对接收方进行ping操作,以便接收方依次检查前面的当前Activity是否为STK,如果不是则取消toast和timer任务
答案 0 :(得分:0)
这是对吐司的滥用,这不是为此类任务设计的。从Android 4.1用户甚至可以禁用应用程序的通知(这也禁用了应用程序的敬酒) - 所以吐司是不可靠的,应该只显示额外的信息,可以忽略,没有任何伤害。
您的方法是使用叠加活动。见How to create always-top fullscreen overlay activity in Android