Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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
Javascript Webview-通过JS接口启动服务。错误的上下文?_Javascript_Android_Service_Webview_Android Context - Fatal编程技术网

Javascript Webview-通过JS接口启动服务。错误的上下文?

Javascript Webview-通过JS接口启动服务。错误的上下文?,javascript,android,service,webview,android-context,Javascript,Android,Service,Webview,Android Context,这是我在这里的第一个问题,但我一直在阅读这些令人敬畏的建议。我的问题是-我有一个HTML应用程序在一个WebView里面,里面有所有的本地文件。它很好用。当我试图通过JS接口调用服务时,问题就出现了。我的JS界面工作正常,可以通过Toast获得成功,但当我尝试startService(intent)时,应用程序崩溃。相同的startService在主java文件中运行良好。我认为问题在于背景,但我不确定。显示的错误是: 04-25 21:09:55.923: W/dalvikvm(1516):

这是我在这里的第一个问题,但我一直在阅读这些令人敬畏的建议。我的问题是-我有一个HTML应用程序在一个WebView里面,里面有所有的本地文件。它很好用。当我试图通过JS接口调用服务时,问题就出现了。我的JS界面工作正常,可以通过Toast获得成功,但当我尝试startService(intent)时,应用程序崩溃。相同的startService在主java文件中运行良好。我认为问题在于背景,但我不确定。显示的错误是:

04-25 21:09:55.923: W/dalvikvm(1516): threadid=9: thread exiting with uncaught exception (group=0x40015560)
04-25 21:10:20.033: E/AndroidRuntime(1516): FATAL EXCEPTION: WebViewCoreThread
04-25 21:10:20.033: E/AndroidRuntime(1516): java.lang.NullPointerException
04-25 21:10:20.033: E/AndroidRuntime(1516):     at android.content.ContextWrapper.startService(ContextWrapper.java:336)
04-25 21:10:20.033: E/AndroidRuntime(1516):     at com.tour.giants.JavaScriptInterface.playMedia(JavaScriptInterface.java:40)
04-25 21:10:20.033: E/AndroidRuntime(1516):     at android.webkit.WebViewCore.nativeTouchUp(Native Method)
04-25 21:10:20.033: E/AndroidRuntime(1516):     at android.webkit.WebViewCore.nativeTouchUp(Native Method)
04-25 21:10:20.033: E/AndroidRuntime(1516):     at android.webkit.WebViewCore.access$3300(WebViewCore.java:54)
04-25 21:10:20.033: E/AndroidRuntime(1516):     at android.webkit.WebViewCore$EventHub$1.handleMessage(WebViewCore.java:1159)
04-25 21:10:20.033: E/AndroidRuntime(1516):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-25 21:10:20.033: E/AndroidRuntime(1516):     at android.os.Looper.loop(Looper.java:123)
04-25 21:10:20.033: E/AndroidRuntime(1516):     at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:630)
04-25 21:10:20.033: E/AndroidRuntime(1516):     at java.lang.Thread.run(Thread.java:1019)
04-25 21:10:20.103: I/Process(1516): Sending signal. PID: 1516 SIG: 9
以下是违规代码:

public class JavaScriptInterface extends Activity{
    Context mContext;

    /** Instantiate the interface and set the context */
    JavaScriptInterface(Context c) {
        mContext = c;
    }

    /** Show a toast from the web page */
    public void playMedia(String mediaUrl) {

            //THIS WORKS!
        Toast.makeText(mContext, mediaUrl, Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(mContext, MyService.class);

        // If this is AUDIO, play the audio in the background
        if(mediaUrl.endsWith(".mp3")){
            intent.putExtra("music_url", mediaUrl);
                    //THIS CRASHES!
            startService(intent);
        } 
    }
}
最后,我通过截取一个使用几乎相同代码的链接,成功地从WebView启动了这项服务

// Create Webview client to override browser rendering url and disable address bar
private class GWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // HTML5 Audio and Video give very mixed results.  Let Android handle media player

        Intent intent = new Intent(getBaseContext(), MyService.class);

        // If this is AUDIO, play the audio in the background
        else if(url.endsWith(".mp3")){   
            intent.putExtra("music_url", url);
            startService(intent);
        } 
        // This isn't a video or audio file - load normally
        else {
            view.loadUrl(url);
        }

        return true;
    }

}

我尝试过使用不同的上下文,例如
getBaseContext()
getApplicationContext()
等。

我让JavaScriptInterface扩展活动,因为startService()在没有扩展活动的情况下会出错。我在舱单上声明。。。它没有到达服务,通过日志语句验证。我让JavaScriptInterface扩展活动,因为如果没有它,startService()将出现错误。我在舱单上声明。。。它没有到达服务,由日志语句验证。