急:在android下如何实现,在程序不操作一段时间,执行另一个程序 各位大侠好,我最近在做一个程序,就是在系统一段时间没有被用户操作了,自动让程序运行其他部分,比喻广告视频什么的,请问大侠我怎么实现这样的功能啊??我知道程序可以通过记录每一项操作都置一下状态和时间来解决,但这种方法太土了吧,还有没有其他更方便的作法?多谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 定義一個Handler mHandler = new Handler();屏幕的onTouchEvent中 每當有touch事件觸發時 mHandler.removeMessages(...);Message msg = mHandler.obtainMessage(...);mHandler.sendMessageDelayed(msg,n)//n為一段時間總結:程序啟動時,初始化幷發送消息 屏幕有onClick或onTouch事件觸發時,重置message,即重新計時開始後面怎麼做,就簡單了 多谢,能不能说详细点,本人开发时间不长,对handler不熟哦 寫了一個簡單的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 } } };} 好象不太好用,如果点一个button或者editView等等,onTouchEvent并没有执行。如果点界面的空白处,onTouchEvent就执行了。我就是不想对每个控件的click事件都做 mHandler.sendMessageDelayed(msg, 30000);//無操作30s后進入廣告咋整哦? 在楼上的程序基础上,我又做了如下的事,对每个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 ; } } 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); } android開發中,不建議使用System.outLog或者Toast比較好 手机品牌不同调用摄像头是不是有差异?? 急.... Flex & Android将是趋势 手游 Spinner弹出下拉列表后按[返回]键的事件如何处理 骗银~凡是这么写路径的都不对~ 如何使源码编译的模拟器使用SDcard 怎么在pc端截取android的屏幕 eclipse编译cocos2d-x出的ndk错误求助 有没有关于蓝牙的视频和代码,主要用于安卓的开发,意在用过蓝牙接接收命令之后能对手机上面的软件发送命令 联系人导入微博头像 类型错误 live555 手机流媒休解决方案
mHandler.removeMessages(...);
Message msg = mHandler.obtainMessage(...);
mHandler.sendMessageDelayed(msg,n)//n為一段時間總結:程序啟動時,初始化幷發送消息 屏幕有onClick或onTouch事件觸發時,重置message,即重新計時開始後面怎麼做,就簡單了
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
}
}
};
}
如果点界面的空白处,onTouchEvent就执行了。
我就是不想对每个控件的click事件都做
mHandler.sendMessageDelayed(msg, 30000);//無操作30s后進入廣告咋整哦?
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 ;
}
}
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);
}