2

我希望服务在进入手机主菜单、连接服务器并且如果得到消息显示自定义吐司后工作。我做了大部分,但我只能在吐司中显示文本。我想用图像制作自定义吐司,我找到了很多解决方案如何在活动中做到这一点,但它在服务中不起作用。

有人能告诉我我应该改变什么才能使这段代码正常工作吗?

    public class MyService extends Service {
    private Toast toast;
    private Timer timer;
    private TimerTask timerTask;
    private class MyTimerTask extends TimerTask {
        @Override
        public void run() {
            showToast();
        }
    }

    private void showToast() {

        LayoutInflater inflater = (LayoutInflater)
           getSystemService(LAYOUT_INFLATER_SERVICE);
         View layout = inflater.inflate(R.layout.toast, null);
         ImageView image = (ImageView)
           layout.findViewById(R.id.image);
         image.setImageResource(R.drawable.truck); 
         TextView textView = (TextView)
           layout.findViewById(R.id.text);
         textView.setText("Some toast message");
         toast = new Toast(getApplicationContext());
         toast.setGravity(Gravity.BOTTOM, 0, 0);
         toast.setDuration(Toast.LENGTH_LONG);
         toast.setView(layout);
         toast.show();
    }

    @Override
    public void onCreate() {
        super.onCreate();
        timer = new Timer();
        toast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        clearTimerSchedule();
        initTask();
        timer.scheduleAtFixedRate(timerTask, 4 * 1000, 4 * 1000);
        return super.onStartCommand(intent, flags, startId);
    }

    private void clearTimerSchedule() {
        if(timerTask != null) {
            timerTask.cancel();
            timer.purge();
        }
    }

    private void initTask() {
        timerTask = new MyTimerTask();
    }

    @Override
    public void onDestroy() {
        clearTimerSchedule();
        super.onDestroy();
    }

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }
}
4

2 回答 2

1

我以其他有点原始的方式解决了我的问题,但也许它会帮助与我遇到同样问题的人。

我从 Toast 辞职并创建了新的 Activity 看起来像对话框

在清单中:

 <activity android:label="@string/app_name" 
            android:name="YourDialog" 
            android:theme="@android:style/Theme.Dialog" 
            android:taskAffinity=""/>

并在服务中:

Intent dialog = new Intent(this, YourDialog.class);
    dialog.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(dialog);
于 2012-12-11T10:59:05.107 回答
0

可以根据我们的意愿定制 Toast。开发者网站本身已经提到了它。检查以下链接http://developer.android.com/guide/topics/ui/notifiers/toasts.html

于 2012-12-10T18:21:07.680 回答