【问题标题】:load url from browsable intent android从可浏览的意图 android 加载 url
【发布时间】:2015-04-11 17:18:39
【问题描述】:

我实现了“” 在我的浏览器应用程序中,我希望任何其他显示列表的浏览器选择哪个应用程序来处理该链接,它工作正常我能够从列表中启动我的应用程序,但是它不会在我的应用程序中加载该 url,它所做的一切是打开我的应用程序并将 URL 粘贴到文本字段中。有什么线索吗?

编辑:我在粘贴后尝试在我的网页视图中加载网址,但应用程序强制关闭

TextView uri = (TextView) findViewById(R.id.urlField);
    //if (Intent.ACTION_MAIN.equals(getIntent().getAction())) {
        String intentUri = (new Intent("com.example.browsableintent.MY_ACTION"))
                .toUri(Intent.URI_INTENT_SCHEME).toString();
        uri.setText(intentUri);
        webView.loadUrl(intentUri);
        Log.w("URLHandler", intentUri);
    //} else {
        Uri data = getIntent().getData();
        if (data == null) {
            uri.setText("");
        } else {
            uri.setText(getIntent().getData().toString());
        }
    //}

清单

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.LAUNCHER" />
            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.APP_BROWSER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data android:scheme="http" />
            <data android:scheme="https" />
            <data android:scheme="about" />
            <data android:scheme="javascript" />
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT" />

            <data android:scheme="http" />
            <data android:scheme="https" />
            <data android:scheme="inline" />
            <data android:mimeType="text/html" />
            <data android:mimeType="text/plain" />
            <data android:mimeType="application/xhtml+xml" />
            <data android:mimeType="application/vnd.wap.xhtml+xml" />
        </intent-filter>
        <!-- For viewing saved web archives. -->
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT" />

            <data android:scheme="http" />
            <data android:scheme="https" />
            <data android:scheme="file" />
            <data android:mimeType="application/x-webarchive-xml" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.WEB_SEARCH" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data android:scheme="" />
            <data android:scheme="http" />
            <data android:scheme="https" />
        </intent-filter>

日志

