![](/img/trans.png)
[英]Receive video intent from gallery or browsable file manager in Android
[英]load url from browsable intent android
我在浏览器应用程序中实现了“ <category android:name =“ android.intent.category.BROWSABLE” />”,我希望其他任何显示该列表的浏览器都可以选择要处理该链接的应用程序,但我可以正常工作从列表中启动我的应用程序,但是它不会将该URL加载到我的应用程序中,它所做的只是打开我的应用程序并将URL粘贴到文本字段中。 有什么线索吗?
编辑:我尝试过将它粘贴后在我的webview中加载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>
LOG
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)
我会直接指出
它要做的就是打开我的应用程序,然后将URL粘贴到文本字段中。
那意味着
if (Intent.ACTION_MAIN.equals(getIntent().getAction())) {
返回true
我假设您的可浏览意图也是该应用程序的主要意图。
因此,您的“如果”正在做的是检查您的“意图”(也是您的可浏览性)是否是“主要意图”,这是正确的。
编辑:
好吧,基本上,您正在检查正在打开的可浏览屏幕是否是您的应用在打开时应显示的屏幕。
在您的Android清单中,您会看到类似
<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。 我对此没有任何经验,但是我强烈建议您看一下此链接,因为它似乎可以解释有关使用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。
我还建议您阅读此链接中提供的示例,因为它似乎是一个不错的起点。 除此之外,只需尝试和google一起获取WebView教程即可。
在第95行,查看您的Log。在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中定义的。 该活动将仅查看setContentView()中指定的布局。 有多种组合布局的方法,因此您可以在1活动中使用多个xml,但这是另一天的主题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.