Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Webview-在外部应用程序和浏览器/android中打开链接_Android_Webview_External - Fatal编程技术网

Webview-在外部应用程序和浏览器/android中打开链接

Webview-在外部应用程序和浏览器/android中打开链接,android,webview,external,Android,Webview,External,我是android应用程序的初学者。我已经用HTML制作了一个web应用程序,我希望能够在android studio中制作的应用程序中使用它。我设法在android studio中创建了一个简单的web视图,当我在我的设备上测试它时,它使我的web应用程序运行良好。唯一的问题是web视图处理web应用程序中的所有URL。web应用程序由选项卡组成,当我单击不同的页面时,这些选项卡会将我指向不同的页面,这正是我想要的。但是我有联系人按钮和不同的链接,我想从网络视图中“释放”。让我们以联系人按钮为

我是android应用程序的初学者。我已经用HTML制作了一个web应用程序,我希望能够在android studio中制作的应用程序中使用它。我设法在android studio中创建了一个简单的web视图,当我在我的设备上测试它时,它使我的web应用程序运行良好。唯一的问题是web视图处理web应用程序中的所有URL。web应用程序由选项卡组成,当我单击不同的页面时,这些选项卡会将我指向不同的页面,这正是我想要的。但是我有联系人按钮和不同的链接,我想从网络视图中“释放”。让我们以联系人按钮为例。我有一个Galaxy便笺,我正在用它来测试我的应用程序。当我在手机上打开我的应用程序时,我会看到我的Web应用程序,我可以四处浏览。当我单击联系人按钮时,web视图处理链接,并给我一个“页面无法加载”,而不是打开手机上的邮件应用程序。我还有一些带有链接的按钮,我希望能够在手机的外部浏览器中打开这些按钮。我希望你能理解我的问题,我很抱歉我的英语不好

这是我为web视图编写的一些代码

Mainactivity.java

public class MainActivity extends ActionBarActivity {

WebView browser;

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



    browser = (WebView) findViewById(R.id.wvwMain);

    browser.getSettings().setJavaScriptEnabled(true);
    browser.getSettings().setLoadWithOverviewMode(true);
    browser.getSettings().setUseWideViewPort(true);

    browser.setWebViewClient(new ourViewClient());
    try {
        browser.loadUrl("http://WebAppURL");
    } catch (Exception e) {
        e.printStackTrace();
    }

}
public class ourViewClient extends WebViewClient {

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    view.loadUrl(url);

    return true; 
 }    
}
OurViewClient.java

public class MainActivity extends ActionBarActivity {

WebView browser;

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



    browser = (WebView) findViewById(R.id.wvwMain);

    browser.getSettings().setJavaScriptEnabled(true);
    browser.getSettings().setLoadWithOverviewMode(true);
    browser.getSettings().setUseWideViewPort(true);

    browser.setWebViewClient(new ourViewClient());
    try {
        browser.loadUrl("http://WebAppURL");
    } catch (Exception e) {
        e.printStackTrace();
    }

}
public class ourViewClient extends WebViewClient {

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    view.loadUrl(url);

    return true; 
 }    
}

尝试用这种方法实现您的
WebViewClient
类似的

 private class VideoWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            try{
                System.out.println("url called:::" + url);
                if (url.startsWith("tel:")) {
                    Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url));
                    startActivity(intent);
                }  else if (url.startsWith("http:")
                        || url.startsWith("https:")) {

                     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
                     startActivity(intent);

                }  else if (url.startsWith("mailto:")) {

                    MailTo mt=MailTo.parse(url);

                    send_email(mt.getTo());

                }
                else {
                    return false;
                }
            }catch(Exception e){
                e.printStackTrace();
            }

            return true;
        }

    }
并创建发送邮件功能,如

   public void send_email(String email_add) {
    System.out.println("Email address::::" + email_add);

    final Intent emailIntent = new Intent(
            android.content.Intent.ACTION_SEND);
    emailIntent.setType("plain/text");
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
            new String[] { email_add });
    emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "");
    emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "");
    yourActivity.this.startActivity(
            Intent.createChooser(emailIntent, "Send mail..."));

}

我的代码运行良好,只需记住代码行顺序和位置。。复制并粘贴mainactivity.java文件中的代码

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mywebView = findViewById(R.id.myview);
    WebSettings webSettings = mywebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    mywebView.loadUrl("http://yourwebsitename.com");
    mywebView.setWebViewClient(new MyCustomWebViewClient());

}

class MyCustomWebViewClient extends WebViewClient {

    @Override
    public  boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (Uri.parse(url).getHost().equals("yourwebsitename.com")) {
            //open url contents in webview
            return false;
        } else {
            //here open external links in external browser or app
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
            return true;
        }

    }
}
}

我得到
错误:(24,17)找不到符号方法startActivity(android.content.Intent)
错误:(58,9)找不到符号方法getActivity()
错误消失了,但是
错误:(24,17)找不到符号方法startActivity(android.content.Intent)呢
@Stumpp我告诉过你用这种方法试试
MainActivity.this.startActivity(Intent.createChooser(emailIntent,“发送邮件…”)
@Stumpp最好发布您的代码。我想看看你们是如何集成的?我让它工作了,但似乎每个链接都会在外部浏览器中打开,不管它是否包含http。我的web应用程序中有这些选项卡,我想在webview中打开,但现在它在外部打开。我该如何解决这个问题?