如何每隔10秒钟从服务中显示吐司

时间:2014-11-06 13:47:37

标签: android

我有一个Android应用程序,我想在应用程序关闭或完成时每隔10秒显示一次通知或吐司,例如来自服务

4 个答案:

答案 0 :(得分:2)

我在下面提供了一个示例活动,一个服务类和一个Timer类。在您的应用程序中使用类似的实现。

活动类

import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;

public class Sample extends Activity {

Button button1,button2;
 private Handler mHandler = new Handler();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

   // Call the start and stop method when needed.    

}


public void Start(View v)
{
    startService(new Intent(MainActivity.this , Sample_service.class));

}

public void Stop(View v)
{
    stopService(new Intent(MainActivity.this , Sample_service.class));

}

}

服务类

package com.example.connect;

import java.util.Timer;
import java.util.TimerTask;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;

public class Sample_service extends Service{

Timer timer = new Timer();
TimerTask updateProfile = new CustomTimerTask(Sample_service.this);

public void onCreate() {

    super.onCreate();

    Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show();
    timer.scheduleAtFixedRate(updateProfile, 0, 10000);

}


@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    Toast.makeText(this, "Service Stopped", Toast.LENGTH_SHORT).show();
    timer.cancel();
}



@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

}

计时器类

package com.example.connect;

import java.util.TimerTask;

import android.content.Context;
import android.os.Handler;
import android.widget.Toast;
public class CustomTimerTask extends TimerTask {


private Context context;
private Handler mHandler = new Handler();

public CustomTimerTask(Context con) {
    this.context = con;
}



@Override
public void run() {
    new Thread(new Runnable() {

        public void run() {

            mHandler.post(new Runnable() {
                public void run() {
                   Toast.makeText(context, "DISPLAY YOUR MESSAGE", Toast.LENGTH_SHORT).show();

                }
            });
        }
    }).start();

}

}

答案 1 :(得分:2)

我在这里给出了三个文件,MainActivity,Manifest和MyService文件在你的应用程序中实现它,它将每隔10秒显示一次toast服务。

MainActivity.java

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);//load the layout file
        startService(new Intent(this,MyService.class));//use to start the services
    }
}

MyService.java

public class MyService extends Service {
    public static final long INTERVAL=10000;//variable to execute services every 10 second
    private Handler mHandler=new Handler(); // run on another Thread to avoid crash
    private Timer mTimer=null; // timer handling
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        throw new UnsupportedOperationException("unsupported Operation");
    }
    @Override
    public void onCreate() {
        // cancel if service is  already existed
            if(mTimer!=null)
                mTimer.cancel();
        else
                mTimer=new Timer(); // recreate new timer
        mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(),0,INTERVAL);// schedule task
    }
    @Override
    public void onDestroy() {
        Toast.makeText(this, "In Destroy", Toast.LENGTH_SHORT).show();//display toast when method called
        mTimer.cancel();//cancel the timer
    }
    //inner class of TimeDisplayTimerTask
    private class TimeDisplayTimerTask extends TimerTask {
        @Override
        public void run() {
            // run on another thread
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    // display toast at every 10 second
                    Toast.makeText(getApplicationContext(), "Notify", Toast.LENGTH_SHORT).show();
                }
            });
        }
    }
}

的AndroidManifest.xml

<service android:name=".MyService"
        android:enabled="true"/>

答案 2 :(得分:0)

从技术上讲,当您在onCreate()方法中执行任务时,它会自动关闭。为此,您可以使用计时器/计划程序。

示例:

Timer timer;
TimerTask timerTask;

timer.schedule(timerTask, 5000, 10000);

timerTask = new TimerTask() {
            public void run() {

                //use a handler to run a toast that shows the current timestamp
                handler.post(new Runnable() {
                    public void run() {                     
                        Toast toast = Toast.makeText(getApplicationContext(), strDate, duration);
                        toast.show();
                    }
                });
            }
};

答案 3 :(得分:0)

不要忘记在应用程序标记内的清单文件中添加您的服务:

<service android:name=".ServiceGPS"
        android:permission="[Add permission here if exists]"
        android:label="[service name]" android:exported="true"
        android:enabled="true">
</service>