服务中的android自定义吐司

时间:2012-12-10 17:08:58

标签: android service toast

我想要在进入手机主菜单,连接服务器以及获取消息显示自定义吐司后服务工作。我做了大部分,但我只能在吐司中显示文字。 我想用图像制作自定义烤面包,我发现很多解决方案如何在活动中做到这一点,但它不能正常使用。

有人可以告诉我应该更改什么才能使此代码正常工作?

    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;
    }
}

2 个答案:

答案 0 :(得分:1)

我用其他原始方式解决了我的问题,但也许它会帮助那些遇到同样问题的人。

我从Toast辞职并创建了一个看起来像对话框的新活动

清单中的

 <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);

答案 1 :(得分:0)

可以按照我们的意愿定制Toast。它已经在开发者网站上提到过了。请查看以下链接http://developer.android.com/guide/topics/ui/notifiers/toasts.html