如何与我的应用分享链接?

时间:2016-08-27 21:26:48

标签: android android-intent

如何在其他应用分享的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>

3 个答案:

答案 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);
        }
    }
}