0

私はAndroidアプリケーションを作成するのにかなり慣れていないので、質問を受けました.

アプリケーションを実行して数秒待つと、画面がタイムアウトします。問題は、画面のロックを再度解除すると、アプリケーションが閉じられることです。画面がタイムアウトしてもアプリケーションをアクティブのままにして、アプリケーションを最初からやり直す必要がないようにしたい。

アプリケーションをバックグラウンドで実行したくありません。また、画面のタイムアウトを無効にしたくありません。画面が自動的にタイムアウトした後、アプリケーションを閉じたくないだけです。

そうする可能性はありますか?

_EDIT > 私のコードの一部を追加しました。

 
Android マニフェスト

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

2 に答える 2

1

あなたの質問に対する直接的な答えはありません。図 1を見てください。アクティビティのライフサイクル

この概念は、画面がロックされると、アクティビティが表示されなくなる (onPause()) ことを示しています。画面がオンに戻ると、 onResume() が呼び出されます。これらの方法を使用して、目的の結果を得ることができます。

通常、アクティビティの onCreate() をすべて初期化し、onResume() がある場合は値を更新します。

それが役立つことを願っています。

于 2012-05-23T13:31:42.393 に答える
0

何時間も、何日も、何週間も、何ヶ月もこの問題を解決しようとして、ついに見つけました。

最初の投稿で追加したコードを見ると、次の 2 行のコードが表示されます。

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

この 2 人の小さな男が私のアプリケーションを何度もクラッシュさせました。これらを追加したのは、私が最初に PhoneGap を使用していて、これらの行を追加するように指示されたどこかのチュートリアルに従ったためです。これらの 2 行を再度削除した後、私のアプリケーションは通常どおり動作しました。1行だけ削除してもうまくいきませんでした。

時々、プログラミングは本当に地獄になることがあります。

于 2012-05-30T10:13:26.567 に答える