Page blanche entre Splash screen et affichage webview [Résolu]

Signaler
Messages postés
9
Date d'inscription
dimanche 10 mai 2020
Statut
Membre
Dernière intervention
1 juillet 2020
-
Messages postés
9
Date d'inscription
dimanche 10 mai 2020
Statut
Membre
Dernière intervention
1 juillet 2020
-
bonjour
je le dit et je le répète , je suis pas doué en java , mais j essai toujours de développer mon code webview, cette fois le probleme c'est que quand je lance mon appli il y'a un vide en blanc entre le splash screen et l affichage du contenu. je vous pris de m aider.


mon code :

MainActivity.java
package com.akssa.groupe;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.RelativeLayout;

public class MainActivity extends AppCompatActivity {
    WebView webView;

    RelativeLayout relativeLayout;
    Button btnNoInternetConnection;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // remove title
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.activity_main);

        webView = (WebView) findViewById(R.id.webView);
        // loadUrl


        webView.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url.startsWith("tel:")) {
                    Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url));
                    startActivity(intent);
                    return true;
                }
                return false;
            }
        });





        btnNoInternetConnection = (Button) findViewById(R.id.btnNoConnection);
        relativeLayout = (RelativeLayout) findViewById(R.id.relativeLayout);

        checkConnection();


        WebSettings webSettings = webView.getSettings();

        webSettings.setJavaScriptEnabled(true);
        //
        webSettings.setDomStorageEnabled(true);
        //
        webSettings.setUseWideViewPort(true);

        webSettings.setAllowContentAccess(true);
        webSettings.setAllowFileAccess(true);
        webSettings.setAppCacheEnabled(true);



        btnNoInternetConnection.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                checkConnection();

            }
        });

    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()){
        webView.goBack();
        return true;
        }
        return super.onKeyDown(keyCode, event);
    }


    public void checkConnection(){


        ConnectivityManager connectivityManager = (ConnectivityManager)
                this.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo wifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        NetworkInfo mobileNetwork = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);


        if (wifi.isConnected()){
            webView.loadUrl("https://www.groupe-alakssa.ma/");
            webView.setVisibility(View.VISIBLE);
            relativeLayout.setVisibility(View.GONE);



        }
        else if (mobileNetwork.isConnected()){
            webView.loadUrl("https://www.groupe-alakssa.ma/");
            webView.setVisibility(View.VISIBLE);
            relativeLayout.setVisibility(View.GONE);

        }
        else {


            webView.setVisibility(View.GONE);
            relativeLayout.setVisibility(View.VISIBLE);



        }



    }
}


AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.akssa.groupe">

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name="com.akssa.groupe.SplashScreen">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.akssa.groupe.MainActivity">

        </activity>
    </application>

</manifest>

5 réponses

Messages postés
14881
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
27 novembre 2020
2 824
re,

Sûrement le temps que la page se charge.
Généralement, on affiche un loader lors du chargement et on le cache lorsque la page est chargée.
Un peu comme cela :


progressBar.setVisibility(View.VISIBLE);

webView.setWebViewClient(new WebViewClient() {
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.startsWith("tel:")) {
            Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url));
            startActivity(intent);
            return true;
        }
        return false;
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        progressBar.setVisibility(View.GONE);
    }
});
Messages postés
9
Date d'inscription
dimanche 10 mai 2020
Statut
Membre
Dernière intervention
1 juillet 2020

je place le loader sur le splashScreen ?? tu peux m aider la ??
Messages postés
14881
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
27 novembre 2020
2 824
Bah non, sur l'écran de la webview, le temps que la page se charge
Messages postés
9
Date d'inscription
dimanche 10 mai 2020
Statut
Membre
Dernière intervention
1 juillet 2020

voila le code SplashScreen.java
package com.akssa.groupe;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;

public class SplashScreen extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash_screen);

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
startActivity(new Intent(SplashScreen.this,MainActivity.class));
finish();
}
},2000);
}
}
Messages postés
9
Date d'inscription
dimanche 10 mai 2020
Statut
Membre
Dernière intervention
1 juillet 2020

ça veux dire que en peux pas remplacerle progressBar par le splashscreen , le temp ou le webview ce charge .
Messages postés
14881
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
27 novembre 2020
2 824
Non. Tu comprends bien que Splashscreen et Main sont 2 Activity différentes. Il ne peut y avoir qu'une seule d'active à un instant T
Messages postés
9
Date d'inscription
dimanche 10 mai 2020
Statut
Membre
Dernière intervention
1 juillet 2020

ok Merci beaucoup BunoCS :)