各位大侠好,我最近在做一个程序,就是在系统一段时间没有被用户操作了,自动让程序运行其他部分,比喻广告视频什么的,请问大侠我怎么实现这样的功能啊??
我知道程序可以通过记录每一项操作都置一下状态和时间来解决,但这种方法太土了吧,还有没有其他更方便的作法?
多谢

解决方案 »

  1.   

    定義一個Handler mHandler = new Handler();屏幕的onTouchEvent中 每當有touch事件觸發時 
    mHandler.removeMessages(...);
    Message msg = mHandler.obtainMessage(...);
    mHandler.sendMessageDelayed(msg,n)//n為一段時間總結:程序啟動時,初始化幷發送消息 屏幕有onClick或onTouch事件觸發時,重置message,即重新計時開始後面怎麼做,就簡單了
      

  2.   

    多谢,能不能说详细点,本人开发时间不长,对handler不熟哦
      

  3.   

    寫了一個簡單的demo,LZ參考一下
    package com.xx.demo;import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.MotionEvent;public class DemoActivity extends Activity {
        
    private static final int SHOW_ANOTHER_ACTIVITY = 0;
    /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            Message msg = mHandler.obtainMessage(SHOW_ANOTHER_ACTIVITY);
            mHandler.sendMessageDelayed(msg, 30000);//無操作30s后進入廣告
        }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
    // TODO Auto-generated method stub
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
    resetTime();
    break;
    default:
    break;
    }
    return true;
    }
    private void resetTime() {
    // TODO Auto-generated method stub
    mHandler.removeMessages(SHOW_ANOTHER_ACTIVITY);//從消息隊列中移除
    Message msg = mHandler.obtainMessage(SHOW_ANOTHER_ACTIVITY);
            mHandler.sendMessageDelayed(msg, 30000);//無操作30s后進入廣告
    }
        
    private Handler mHandler = new Handler()
    {
    @Override
    public void handleMessage(Message msg) {
    // TODO Auto-generated method stub
    super.handleMessage(msg);
    if(msg.what==SHOW_ANOTHER_ACTIVITY)
    {
    //跳到廣告的activity
    }
    }
    };
    }
      

  4.   

    好象不太好用,如果点一个button或者editView等等,onTouchEvent并没有执行。
    如果点界面的空白处,onTouchEvent就执行了。
    我就是不想对每个控件的click事件都做     
      mHandler.sendMessageDelayed(msg, 30000);//無操作30s后進入廣告咋整哦?
      

  5.   

    在楼上的程序基础上,我又做了如下的事,对每个click事件,继承一个类。在这个类中,提供一个方法,重置resetTime(),如下:
    class ImgClickListener extends TimerOnClickListener implements OnClickListener {
    @Override
    public void onClick(View v) {
    super.timerReset();
                            ......
    } class TimerOnClickListener {
    public void IsecOnClickListener() {
    /**
     * 重置时间处理流程
     */
    public void timerReset() {
    long dateTaken = System.currentTimeMillis();  
                String datetime = DateFormat.format("yyyy:MM:dd kk:mm:ss", dateTaken).toString();  
    System.out.println("这是 TimerOnClickListener click 时间"); System.out.println(datetime);
       
             resetTime();    //重置时间
    return ;
    }
    }
      

  6.   

    onTouchEvent()換成下面這個 @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
    // TODO Auto-generated method stub
    switch (ev.getAction()) {
    case MotionEvent.ACTION_DOWN:

    resetTime();
    break; default:
    break;
    }
    return super.dispatchTouchEvent(ev);
    }
      

  7.   

    android開發中,不建議使用System.outLog或者Toast比較好