Java 无法使用webView运行自定义URL方案

Java 无法使用webView运行自定义URL方案,java,android,Java,Android,如问题标题中所述,我在从简单的webView应用程序运行自定义URL(stoneware.app.switcher://)时遇到问题。启动webView应用程序时,它会自动加载具有自定义url链接的页面。单击该链接时,我的android平板电脑上会启动一个本地应用程序。说本地应用程序是我写的,我肯定它已安装。当我从浏览器内部“单击”该链接时,它会顺利启动本地应用程序。但是,当我在webView中单击同一链接时,它告诉我该网页不可用。到目前为止,我的搜索没有找到任何关于这个主题的东西。是否有其他人

如问题标题中所述,我在从简单的webView应用程序运行自定义URL(stoneware.app.switcher://)时遇到问题。启动webView应用程序时,它会自动加载具有自定义url链接的页面。单击该链接时,我的android平板电脑上会启动一个本地应用程序。说本地应用程序是我写的,我肯定它已安装。当我从浏览器内部“单击”该链接时,它会顺利启动本地应用程序。但是,当我在webView中单击同一链接时,它告诉我该网页不可用。到目前为止,我的搜索没有找到任何关于这个主题的东西。是否有其他人有此问题,是否有解决方法?如果有必要,我可以发布我的代码,但我不知道这是否会有很大的不同。提前感谢您抽出时间

-保罗

我尝试调用的应用程序清单如下所示:

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="appcall.thing"
      android:versionCode="1"
      android:versionName="1.0">
      <uses-sdk android:minSdkVersion="4" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".AppCallActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <intent-filter>
                <data android:scheme="stoneware.app.switcher" />
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
            </intent-filter>
        </activity>
    </application>
    </manifest> 

我的webView应用程序的代码如下:

package com.derp.helloWorld;
import java.io.File;
import java.util.*;
import android.R.menu;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.ContextWrapper;
import android.os.Bundle;
import android.text.format.DateUtils;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.TextView;

public class HelloWorldActivity extends Activity{
    int currentView;
    public WebView navView;
   public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   currentView = 1000;
   //views = new ArrayList<WebView>();
   navView = new WebView(this);
   setContentView(navView);
   navView.setWebViewClient(new HelloWebViewController(false, this));
   //navView.loadUrl("http://www.google.com");
   navView.getSettings().setJavaScriptEnabled(true);
   clearCache(this, 0);
   navView.loadUrl("http://192.168.1.166");
 }
 static int clearCacheFolder(final File dir, final int numDays) {
        int deletedFiles = 0;
        if (dir!= null && dir.isDirectory()) {
            try {
                for (File child:dir.listFiles()) {

                    //first delete subdirectories recursively
                    if (child.isDirectory()) {
                        deletedFiles += clearCacheFolder(child, numDays);
                    }

                    //then delete the files and subdirectories in this dir
                    //only empty directories can be deleted, so subdirs have been done first
                    if (child.lastModified() < new Date().getTime() - numDays * DateUtils.DAY_IN_MILLIS) {
                        if (child.delete()) {
                            deletedFiles++;
                        }
                    }
                }
            }
            catch(Exception e) {
                System.out.println("Failed to clean the cach");
        }

     }
            return deletedFiles;
     }      
        /*
         * Delete the files older than numDays days from the application cache
         * 0 means all files.
         */
        public static void clearCache(final Context context, final int numDays) {
           System.out.println(numDays);
            int numDeletedFiles = clearCacheFolder(context.getCacheDir(), numDays);
            System.out.println(numDeletedFiles);
        }


 }
package com.derp.helloWorld;
导入java.io.File;
导入java.util.*;
导入android.R.菜单;
导入android.app.Activity;
导入android.app.FragmentTransaction;
导入android.content.Context;
导入android.content.ContextWrapper;
导入android.os.Bundle;
导入android.text.format.DateUtils;
导入android.util.Log;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.MotionEvent;
导入android.view.view;
导入android.view.view.OnTouchListener;
导入android.view.Window;
导入android.webkit.WebView;
导入android.widget.Button;
导入android.widget.TextView;
公共类HelloWorldActivity扩展了活动{
int currentView;
公共网络视图;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
currentView=1000;
//视图=新的ArrayList();
navView=新的网络视图(本);
setContentView(导航视图);
setWebViewClient(新的HelloWebViewController(false,this));
//navView.loadUrl(“http://www.google.com");
navView.getSettings().setJavaScriptEnabled(true);
clearCache(this,0);
navView.loadUrl(“http://192.168.1.166");
}
静态int clearCacheFolder(最终文件目录,最终int numDays){
int deletedFiles=0;
if(dir!=null&&dir.isDirectory()){
试一试{
对于(文件子项:dir.listFiles()){
//首先递归删除子目录
if(child.isDirectory()){
deletedFiles+=clearCacheFolder(子项,numDays);
}
//然后删除此目录中的文件和子目录
//只能删除空目录,因此必须先执行子目录
if(child.lastModified()
你知道我的电脑为什么不工作吗。。。好的,你明白了吗?因此,现在提供更多信息,如清单文件中的意图过滤器I抱歉;我不认为本地应用程序代码是个问题,因为它在浏览器中工作。我将在一秒钟内用代码编辑我的问题。你有带html的webview,并且有一个链接。。。你在同一个应用程序或其他应用程序中有活动,当你点击此链接时,应该会打开这些活动。。。因此,我们需要知道此活动的意图过滤器如何告诉您最终的错误。。。webview初始化代码将有助于您理解我正在调用的应用程序的意图过滤器,对吗?好的,首先您可以将
android:host=“hostorwhere”
添加到元素中,然后链接看起来应该像
stoneware.app。switcher://hostorwhatever/?rest=goes_here