0

我对制作 Android 应用程序还很陌生,所以我有一个问题。

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

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

有没有机会这样做?

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

 
安卓清单

    <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>

 
安卓活动

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);
    }
}
4

2 回答 2

1

你的问题没有直接的答案。看看图 1。活动生命周期

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

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

希望有帮助。

于 2012-05-23T13:31:42.393 回答
0

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

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

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

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

有时编程真的是地狱。

于 2012-05-30T10:13:26.567 回答