深层链接打开应用程序,但不打开确切的网址

深层链接打开应用程序,但不打开确切的网址

问题描述:

我已经制作了一个WebView应用程序并对其进行了深层链接。每当有人点击链接到我的网站(在任何其他应用程序),然后我的应用程序打开,但主页加载,而不是点击的URL。我希望我的网站的确切网址在点击链接而不是主页时打开。深层链接打开应用程序,但不打开确切的网址

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> 

如何使它工作,因为它与大多数其他应用程序的工作原理?就像我们点击WhatsApp中的YouTube链接,那么该特定视频将在YouTube应用中打开,而不是在YouTube主页上打开。

+0

'LoadWeb(“https://www.yoalfaaz.com”); //只加载一次主页。那么打开你的主页不是吗? – greenapps

+0

@greenapps是的,它打开我的主页。这是因为每当我刷新我网站的任何网页时,我都会回到主页。 –

+0

'每当有人点击链接到我的网站(在任何其他应用程序)'哪个应用程序?你的意思是一些浏览器应用 – greenapps

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

代替硬编码的URL,使用getIntent().getData().toString()来获取URL(作为string)是从其他应用程序点击,使用此URL来加载Web视图。

如果没有收到从getData()收到的URL,请检查并加载默认的网址null

希望这会有所帮助。

=========编辑以显示代码,你问=====================

在您的代码,你正在用这一行加载web视图。

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

修改此行如下。

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

你能告诉它应该如何编码才能将URL作为一个字符串,而不是按照我的方式进行操作? –

+0

编辑答案显示你的代码如何获得网址。看一看。 – GRK