【问题标题】:android startActivity from JavascriptInterface来自JavascriptInterface的android startActivity
【发布时间】:2012-01-10 19:17:18
【问题描述】:

简单的一般性问题。

Webview 已连接到我的 JavascriptInterface 类,它肯定是功能性的。但是,由于 JavascriptInterface 没有扩展 Activity,我似乎无法使用 startActivity(intent); 来意图新的活动;

我应该延长 Activity 吗?是否有另一种方法可以意图进行另一项活动? (在我非常特殊的情况下,我试图使用 YouTube 应用)

package com.privateized.moreprivate;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.util.Log;
import android.widget.Toast;

public class JavaScriptInterface {
    Context mContext;

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

    /** Show a toast from the web page */
    public void showToast(String toast) {
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    }



    ///// vvvvv This no Worky vvvvv Just crashes ////////
    public void YouTube(String id) {
        Log.d("JS", "Launching YouTube:" + id);
        Activity activity = new Activity();
        String videoId = id;
        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube:"+videoId)); 
        i.putExtra("VIDEO_ID", videoId); 
        Log.d("JS", "Starting Activity");
        activity.startActivity(i);
    }

}

【问题讨论】:

  • Activity activity = new Activity(); - 永远不要那样做。 Android Activity 类永远不会以这种方式直接实例化。 sgarman 的答案应该可以满足您的需要。

标签: java javascript android android-intent


【解决方案1】:

只需使用mContext.startActivity(i)

无需创建 Activity 也无需扩展 Activity,您只需要对已存储的 Context 的引用即可。

【讨论】:

  • 看到这很奇怪,因为这是我尝试的第一件事,但是 Eclispe 未能在自动完成列表中列出 startActivity,当我手动输入时会告诉我它无效,随后不会让我编译。所以我走了一个切线哈哈似乎现在可以工作了,也许 Eclipse 只需要重新启动:x 谢谢大家!
  • 我是 IntelliJ IDEA 的忠实支持者,可能想在您的空闲时间检查一下。具有非常好的安卓集成。
【解决方案2】:

所以我有一个解决方案来开始一个新的意图,如果有 Fragments resp。 SherlockFragments,我在这个问题上苦苦挣扎了将近一个小时,但你来了:

打开 WebView 的片段:

public class MyWebViewFragment extends SherlockFragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);

    View v = inflater.inflate(R.layout.webviewfragment, container, false);
    WebView myWebView = (WebView) v.findViewById(R.id.webviewcontainer);
    myWebView.getSettings().setJavaScriptEnabled(true);
    myWebView.addJavascriptInterface(new WebAppInterface(getActivity()),
            "Android");
    myWebView.loadUrl("file:///android_asset/javascript/index.html");

    return v;
}

Javascript接口: 我正在研究 API Level 17,这就是我使用 @JavascriptInterface 的原因。 On id 不会在没有注释的情况下与 L16 一起使用,但我不明白为什么......

public class WebAppInterface {
Context mContext;

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


@JavascriptInterface
public void playFragmentActivity(long id) {

    Intent intent = new Intent(mContext, FragmentActivity.class);
    intent.putExtra(FragmentActivity.EXTRA_ID,Id);
    mContext.startActivity(intent);
}

}

HTML

<body>
<div>
    <input type="button" value="Start X FragmentActivity"
        onClick="changeFragmentActivity(183216076724928)" />
</div>

<script type="text/javascript">

    function changeFragmentActivity(id) {
        Android.playFragmentActivity(id);
    }
</script>
</body>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 2011-12-18
    • 2017-11-02
    相关资源
    最近更新 更多