如何在其他应用分享的webview中打开链接?
我试过了,但它并没有在任何地方列出我的应用程序 -
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);
Log.w("URLHandler", intentUri);
//} else {
Uri data = getIntent().getData();
if (data == null) {
uri.setText(" ");
} else {
uri.setText(getIntent().getData().toString());
}
//}
// Load URL from Browsable intent filter if there is a valid URL pasted
if (uri.length() > 0)
webView.loadUrl(url);
else
// dont load
清单
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
<data android:scheme="https" />
</intent-filter>
答案 0 :(得分:0)
要允许其他应用启动您的活动,您需要在清单文件中为相应的<intent-filter>
元素添加<activity>
元素。
<intent-filter > ... </intent-filter>
意图过滤器定义您的活动&#34;侦听的意图&#34;为了发布。
<action android:name="ndroid.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT"/>
动作和类别都是在Intent被激活之前设置的字段&#34;进入系统。然后,系统将查找与操作和类别相匹配的任何活动,如果找到,则会启动该活动,或者如果找到多个,它将向用户显示所有活动并让他们选择。
当您的应用安装在设备上时,系统会识别您的意图过滤器,并将信息添加到所有已安装应用支持的内部目标目录中。当应用程序使用隐式intent调用startActivity()或startActivityForResult()时,系统会查找哪些活动(或多个活动)可以响应intent。
将您的活动内容改为以下
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Get the intent that started this activity
Intent intent = getIntent();
Uri data = intent.getData();
// Figure out what to do based on the intent type
if (intent.getType().indexOf("image/") != -1) {
// Handle intents with image data ...
} else if (intent.getType().equals("text/plain")) {
// Handle intents with text ...
}
}
如果要将结果返回到调用您的活动,只需调用setResult()以指定结果代码和结果Intent。当您的操作完成并且用户应该返回到原始活动时,请调用finish()来关闭(并销毁)您的活动。例如:
// Create intent to deliver some kind of result data
Intent result = new Intent("com.example.RESULT_ACTION", Uri.parse("content://result_uri"));
setResult(Activity.RESULT_OK, result);
finish();
要详细了解如何实施,请点击here
答案 1 :(得分:0)
如何在其他应用分享的webview中打开链接?我希望我的应用程序位于此列表中
我试过了,但它并没有在任何地方列出我的应用程序 -
TextView uri = (TextView) findViewById(R.id.urlField);
// Get the intent that started this activity
Intent intent = getIntent();
String link = intent.getDataString();
uri.seText(link);
答案 2 :(得分:-1)
取自Chromium AndroidManifest.xml:https://cs.chromium.org/chromium/src/chrome/android/java/AndroidManifest.xml?q=AndroidManife&sq=package:chromium&l=1
<!-- Matches the common case of intents with no MIME type.-->
<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" />
</intent-filter>
<!-- Same filter as above but with MIME types.-->
<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:mimeType="text/html"/>
</intent-filter>
然后从其他应用程序中使用:
String url = "http://www.example.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
和Android将在“选择应用程序”对话框中列出您。
客户端应用的完整示例: 在AndroidManifest.xml中:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.j2ko.myapplication">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</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="https"/>
<data android:scheme="http"/>
</intent-filter>
</activity>
</application>
</manifest>
在activity_main.xml中:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.j2ko.myapplication.MainActivity">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</WebView>
</RelativeLayout>
在主要活动中:
package com.j2ko.myapplication;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.webkit.WebView;
public class MainActivity extends AppCompatActivity {
private WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.webView);
final Intent intent = getIntent();
if (intent != null) {
handleIntent(intent);
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
handleIntent(intent);
}
private void handleIntent(final Intent intent) {
if (intent.getAction() == Intent.ACTION_VIEW) {
final String url = intent.getDataString();
mWebView.loadUrl(url);
}
}
}