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

少し原始的な方法で問題を解決しましたが、同じ問題を抱えている人に役立つかもしれません。

トーストを辞任し、ダイアログのような新しいアクティビティを作成しました

マニフェストで:

 <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のカスタムも可能です。これは、開発者の Web サイト自体で既に言及されています。次のリンクを確認してくださいhttp://developer.android.com/guide/topics/ui/notifiers/toasts.html

于 2012-12-10T18:21:07.680 に答える