繁体   English   中英

在Android中显示最新打开的应用程序的吐司

[英]Show toast of the most recently opened application in android

我正在尝试创建一个服务,该服务将使用最新运行的应用程序每秒显示一次吐司。 每次启动服务时,都会收到NullPointerException。 我该怎么做才能避免这种情况?

public class CheckRunningActivity extends Service {
private static final String TAG = "CheckRunningActivity";
boolean checkApps;
private Timer mTimer = null;
private Handler mHandler = new Handler();
private ActivityManager am;

public static final long NOTIFY_INTERVAL = 1000; // 1 second

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

@Override
public void onCreate() {
    Log.d(TAG, "I created it");   

     ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);

     // cancel if already existed
    if(mTimer != null) {
        mTimer.cancel();
    } else {
        // recreate new
        mTimer = new Timer();
    }
    // schedule task
    mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(), 0, NOTIFY_INTERVAL);
}



class TimeDisplayTimerTask extends TimerTask {

    @Override
    public void run() {

        // run on another thread
        mHandler.post(new Runnable() {

            @Override
            public void run() {
                Log.d(TAG, "Its running");   

        String packageName = am.getRunningTasks(1).get(0).topActivity
                .getPackageName();

            Toast.makeText(getBaseContext(), packageName, Toast.LENGTH_LONG).show();
            Log.d(TAG, "Make Toast");           
            }
        });
     }
 }          

}

你不能直接从服务中叫吐司。 您需要一个处理程序。 在这里查看答案。

再次查看代码后,我意识到我没有正确初始化活动管理器。

这是更正的代码...

public class CheckRunningActivity extends Service {
private static final String TAG = "CheckRunningActivity";
boolean checkApps;
private Timer mTimer = null;
private Handler mHandler = new Handler();
private ActivityManager am;

public static final long NOTIFY_INTERVAL = 1000; // 1 second

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

@Override
public void onCreate() {
    Log.d(TAG, "I created it");   


     // cancel if already existed
    if(mTimer != null) {
        mTimer.cancel();
    } else {
        // recreate new
        mTimer = new Timer();
    }
    // schedule task
    mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(), 0, NOTIFY_INTERVAL);
}



class TimeDisplayTimerTask extends TimerTask {

    @Override
    public void run() {

        // run on another thread
        mHandler.post(new Runnable() {

            @Override
            public void run() {
                ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
                Log.d(TAG, "Its running");   

        String packageName = am.getRunningTasks(1).get(0).topActivity.getPackageName();

            Toast.makeText(getBaseContext(), packageName, Toast.LENGTH_LONG).show();
            Log.d(TAG, "Make Toast");           
            }
        });
     }
 }          
}   

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM