xử lý nhấp vào liên kết textview trong ứng dụng Android của tôi


148

Tôi hiện đang hiển thị đầu vào HTML trong TextView như vậy:

tv.setText(Html.fromHtml("<a href='test'>test</a>"));

HTML đang được hiển thị được cung cấp cho tôi thông qua tài nguyên bên ngoài, vì vậy tôi không thể thay đổi mọi thứ xung quanh theo ý muốn, nhưng dĩ nhiên, tôi có thể thực hiện một số thao tác giả mạo với HTML, để thay đổi giá trị href, nói, sang một thứ khác.

Những gì tôi muốn là có thể xử lý một nhấp chuột liên kết trực tiếp từ trong ứng dụng, thay vì liên kết mở một cửa sổ trình duyệt. Điều này có thể đạt được ở tất cả? Tôi đoán có thể đặt giao thức của giá trị href thành một cái gì đó như "myApp: //", và sau đó đăng ký một cái gì đó sẽ cho phép ứng dụng của tôi xử lý giao thức đó. Nếu đây thực sự là cách tốt nhất, tôi muốn biết làm thế nào được thực hiện, nhưng tôi hy vọng có một cách dễ dàng hơn để nói, "khi một liên kết được nhấp vào trong văn bản này, tôi muốn nêu ra một sự kiện nhận được giá trị href của liên kết làm tham số đầu vào "


Tôi đã tìm thấy một cái gì đó khác tại [Tại đây] [1] [1]: stackoverflow.com/questions/7255249/ Hy vọng có thể giúp bạn ^^
Mr_DK

1
David, tôi đang gặp trường hợp tương tự như của bạn, tôi cũng nhận được html từ nguồn bên ngoài (web), nhưng làm cách nào để tôi kiểm tra lại giá trị href để tôi có thể áp dụng giải pháp này.
X09

Câu trả lời:


182

Đến đây gần một năm sau, có một cách khác để tôi giải quyết vấn đề cụ thể của mình. Vì tôi muốn liên kết được xử lý bởi ứng dụng của riêng tôi, có một giải pháp đơn giản hơn một chút.

Bên cạnh bộ lọc ý định mặc định, tôi chỉ đơn giản để cho hoạt động mục tiêu của mình lắng nghe ACTION_VIEWý định, và cụ thể, những người có sơ đồcom.package.name

<intent-filter>
    <category android:name="android.intent.category.DEFAULT" />
    <action android:name="android.intent.action.VIEW" />
    <data android:scheme="com.package.name" />  
</intent-filter>

Điều này có nghĩa là các liên kết bắt đầu bằng com.package.name://sẽ được xử lý bởi hoạt động của tôi.

Vì vậy, tất cả những gì tôi phải làm là xây dựng một URL chứa thông tin tôi muốn truyền đạt:

com.package.name://action-to-perform/id-that-might-be-needed/

Trong hoạt động mục tiêu của tôi, tôi có thể lấy địa chỉ này:

Uri data = getIntent().getData();

Trong ví dụ của tôi, tôi chỉ có thể kiểm tra datacác giá trị null, bởi vì khi nào nó không rỗng, tôi sẽ biết nó được gọi bằng phương tiện của một liên kết như vậy. Từ đó, tôi trích xuất các hướng dẫn tôi cần từ url để có thể hiển thị dữ liệu phù hợp.


1
Này câu trả lời của bạn là hoàn hảo. Làm việc tốt. Nhưng chúng ta có thể gửi dữ liệu của dữ liệu đã qua với điều này không?
dùng861973

4
@ user861973: Có, getDatacung cấp cho bạn URI đầy đủ, bạn cũng có thể sử dụng getDataStringđể mang lại một biểu diễn văn bản. Dù bằng cách nào, bạn có thể xây dựng URL để chứa tất cả dữ liệu bạn cần com.package.name://my-action/1/2/3/4và bạn có thể trích xuất thông tin từ chuỗi đó.
David Hedlund

3
Tôi mất một ngày để hiểu ý tưởng này, nhưng tôi nói với bạn điều gì - điều đó rất đáng giá. Giải pháp được thiết kế tốt
Dennis

7
giải pháp tuyệt vời. Đừng quên thêm nó vào Textview để nó cho phép các liên kết. tv.setMovementMethod (LinkMovementMethod.getInstance ());
Daniel Benedykt

3
Xin lỗi, nhưng tôi nên nói theo phương pháp nào trong hoạt động Uri data = getIntent().getData();? Tôi cứ nhận Activity not found to handle intentlỗi. - Cảm ơn
rgv

62

Một cách khác, mượn một chút từ Linkify nhưng cho phép bạn tùy chỉnh xử lý của mình.

Lớp Span tùy chỉnh:

public class ClickSpan extends ClickableSpan {

    private OnClickListener mListener;

    public ClickSpan(OnClickListener listener) {
        mListener = listener;
    }

    @Override
    public void onClick(View widget) {
       if (mListener != null) mListener.onClick();
    }

    public interface OnClickListener {
        void onClick();
    }
}

Chức năng trợ giúp:

public static void clickify(TextView view, final String clickableText, 
    final ClickSpan.OnClickListener listener) {

    CharSequence text = view.getText();
    String string = text.toString();
    ClickSpan span = new ClickSpan(listener);

    int start = string.indexOf(clickableText);
    int end = start + clickableText.length();
    if (start == -1) return;

    if (text instanceof Spannable) {
        ((Spannable)text).setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    } else {
        SpannableString s = SpannableString.valueOf(text);
        s.setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        view.setText(s);
    }

    MovementMethod m = view.getMovementMethod();
    if ((m == null) || !(m instanceof LinkMovementMethod)) {
        view.setMovementMethod(LinkMovementMethod.getInstance());
    }
}

Sử dụng:

 clickify(textView, clickText,new ClickSpan.OnClickListener()
     {
        @Override
        public void onClick() {
            // do something
        }
    });

Một giải pháp khác là thay thế các Span bằng các Span tùy chỉnh của bạn, xem stackoverflow.com/a/11417498/792677
A-Live

giải pháp thanh lịch tuyệt vời
Mario Zderic

Tôi thấy đây là giải pháp đơn giản nhất để thực hiện. Google chưa bao giờ dọn dẹp mớ hỗn độn này để có cách liên tục tạo liên kết trong các bài kiểm tra có thể nhấp được. Đó là một cách tiếp cận tàn bạo để buộc một nhịp vào nó, nhưng nó hoạt động tốt trên các phiên bản HĐH khác nhau .. +1
tức giận vào

55

nếu có nhiều liên kết trong chế độ xem văn bản. Ví dụ: textview có "https: //" và "tel no", chúng ta có thể tùy chỉnh phương thức LinkMovement và xử lý các nhấp chuột cho các từ dựa trên một mẫu. Kèm theo là Phương pháp di chuyển liên kết tùy chỉnh.

public class CustomLinkMovementMethod extends LinkMovementMethod
{

private static Context movementContext;

private static CustomLinkMovementMethod linkMovementMethod = new CustomLinkMovementMethod();

public boolean onTouchEvent(android.widget.TextView widget, android.text.Spannable buffer, android.view.MotionEvent event)
{
    int action = event.getAction();

    if (action == MotionEvent.ACTION_UP)
    {
        int x = (int) event.getX();
        int y = (int) event.getY();

        x -= widget.getTotalPaddingLeft();
        y -= widget.getTotalPaddingTop();

        x += widget.getScrollX();
        y += widget.getScrollY();

        Layout layout = widget.getLayout();
        int line = layout.getLineForVertical(y);
        int off = layout.getOffsetForHorizontal(line, x);

        URLSpan[] link = buffer.getSpans(off, off, URLSpan.class);
        if (link.length != 0)
        {
            String url = link[0].getURL();
            if (url.startsWith("https"))
            {
                Log.d("Link", url);
                Toast.makeText(movementContext, "Link was clicked", Toast.LENGTH_LONG).show();
            } else if (url.startsWith("tel"))
            {
                Log.d("Link", url);
                Toast.makeText(movementContext, "Tel was clicked", Toast.LENGTH_LONG).show();
            } else if (url.startsWith("mailto"))
            {
                Log.d("Link", url);
                Toast.makeText(movementContext, "Mail link was clicked", Toast.LENGTH_LONG).show();
            }
            return true;
        }
    }

    return super.onTouchEvent(widget, buffer, event);
}

public static android.text.method.MovementMethod getInstance(Context c)
{
    movementContext = c;
    return linkMovementMethod;
}

Điều này nên được gọi từ textview theo cách sau:

textViewObject.setMovementMethod(CustomLinkMovementMethod.getInstance(context));

8
Bạn thực sự không cần phải vượt qua bối cảnh để "đằng sau lưng" trong một biến tĩnh riêng biệt, đó là loại có mùi. Chỉ cần sử dụng widget.getContext()thay thế.
Sergej Koščejev

Có bối cảnh có thể được gỡ bỏ. Cảm ơn đã chỉ ra Sergej
Arun

6
Điều này hoạt động rất tốt nhưng bạn phải gọi setMovementMethod sau setText, nếu không nó sẽ ghi đè bằng LinkMovementMethod mặc định
Ray Britton

Hoạt động, nhưng không cần phải lặp lại qua các nhịp trong mỗi lần nhấp. Ngoài ra bộ lọc theo vị trí có vẻ dễ bị lỗi. Một cách tiếp cận khởi tạo một lần tương tự được hiển thị trong câu trả lời này .
Smith

@Arun Vui lòng cập nhật câu trả lời của bạn theo các ý kiến.
Behrouz.M

45

Đây là một giải pháp chung chung hơn dựa trên câu trả lời @Arun

public abstract class TextViewLinkHandler extends LinkMovementMethod {

    public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
        if (event.getAction() != MotionEvent.ACTION_UP)
            return super.onTouchEvent(widget, buffer, event);

        int x = (int) event.getX();
        int y = (int) event.getY();

        x -= widget.getTotalPaddingLeft();
        y -= widget.getTotalPaddingTop();

        x += widget.getScrollX();
        y += widget.getScrollY();

        Layout layout = widget.getLayout();
        int line = layout.getLineForVertical(y);
        int off = layout.getOffsetForHorizontal(line, x);

        URLSpan[] link = buffer.getSpans(off, off, URLSpan.class);
        if (link.length != 0) {
            onLinkClick(link[0].getURL());
        }
        return true;
    }

    abstract public void onLinkClick(String url);
}

Để sử dụng nó chỉ cần thực hiện onLinkClickcác TextViewLinkHandlerlớp. Ví dụ:

    textView.setMovementMethod(new TextViewLinkHandler() {
        @Override
        public void onLinkClick(String url) {
            Toast.makeText(textView.getContext(), url, Toast.LENGTH_SHORT).show();
        }
    });

2
làm việc tuyệt vời lưu ý: đừng quên thêm android: autoLink = "web" vào chế độ xem văn bản của bạn. không có thuộc tính autolink, điều này không hoạt động.
okarakose

Tôi đã thử tất cả các giải pháp được liệt kê ở đây. Điều này là tốt nhất cho tôi. Nó rõ ràng, đơn giản để sử dụng và mạnh mẽ. Gợi ý: bạn cần làm việc với Html.fromHtml để tận dụng tối đa.
Kai Wang

1
Câu trả lời tốt nhất! Cảm ơn! Đừng quên thêm android: autoLink = "web" trong xml hoặc trong mã LinkifyCompat.addLinks (textView, Linkify.weB_URLS);
Nikita Axyonov

1
Những gì sẽ là một yêu cầu có vẻ đơn giản là một vấn đề khá phức tạp trong Android. Giải pháp này mất rất nhiều nỗi đau đó. Đã phát hiện ra rằng autoLink = "web" không bắt buộc để giải pháp này hoạt động trên Android N .. +1
tức giậnITguy

1
Tại sao trên thế giới, một lớp học như thế này không tồn tại nguyên bản - sau ngần ấy năm - nằm ngoài tôi. Cảm ơn Android vì LinkMovementMethod, nhưng tôi thường thích kiểm soát giao diện người dùng của riêng tôi. Bạn có thể báo cáo các sự kiện UI cho tôi và để bộ điều khiển MY có thể xử lý chúng.
ký hiệu

10

rất đơn giản, thêm dòng này vào mã của bạn:

tv.setMovementMethod(LinkMovementMethod.getInstance());

1
Cảm ơn bạn đã trả lời, jonathan. Vâng, tôi biết về MovementMethod; điều tôi không chắc chắn là làm thế nào để xác định rằng ứng dụng của riêng tôi sẽ xử lý nhấp chuột liên kết, thay vì chỉ mở trình duyệt, như phương thức di chuyển mặc định sẽ (xem câu trả lời được chấp nhận). Dẫu sao cũng xin cảm ơn.
David Hedlund

5

Giải pháp

Tôi đã triển khai một lớp nhỏ với sự trợ giúp mà bạn có thể xử lý các nhấp chuột dài trên chính TextView và Taps trên các liên kết trong TextView.

Bố trí

TextView android:id="@+id/text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:autoLink="all"/>

TextViewClickMovement.java

import android.content.Context;
import android.text.Layout;
import android.text.Spannable;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.util.Patterns;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.TextView;

public class TextViewClickMovement extends LinkMovementMethod {

    private final String TAG = TextViewClickMovement.class.getSimpleName();

    private final OnTextViewClickMovementListener mListener;
    private final GestureDetector                 mGestureDetector;
    private TextView                              mWidget;
    private Spannable                             mBuffer;

    public enum LinkType {

        /** Indicates that phone link was clicked */
        PHONE,

        /** Identifies that URL was clicked */
        WEB_URL,

        /** Identifies that Email Address was clicked */
        EMAIL_ADDRESS,

        /** Indicates that none of above mentioned were clicked */
        NONE
    }

    /**
     * Interface used to handle Long clicks on the {@link TextView} and taps
     * on the phone, web, mail links inside of {@link TextView}.
     */
    public interface OnTextViewClickMovementListener {

        /**
         * This method will be invoked when user press and hold
         * finger on the {@link TextView}
         *
         * @param linkText Text which contains link on which user presses.
         * @param linkType Type of the link can be one of {@link LinkType} enumeration
         */
        void onLinkClicked(final String linkText, final LinkType linkType);

        /**
         *
         * @param text Whole text of {@link TextView}
         */
        void onLongClick(final String text);
    }


    public TextViewClickMovement(final OnTextViewClickMovementListener listener, final Context context) {
        mListener        = listener;
        mGestureDetector = new GestureDetector(context, new SimpleOnGestureListener());
    }

    @Override
    public boolean onTouchEvent(final TextView widget, final Spannable buffer, final MotionEvent event) {

        mWidget = widget;
        mBuffer = buffer;
        mGestureDetector.onTouchEvent(event);

        return false;
    }

    /**
     * Detects various gestures and events.
     * Notify users when a particular motion event has occurred.
     */
    class SimpleOnGestureListener extends GestureDetector.SimpleOnGestureListener {
        @Override
        public boolean onDown(MotionEvent event) {
            // Notified when a tap occurs.
            return true;
        }

        @Override
        public void onLongPress(MotionEvent e) {
            // Notified when a long press occurs.
            final String text = mBuffer.toString();

            if (mListener != null) {
                Log.d(TAG, "----> Long Click Occurs on TextView with ID: " + mWidget.getId() + "\n" +
                                  "Text: " + text + "\n<----");

                mListener.onLongClick(text);
            }
        }

        @Override
        public boolean onSingleTapConfirmed(MotionEvent event) {
            // Notified when tap occurs.
            final String linkText = getLinkText(mWidget, mBuffer, event);

            LinkType linkType = LinkType.NONE;

            if (Patterns.PHONE.matcher(linkText).matches()) {
                linkType = LinkType.PHONE;
            }
            else if (Patterns.WEB_URL.matcher(linkText).matches()) {
                linkType = LinkType.WEB_URL;
            }
            else if (Patterns.EMAIL_ADDRESS.matcher(linkText).matches()) {
                linkType = LinkType.EMAIL_ADDRESS;
            }

            if (mListener != null) {
                Log.d(TAG, "----> Tap Occurs on TextView with ID: " + mWidget.getId() + "\n" +
                                  "Link Text: " + linkText + "\n" +
                                  "Link Type: " + linkType + "\n<----");

                mListener.onLinkClicked(linkText, linkType);
            }

            return false;
        }

        private String getLinkText(final TextView widget, final Spannable buffer, final MotionEvent event) {

            int x = (int) event.getX();
            int y = (int) event.getY();

            x -= widget.getTotalPaddingLeft();
            y -= widget.getTotalPaddingTop();

            x += widget.getScrollX();
            y += widget.getScrollY();

            Layout layout = widget.getLayout();
            int line = layout.getLineForVertical(y);
            int off = layout.getOffsetForHorizontal(line, x);

            ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class);

            if (link.length != 0) {
                return buffer.subSequence(buffer.getSpanStart(link[0]),
                        buffer.getSpanEnd(link[0])).toString();
            }

            return "";
        }
    }
}

Sử dụng

TextView tv = (TextView) v.findViewById(R.id.textview);
tv.setText(Html.fromHtml("<a href='test'>test</a>"));
textView.setMovementMethod(new TextViewClickMovement(this, context));

Liên kết

Hi vọng điêu nay co ich! Bạn có thể tìm thấy mã ở đây .


3

Chỉ để chia sẻ một giải pháp thay thế bằng thư viện tôi đã tạo. Với Textoo , điều này có thể đạt được như sau:

TextView locNotFound = Textoo
    .config((TextView) findViewById(R.id.view_location_disabled))
    .addLinksHandler(new LinksHandler() {
        @Override
        public boolean onClick(View view, String url) {
            if ("internal://settings/location".equals(url)) {
                Intent locSettings = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(locSettings);
                return true;
            } else {
                return false;
            }
        }
    })
    .apply();

Hoặc với nguồn HTML động:

String htmlSource = "Links: <a href='http://www.google.com'>Google</a>";
Spanned linksLoggingText = Textoo
    .config(htmlSource)
    .parseHtml()
    .addLinksHandler(new LinksHandler() {
        @Override
        public boolean onClick(View view, String url) {
            Log.i("MyActivity", "Linking to google...");
            return false; // event not handled.  Continue default processing i.e. link to google
        }
    })
    .apply();
textView.setText(linksLoggingText);

Đây phải là câu trả lời hàng đầu. Cảm ơn ngài vì sự đóng góp
Marian Pavel

3

cho những người tìm kiếm nhiều lựa chọn hơn ở đây là một

// Set text within a `TextView`
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText("Hey @sarah, where did @jim go? #lost");
// Style clickable spans based on pattern
new PatternEditableBuilder().
    addPattern(Pattern.compile("\\@(\\w+)"), Color.BLUE,
       new PatternEditableBuilder.SpannableClickedListener() {
        @Override
        public void onSpanClicked(String text) {
            Toast.makeText(MainActivity.this, "Clicked username: " + text,
                Toast.LENGTH_SHORT).show();
        }
}).into(textView);

NGUỒN: CodePath


2
public static void setTextViewFromHtmlWithLinkClickable(TextView textView, String text) {
    Spanned result;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
        result = Html.fromHtml(text, Html.FROM_HTML_MODE_LEGACY);
    } else {
        result = Html.fromHtml(text);
    }
    textView.setText(result);
    textView.setMovementMethod(LinkMovementMethod.getInstance());
}

1

Tôi đã thay đổi màu của TextView thành màu xanh bằng cách sử dụng ví dụ:

android:textColor="#3399FF"

trong tệp xml. Làm thế nào để làm cho nó gạch chân được giải thích ở đây .

Sau đó, sử dụng thuộc tính onClick của nó để chỉ định một phương thức (Tôi đoán bạn có thể gọi setOnClickListener(this)theo cách khác), ví dụ:

myTextView.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
    doSomething();
}
});

Trong phương pháp đó, tôi có thể làm bất cứ điều gì tôi muốn như bình thường, chẳng hạn như khởi động một ý định. Lưu ý rằng bạn vẫn phải làm điều bình thường myTextView.setMovementMethod(LinkMovementMethod.getInstance());, như trong phương thức onCreate () nhạy cảm của bạn.


1

Câu trả lời này mở rộng giải pháp tuyệt vời của Jonathan S:

Bạn có thể sử dụng phương pháp sau để trích xuất các liên kết từ văn bản:

