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