02-11 17:50:48.678: E/AndroidRuntime(29023): FATAL EXCEPTION: main
02-11 17:50:48.678: E/AndroidRuntime(29023): Process: com.air.swiftmp, PID: 29023
02-11 17:50:48.678: E/AndroidRuntime(29023): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.air.swiftmp/com.air.swiftmp.MainActivity}: java.lang.NullPointerException
02-11 17:50:48.678: E/AndroidRuntime(29023):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
02-11 17:50:48.678: E/AndroidRuntime(29023):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2350)
02-11 17:50:48.678: E/AndroidRuntime(29023):    at android.app.ActivityThread.access$800(ActivityThread.java:163)
02-11 17:50:48.678: E/AndroidRuntime(29023):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1257)
02-11 17:50:48.678: E/AndroidRuntime(29023):    at android.os.Handler.dispatchMessage(Handler.java:102)
02-11 17:50:48.678: E/AndroidRuntime(29023):    at android.os.Looper.loop(Looper.java:157)
02-11 17:50:48.678: E/AndroidRuntime(29023):    at android.app.ActivityThread.main(ActivityThread.java:5335)
02-11 17:50:48.678: E/AndroidRuntime(29023):    at   java.lang.reflect.Method.invokeNative(Native Method)
02-11 17:50:48.678: E/AndroidRuntime(29023):    at java.lang.reflect.Method.invoke(Method.java:515)
02-11 17:50:48.678: E/AndroidRuntime(29023):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
02-11 17:50:48.678: E/AndroidRuntime(29023):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
02-11 17:50:48.678: E/AndroidRuntime(29023):    at dalvik.system.NativeStart.main(Native Method)
02-11 17:50:48.678: E/AndroidRuntime(29023): Caused by: java.lang.NullPointerException
02-11 17:50:48.678: E/AndroidRuntime(29023):    at com.air.swiftmp.MainActivity.onCreate(MainActivity.java:95)
02-11 17:50:48.678: E/AndroidRuntime(29023):    at android.app.Activity.performCreate(Activity.java:5389)
02-11 17:50:48.678: E/AndroidRuntime(29023):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
02-11 17:50:48.678: E/AndroidRuntime(29023):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2256)

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    我会直奔主题,如果

    它所做的只是打开我的应用程序并将网址粘贴到文本字段中。

    这意味着

    if (Intent.ACTION_MAIN.equals(getIntent().getAction())) {
    

    返回真

    我假设您的可浏览意图也是应用程序的主要意图。

    因此,您的“如果”正在检查您的“意图”(这也是您的可浏览)是否是“主要意图”,这将是正确的。

    编辑:

    好的,基本上您正在检查您正在打开的可浏览屏幕是否是您的应用在打开时应该显示的屏幕。

    在您的 android Manifest 中,您将拥有类似

    的内容
     <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.BROWSABLE" />
     </intent-filter>
    

    这是您的可浏览意图。 当您调用 getIntent().getAction() 时,它将返回与 Intent.MAIN_ACTION 相同的值。那是因为您在清单中实际定义了它。这没有错。

    <action android:name="android.intent.action.MAIN" />
    

    其次,您要加载您的应用在屏幕打开时获取的 URL。 我对此没有任何经验,但我强烈建议您查看this 链接,因为它似乎解释了如何使用 webViews 在您的应用中加载 URL。

    我希望这可以为您提供足够的答案并解决一些困惑!

    EDIT2:

    我猜你没有初始化你的 webView,或者没有在 webView 上设置 contentView

    所以尝试替换你的

    setContentView(<Arbitary Thing refering to most likely a layout>);
    

     WebView webview = new WebView(this);
     setContentView(webview);
    

    由于您将引用另一个布局,因此您无法为 TextView 加载 xml,因此我建议您删除

    TextView uri = (TextView) findViewById(R.id.urlField);
     uri.setText(intentUri);
    

    以及您可能引用 uri 的其他任何地方。

    我还建议阅读this 链接中提供的示例,因为它看起来是一个不错的起点。除此之外,请尝试使用 Google 搜索 WebView 教程。

    在第 95 行查看您的日志。在您的 MainActivity 中,某些内容返回 null。如果我的建议不起作用,你能告诉我第 95 行是什么吗?

    EDIT3:

    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           WebView webview = new WebView(this);
           setContentView(webview);
    
           webView.loadUrl("http://www.google.com");
    
        }
    }
    

    并将其添加到您的 android 清单中,就在标签下方

    <uses-permission android:name="android.permission.INTERNET" />
    

    /**************************************************** ************************/

    由于您是 android 新手,让我解释一下最有可能导致您的错误的原因:

    当你这样做时

    setContentView(R.id.layout_name);
    

    R.id 的任何引用都将在您的 setContentView 设置的 layout_name.xml 中查找。因此,如果您有 layout_name_2.xml 让我们说 R.id.urlField_2 并且您尝试这样做

    TextView uri = (TextView) findViewById(R.id.urlField2);
    

    它不会找到 R.id.urlField2,因为它没有在你的 layout_name 中定义。 Activity 只会查看 setContentView() 中指定的布局。有多种方法可以组合布局,因此您可以在 1 个活动中使用多个 xml,但这是另一天的话题。

    【讨论】:

    • 尝试编辑您的问题并显示您当前的代码和崩溃的错误日志。如果我不知道自己在寻找什么,我很难为您提供帮助!
    • 第 95 行是 "Log.w("URLHandler", intentUri);"我有 webviews 的经验,我的 webview 很好
    • 我想要的是每当用户在 google 上查找视频时,您知道他/她可能会在搜索结果中看到 youtube 视频,因此当他们点击该链接时,它应该询问他们想要什么该链接打开(工作正常),我还能够启动我的应用程序并将其粘贴到我的应用程序的地址栏中。 但是我希望它在粘贴该 URL 后立即加载它。
    • 那我很遗憾地不得不说我现在不知道哪里出了问题,我得稍后再看,因为我现在很忙。很抱歉给您带来不便!
    • 好的,我很抱歉。但基本上是将所有内容放在一起:您希望用户单击视频链接(例如来自 youtube),当他们选择您的应用程序打开它时,您希望在屏幕上加载 URL 以播放视频用户?如果是这样,请尝试查看this链接
    猜你喜欢
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多