private static ArrayList<String> getLinksFromText(String text) {
        ArrayList links = new ArrayList();

        String regex = "\(?\b((http|https)://www[.])[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(text);
        while (m.find()) {
            String urlStr = m.group();
            if (urlStr.startsWith("(") && urlStr.endsWith(")")) {
                urlStr = urlStr.substring(1, urlStr.length() - 1);
            }
            links.add(urlStr);
        }
        return links;
    }

Điều này có thể được sử dụng để loại bỏ một trong các tham số trong clickify()phương thức:

public static void clickify(TextView view,
                                final ClickSpan.OnClickListener listener) {

        CharSequence text = view.getText();
        String string = text.toString();


        ArrayList<String> linksInText = getLinksFromText(string);
        if (linksInText.isEmpty()){
            return;
        }


        String clickableText = linksInText.get(0);
        ClickSpan span = new ClickSpan(listener,clickableText);

        int start = string.indexOf(clickableText);
        int end = start + clickableText.length();
        if (start == -1) return;

        if (text instanceof Spannable) {
            ((Spannable) text).setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        } else {
            SpannableString s = SpannableString.valueOf(text);
            s.setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            view.setText(s);
        }

        MovementMethod m = view.getMovementMethod();
        if ((m == null) || !(m instanceof LinkMovementMethod)) {
            view.setMovementMethod(LinkMovementMethod.getInstance());
        }
    }

Một vài thay đổi đối với ClickSpan:

public static class ClickSpan extends ClickableSpan {

        private String mClickableText;
        private OnClickListener mListener;

        public ClickSpan(OnClickListener listener, String clickableText) {
            mListener = listener;
            mClickableText = clickableText;
        }

        @Override
        public void onClick(View widget) {
            if (mListener != null) mListener.onClick(mClickableText);
        }

        public interface OnClickListener {
            void onClick(String clickableText);
        }
    }

Bây giờ bạn có thể chỉ cần đặt văn bản trên TextView và sau đó thêm một trình nghe cho nó:

TextViewUtils.clickify(textWithLink,new TextUtils.ClickSpan.OnClickListener(){

@Override
public void onClick(String clickableText){
  //action...
}

});

0

Cách tốt nhất tôi đã sử dụng và nó luôn làm việc cho tôi

android:autoLink="web"

8
Điều này không trả lời câu hỏi nào cả.
Tom

0

Ví dụ: Giả sử bạn đã đặt một số văn bản trong textview và bạn muốn cung cấp một liên kết trên một biểu thức văn bản cụ thể: "Nhấp vào #facebook sẽ đưa bạn đến facebook.com"

Trong bố cục xml:

<TextView
            android:id="@+id/testtext"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

Trong hoạt động:

String text  =  "Click on #facebook will take you to facebook.com";
tv.setText(text);
Pattern tagMatcher = Pattern.compile("[#]+[A-Za-z0-9-_]+\\b");
String newActivityURL = "content://ankit.testactivity/";
Linkify.addLinks(tv, tagMatcher, newActivityURL);

Đồng thời tạo một nhà cung cấp thẻ như:

public class TagProvider extends ContentProvider {

    @Override
    public int delete(Uri arg0, String arg1, String[] arg2) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public String getType(Uri arg0) {
        return "vnd.android.cursor.item/vnd.cc.tag";
    }

    @Override
    public Uri insert(Uri arg0, ContentValues arg1) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public boolean onCreate() {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3,
                        String arg4) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) {
        // TODO Auto-generated method stub
        return 0;
    }

}

Trong tệp kê khai thực hiện làm mục nhập cho nhà cung cấp và hoạt động kiểm tra như:

<provider
    android:name="ankit.TagProvider"
    android:authorities="ankit.testactivity" />

<activity android:name=".TestActivity"
    android:label = "@string/app_name">
    <intent-filter >
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="vnd.android.cursor.item/vnd.cc.tag" />
    </intent-filter>
</activity>

Bây giờ khi bạn nhấp vào #facebook, nó sẽ gọi testactivtiy. Và trong hoạt động kiểm tra, bạn có thể nhận được dữ liệu dưới dạng:

Uri uri = getIntent().getData();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.