2017-03-15 4 views
1

Kann mir jemand beim Öffnen eines bestimmten Links in einem externen Browser oder einer anderen Android-App helfen?Webview - Öffnen Sie Links im externen Browser?

Zum Beispiel, wenn URL entspricht whatsapp: // dann sollte es Link in WhatsApp App öffnen und wenn WhatsApp nicht installiert ist, dann sollte es öffnen https://play.google.com/store/apps/details?id=com.whatsapp in Android-Browser.

FYI: Ich verwende https://github.com/SurfEdge/flarum-mobile-android, um Web View App für meine Forum-Website zu erstellen.

Mein Android Code wie folgt aussieht:

package com.example.example; 

import android.content.Intent; 
import android.graphics.Bitmap; 
import android.os.Build; 
import android.os.Bundle; 
import android.os.Message; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.KeyEvent; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.webkit.CookieManager; 
import android.webkit.WebChromeClient; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.ProgressBar; 

import im.delight.android.webview.AdvancedWebView; 

public class MainActivity extends AppCompatActivity implements AdvancedWebView.Listener{ 

public AdvancedWebView webView; 
private ProgressBar mPbar = null; 

private static final String url = "https://example.com/"; 


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

    mPbar = (ProgressBar) findViewById(R.id.loader); 

    webView = (AdvancedWebView) findViewById(R.id.newWeb); 
    webView.loadUrl(url); 
    webView.setListener(this, this); 

    WebSettings webSettings = webView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    webSettings.setAppCacheEnabled(true); 
    webSettings.setDomStorageEnabled(true); 
    webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); 
    webSettings.setAllowFileAccess(true); 

    CookieManager cookieManager = CookieManager.getInstance(); 
    cookieManager.setAcceptCookie(true); 

    webView.setWebChromeClient(new WebChromeClient() { 
     @Override 
     public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { 
      AdvancedWebView newWebView = new AdvancedWebView(MainActivity.this); 
      WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; 
      transport.setWebView(newWebView); 
      resultMsg.sendToTarget(); 
      return true; 
     } 
    }); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
     webView.setLayerType(View.LAYER_TYPE_HARDWARE, null); 
     webSettings.setAllowUniversalAccessFromFileURLs(true); 
    } else { 
     webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
    } 

    webView.setWebViewClient(new WebViewClient(){ 
    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
    mPbar.setVisibility(View.VISIBLE); 
    } 

    public void onPageFinished(WebView view, String url) { 
    mPbar.setVisibility(View.GONE); 
    } 

    @SuppressWarnings("deprecation") 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url.startsWith("whatsapp://")) { 
      final Uri uri = Uri.parse("market://details?id=com.whatsapp"); 
      final Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri); 
      @SuppressWarnings({"NewApi", "deprecation"}) 
      final int newDocumentFlag = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) ? Intent.FLAG_ACTIVITY_NEW_DOCUMENT : Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET; 
      goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | newDocumentFlag | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); 

     try { 
      startActivity(goToMarket); 
     } catch (ActivityNotFoundException ex) { 
      startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=com.whatsapp"))); 
     } 
     return true; 
    } 

    return super.shouldOverrideUrlLoading(view, url); 
    } 

    }); 


    webView.setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) { 
       webView.goBack(); 
       return true; 
      } 
      return false; 
     } 
    }); 

    webView.setThirdPartyCookiesEnabled(true); 
    webView.setCookiesEnabled(true); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@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. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 


@Override 
protected void onResume() { 
    super.onResume(); 
    webView.onResume(); 
} 

@Override 
protected void onPause() { 
    webView.onPause(); 
    super.onPause(); 
} 

@Override 
protected void onDestroy() { 
    webView.onDestroy(); 
    super.onDestroy(); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent); 
    webView.onActivityResult(requestCode, resultCode, intent); 
} 

@Override 
public void onBackPressed() { 
    if (!webView.onBackPressed()) { return; } 
    super.onBackPressed(); 
} 


@Override 
public void onPageStarted(String url, Bitmap favicon) { 

} 

@Override 
public void onPageFinished(String url) { 

} 

@Override 
public void onPageError(int errorCode, String description, String failingUrl) { 

} 

@Override 
public void onDownloadRequested(String url, String suggestedFilename, String mimeType, long contentLength, String contentDisposition, String userAgent) { 

} 

@Override 
public void onExternalPageRequest(String url) { 

} 
} 

Fehler:

Error:(86, 11) error: cannot find symbol class Uri 
Error:(86, 21) error: cannot find symbol variable Uri 
Error:(94, 22) error: cannot find symbol class ActivityNotFoundException 
Error:(95, 62) error: cannot find symbol variable Uri 

PS: Ich bin kein Android Developer

+0

dies wird Ihnen helfen: http://stackoverflow.com/ Fragen/13760310/how-to-intercept-URL-lädt-in-webview-android –

Antwort

0

Sie sollen shouldOverrideUrlLoading außer Kraft setzen, festzustellen, ob die URL hat das angegebene Präfix, und öffnen Sie dann die WhatsApp-Liste im Play Store, oder wenn der Play Store nicht installiert ist, öffnen Sie es im Inneren Browser:

webView.setWebViewClient(new WebViewClient(){ 

    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
     mPbar.setVisibility(View.VISIBLE); 
    } 

    public void onPageFinished(WebView view, String url) { 
     mPbar.setVisibility(View.GONE); 
    } 

    @SuppressWarnings("deprecation") 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url.startsWith("whatsapp://")) { 
      // create an intent for Play Store 
      final Uri uri = Uri.parse("market://details?id=com.whatsapp"); 
      final Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri); 
      @SuppressWarnings({"NewApi", "deprecation"}) 
      final int newDocumentFlag = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) ? Intent.FLAG_ACTIVITY_NEW_DOCUMENT : Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET; 
      goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | newDocumentFlag | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); 

      try { 
       // open Whatsapp listing in Play Store app 
       startActivity(goToMarket); 
      } catch (ActivityNotFoundException ex) { 
       // open Whatsapp listing in browser 
       startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=com.whatsapp"))); 
      } 

      return true; 
     } 

     return super.shouldOverrideUrlLoading(view, url); 
    } 

}); 

EDIT

Fügen Sie diese Zeilen an den Anfang der Datei die notwendigen Klassen zu importieren:

import android.content.ActivityNotFoundException; 
import android.net.Uri;  
+0

Fehler: Kann nicht gefunden Klasse Uri und ActivityNotFoundException –

+0

Bitte bearbeiten Sie Ihre Frage und enthalten die Stack-Trace –

+0

Fertig. Bitte prüfe. –

Verwandte Themen