2017-10-21 93 views
0

J'ai fait une application WebView et des liens profonds fonctionne sur elle. Chaque fois que quelqu'un clique sur un lien vers mon site Web (sur une autre application), mon application s'ouvre, mais la page d'accueil est chargée au lieu que l'URL soit cliquée. Je souhaite que l'URL exacte de mon site Web s'ouvre chaque fois que le lien est cliqué au lieu de la page d'accueil.Lien profond ouvre l'application, mais n'ouvre pas l'URL exacte

MainActivity.java

package com.yoalfaaz.yoalfaaz; 

     import android.content.Intent; 
     import android.os.Bundle; 
     import android.support.design.widget.FloatingActionButton; 
     import android.support.design.widget.Snackbar; 
     import android.support.v4.widget.SwipeRefreshLayout; 
     import android.support.v7.app.AppCompatActivity; 
     import android.support.v7.widget.ShareActionProvider; 
     import android.support.v7.widget.Toolbar; 
     import android.view.View; 
     import android.view.Menu; 
     import android.view.MenuItem; 
     import android.webkit.WebSettings; 
     import android.webkit.WebView; 
     import android.webkit.WebViewClient; 
     import android.support.v4.view.MenuItemCompat; 

public class MainActivity extends AppCompatActivity { 
    private WebView YoWeb; 
    private ShareActionProvider mShareActionProvider; 

    SwipeRefreshLayout swipe; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     YoWeb = (WebView)findViewById(R.id.webview); // Move your declaration up here 
     swipe = (SwipeRefreshLayout) findViewById(R.id.swiperefresh); 
     swipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
      @Override 
      public void onRefresh() { 
       LoadWeb(YoWeb.getUrl()); // Pass in the current url to refresh 
      } 
     }); 

     LoadWeb("https://www.yoalfaaz.com"); // load the home page only once 
    } 

    public void LoadWeb(String url) // Pass in URL you want to load 
    { 

     WebSettings webSettings = YoWeb.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     YoWeb.loadUrl(url); // Load the URL passed into the method 
     swipe.setRefreshing(true); 
     YoWeb.setWebViewClient(new WebViewClient() { 

      //onPageFinished Method 
      public void onPageFinished(WebView view, String url) { 
       //Hide the SwipeRefreshLayout 
       swipe.setRefreshing(false); 
      } 
     }); 
    } 

    @Override 
    public void onBackPressed() { 
     if (YoWeb.canGoBack()) { 
      YoWeb.goBack(); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     switch (item.getItemId()) { 
      case R.id.action_settings: 
       return true; 

      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate menu resource file. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 

     // Locate MenuItem with ShareActionProvider 
     MenuItem item = menu.findItem(R.id.menu_item_share); 

     // Fetch and store ShareActionProvider 
     mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item); 

     // Return true to display menu 
     return true; 
    } 

    // Call to update the share intent 
    private void setShareIntent(Intent shareIntent) { 
     if (mShareActionProvider != null) { 
      mShareActionProvider.setShareIntent(shareIntent); 
     } 
    } 

    //private Intent setShareIntent() { 
    // Intent shareIntent = new Intent(); 
    // shareIntent.setAction(Intent.ACTION_SEND); 
    // shareIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); 
    // shareIntent.setType("text/plain"); 
    // startActivity(shareIntent); 
    // return shareIntent; 
    //} 
} 

AndroidManifest.xml

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

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

    <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=".MainActivity" 
      android:configChanges="orientation|keyboardHidden" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
      <intent-filter > 
       <action android:name="android.intent.action.VIEW"/> 
       <category android:name="android.intent.category.DEFAULT"/> 
       <category android:name="android.intent.category.BROWSABLE"/> 
       <data android:host="www.yoalfaaz.com" android:scheme="https"/> 
      </intent-filter> 
     </activity> 
     <activity android:name=".SplashScreen"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

Comment faire fonctionner comme il fonctionne avec la plupart des autres applications? Comme si nous cliquions sur un lien YouTube dans WhatsApp, cette vidéo particulière s'ouvre dans l'application YouTube au lieu de la page d'accueil YouTube.

+0

'LoadWeb (" https://www.yoalfaaz.com "); // charge la page d'accueil une seule fois ». Eh bien, cela ouvre votre page d'accueil n'est-ce pas? – greenapps

+0

@greenapps Oui, il ouvre ma page d'accueil. C'est fait parce que chaque fois que je glisse pour rafraîchir sur une page web de mon site Web, j'ai fini par revenir à la page d'accueil. –

+0

'Chaque fois que quelqu'un clique sur un lien vers mon site Web (sur une autre application)' Quelle application? Tu veux dire une application de navigateur? – greenapps

Répondre

0
LoadWeb("https://www.yoalfaaz.com"); // load the home page only once 

Au lieu de hardcoding l'URL, utilisez getIntent().getData().toString() pour obtenir l'URL (comme string) qui est cliqué à partir des autres applications et utiliser cette URL pour charger la vue Web.

Avoir un null vérifier et charger l'URL par défaut s'il n'y a pas d'URL reçue de getData().

Espérons que cela aide.

========= ÉDITÉE pour montrer le code que vous avez demandé =====================

Dans votre code , vous chargez la vue web avec cette ligne.

LoadWeb("https://www.yoalfaaz.com"); // load the home page only once 

Modifiez cette ligne comme ci-dessous.

String url = "https://www.yoalfaaz.com"; 
if(null != getIntent().getData()){ 
url = getIntent().getData().toString(); 
} 
LoadWeb(url); 
+0

pouvez-vous dire exactement comment il devrait être codé pour obtenir l'URL comme une chaîne et ne pas le faire comme je le fais? –

+0

a édité la réponse pour montrer le code comment obtenir l'URL. Regarde. – GRK