在屏幕超时时保持Android应用程序活动

时间:2012-05-23 13:11:46

标签: android eclipse android-activity timeout

我很擅长制作Android应用程序,所以我有一个问题。

如果我的应用程序运行,我等待几秒钟我的屏幕超时。问题是,当我再次解锁屏幕时,我的应用程序已关闭。我希望应用程序在屏幕超时时保持活动状态,这样我就不必重新启动应用程序了。

我不希望应用程序在后台运行,也不想禁用屏幕超时。我只是不希望应用程序在屏幕自动超时后关闭。

有没有机会这样做?

_EDIT>添加了我的一些代码。


Android Manifest          

    <supports-screens
    android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:resizeable="true"
    android:anyDensity="true"
    />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.BROADCAST_STICKY" />

    <uses-sdk android:minSdkVersion="10" />

    <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
            <activity
                    android:name=".SIOM_AndroidActivity"
                    android:label="@string/app_name"
                    android:screenOrientation="portrait"
                    android:configChanges="orientation|keyboardHidden" 
                    android:theme="@android:style/Theme.NoTitleBar" >
                    <intent-filter>
                            <action android:name="android.intent.action.MAIN" />
                            <category android:name="android.intent.category.LAUNCHER" />
                    </intent-filter>
            </activity>     
            <activity 
                    android:name="com.phonegap.DroidGap" 
                    android:label="@string/app_name" 
                    android:screenOrientation="portrait"
                    android:configChanges="orientation|keyboardHidden" > 
                    <intent-filter> 
                    </intent-filter> 
            </activity>
    </application>
</manifest>


Android活动

package com.siom.android;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import com.phonegap.*;

public class SIOM_AndroidActivity extends DroidGap {
    /** Called when the activity is first created. */
    /** @Override */
    WebView mWebView;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
            super.init();
            super.clearCache();
            setContentView(R.layout.main);

            mWebView = (WebView) findViewById(R.id.webview);
            mWebView.getSettings().setJavaScriptEnabled(true);
            mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
            mWebView.setWebViewClient(new HelloWebViewClient());
            mWebView.setWebChromeClient(new MyWebChromeClient());

            mWebView.loadUrl("http://www.example.com/test.html");
    }

    // Maakt een WebChromeClient class aan
    final Context myApp = this;
    final class MyWebChromeClient extends WebChromeClient {

        // Zorgt er voor dat confirm werkt in WebView
        @Override
        public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {
            new AlertDialog.Builder(myApp)
            .setTitle("Title here")
            .setMessage(message)
            .setPositiveButton(android.R.string.ok,
                new DialogInterface.OnClickListener()
                {
                    public void onClick(DialogInterface dialog, int which)
                    {
                        result.confirm();
                    }
                })
            .setNegativeButton(android.R.string.cancel,
                new DialogInterface.OnClickListener()
                {
                    public void onClick(DialogInterface dialog, int which)
                    {
                        result.cancel();
                    }
                })
            .create()
            .show();
                 return true;
        }

        // Zorgt er voor dat alert werkt in WebView
        @Override
        public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
            new AlertDialog.Builder(myApp)
            .setTitle("Title here")
            .setMessage(message)
            .setPositiveButton(android.R.string.ok,
                new AlertDialog.OnClickListener()
                {
                    public void onClick(DialogInterface dialog, int which)
                    {
                        result.confirm();
                    }
                })
            .setCancelable(false)
            .create()
            .show();
                 return true;
        }
    }
    // Alle links worden in webview geladen
    private class HelloWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }

    // Geeft de back knop een goback actie
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
            mWebView.goBack();
            return true;
        }
        if (keyCode == KeyEvent.KEYCODE_MENU) {
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}

2 个答案:

答案 0 :(得分:1)

你的问题没有直接答案。看看Figure 1. The activity lifecycle

该概念表明,当屏幕被锁定时,您的活动不再可见(onPause())。当屏幕重新打开onResume()被调用。您可以使用这些方法来获得所需的结果。

通常,我初始化活动的所有onCreate()并刷新值,如果有任何onResume()。

希望有所帮助。

答案 1 :(得分:0)

经过这么多小时,几天,几周甚至几个月试图解决这个问题,我终于找到了它。

如果您查看我在第一篇文章中添加的代码,您可以看到以下两行代码:

super.init();
super.clearCache();

这两个小家伙一遍又一遍地撞毁我的应用程序,现在看了之后,难怪他们做到了。添加这些是因为我第一次使用PhoneGap,并在某处告诉我添加这些行的教程。再次删除这两行后,我的应用程序再次正常工作。只删除一行也不起作用。

有时编程真的很糟糕。