android uygulamamdaki metin görünümü bağlantısını tıklayın


148

Şu anda bir TextView'da şu şekilde HTML girdisi oluşturuyorum:

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

Görüntülenmekte olan HTML bana harici bir kaynak aracılığıyla sağlanıyor, bu yüzden herhangi bir şeyi istediğim gibi değiştiremem, ama tabii ki href değerini başka bir şeye değiştirmek için HTML ile biraz normal ifade yapabilirim.

İstediğim, bağlantının bir tarayıcı penceresi açmasını sağlamak yerine, bir bağlantı tıklamasını doğrudan uygulama içinden işleyebilmek. Bu başarılabilir mi? Href değerinin protokolünü "myApp: //" gibi bir şeye ayarlamanın ve ardından uygulamamın bu protokolü işlemesine izin verecek bir şeyi kaydetmenin mümkün olacağını tahmin ediyorum. Bu gerçekten en iyi yolsa, bunun nasıl yapıldığını bilmek isterim, ancak umarım, "Bu metin görünümünde bir bağlantı tıklandığında, alan bir olayı gündeme getirmek istiyorum" demenin daha kolay bir yolu vardır. bağlantının giriş parametresi olarak href değeri "


[Burada] [1] [1] adresinde başka bir şey buldum: stackoverflow.com/questions/7255249/… Size yardımcı
olacağını umuyorum

1
David, seninkine benzer bir durum yaşıyorum, html'yi de harici bir kaynaktan (web) alıyorum, ancak bu çözümü uygulayabilmek için href değerini nasıl kurcalayabilirim.
X09

Yanıtlar:


182

Neredeyse bir yıl sonra buna gelince, özel sorunumu çözdüğüm farklı bir yöntem var. Bağlantının kendi uygulamam tarafından ele alınmasını istediğim için biraz daha basit bir çözüm var.

Varsayılan amaç filtresinin yanı sıra, hedef etkinliğimin ACTION_VIEWamaçları ve özellikle şemaya sahip olanları dinlemesine izin veriyorum.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>

Bu, ile başlayan bağlantıların com.package.name://etkinliğim tarafından ele alınacağı anlamına gelir .

Yani tek yapmam gereken, iletmek istediğim bilgileri içeren bir URL oluşturmak:

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

Hedef aktivitemde şu adresi alabilirim:

Uri data = getIntent().getData();

dataÖrneğimde, boş değerleri kontrol edebilirim , çünkü boş olmadığında, böyle bir bağlantı aracılığıyla çağrıldığını bileceğim. Oradan, uygun verileri görüntüleyebilmek için ihtiyacım olan talimatları url'den çıkarıyorum.


1
Hey cevabın mükemmel. İyi çalışıyor, ancak bununla birlikte aktarılan verilerin verilerini de gönderebilir miyiz?
user861973

4
@ user861973: Evet, getDatasize tam URI'yi verir, bunu getDataStringbir metin temsili veren de kullanabilirsiniz . Her iki durumda da, URL'yi ihtiyacınız olan tüm verileri içerecek şekilde yapılandırabilir ve com.package.name://my-action/1/2/3/4bu dizeden bilgileri çıkarabilirsiniz.
David Hedlund

3
Bu fikri anlamam bir günümü aldı, ama size ne diyeceğim - buna değdi. İyi tasarlanmış çözüm
Dennis

7
harika çözüm. Bağlantıları etkinleştirmek için bunu Metin görünümüne eklemeyi unutmayın. tv.setMovementMethod (LinkMovementMethod.getInstance ());
Daniel Benedykt

3
Pardon ama aktivitede hangi yöntemde demeliyim Uri data = getIntent().getData();? Activity not found to handle intentHata almaya devam ediyorum . - Teşekkürler
rgv

62

Başka bir yol, Linkify'dan biraz ödünç alır, ancak işlemlerinizi özelleştirmenize izin verir.

Özel Açıklık Sınıfı:

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();
    }
}

Yardımcı işlev:

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());
    }
}

Kullanım:

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

Diğer bir çözüm de Spans'ı özel Spans'larınızla değiştirmektir, stackoverflow.com/a/11417498/792677
A-Live

harika zarif çözüm
Mario Zderic

Bunu, uygulanacak en basit çözüm olarak buldum. Google, metin görünümlerindeki bağlantıları sürekli olarak tıklanabilir hale getirmenin bir yolunu bulmak için bu karmaşayı hiçbir zaman temizlemedi. Bir yayılımı zorlamak için acımasız bir yaklaşım, ancak farklı işletim sistemi sürümlerinde iyi çalışıyor .. +1
kızgınTguy

55

metin görünümünde birden çok bağlantı varsa. Örneğin, metin görünümünde "https: //" ve "tel no" vardır, LinkMovement yöntemini özelleştirebilir ve bir kalıba dayalı olarak kelimeler için tıklamaları işleyebiliriz. Özelleştirilmiş Bağlantı Hareketi Yöntemi eklidir.

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;
}

Bu, metin görünümünden aşağıdaki şekilde çağrılmalıdır:

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

8
Bağlamı gerçekten aktarmanıza gerek yok, bu yüzden ayrı bir statik değişkende "arka arkaya", bu biraz kötü kokuyor. Onun widget.getContext()yerine kullanın.
Sergej Koščejev

Evet içerik kaldırılabilir. Sergej'i gösterdiğin için teşekkürler
Arun

6
Bu harika bir şekilde çalışıyor ancak setText'ten sonra setMovementMethod'u çağırmalısınız, aksi takdirde varsayılan LinkMovementMethod
Ray Britton

Çalışır, ancak her tıklamada aralıkları yinelemeye gerek yoktur. Ayrıca, konuma göre filtreleme, hatalara açık görünmektedir. Bu cevapta benzer bir tek seferlik başlatma yaklaşımı gösterilmektedir .
Bay Smith

@Arun Lütfen cevabınızı yorumlara göre güncelleyiniz.
Behrouz. M

46

İşte @Arun cevabına dayalı daha genel bir çözüm

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

Sadece uygulamak kullanmak için onLinkClickbir TextViewLinkHandlersınıfa. Örneğin:

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

2
harika çalışıyor. not: metin görünümünüze android: autoLink = "web" eklemeyi unutmayın. autolink özelliği olmadan bu çalışmaz.
okarakose

Burada listelenen tüm çözümleri denedim. Bu benim için en iyisi. Açık, kullanımı basit ve güçlü. İpucu: En iyi şekilde yararlanmak için Html.fromHtml ile çalışmanız gerekir.
Kai Wang

1
En iyi cevap! Teşekkürler! Android'i eklemeyi unutmayın: autoLink = "web" xml veya kod LinkifyCompat.addLinks (textView, Linkify.WEB_URLS);
Nikita Axyonov

1
Görünüşte basit olan bir gereksinim, Android'de oldukça karmaşık bir meseledir. Bu çözüm, bu acının çoğunu alır. Bu çözümün Android N'de çalışması için autoLink = "web" gerekmediğini
öğrendiniz

1
Neden dünyada böyle bir sınıf doğal olarak yok - bunca yıldan sonra - beni aşıyor. LinkMovementMethod için Android'e teşekkürler, ancak genellikle kendi arayüzümün kontrolünü istiyorum. UI olaylarını bana bildirebilir ve böylece MY denetleyicim bunları halledebilir.
yöntem imzası

10

çok basit bu satırı kodunuza ekleyin:

tv.setMovementMethod(LinkMovementMethod.getInstance());

1
Cevabınız için teşekkürler Jonathan. Evet, MovementMethod'u biliyordum; emin olmadığım şey, varsayılan hareket yönteminin yapacağı gibi, kendi uygulamamın sadece bir tarayıcı açmak yerine bağlantı tıklamasını işlemesi gerektiğini nasıl belirleyeceğimdi (kabul edilen yanıta bakın). Yine de teşekkürler.
David Hedlund

5

Çözüm

TextView üzerindeki uzun tıklamaları ve TextView'daki bağlantılara Taps'ı kaldırabileceğiniz küçük bir sınıf uyguladım.

Yerleşim

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 "";
        }
    }
}

Kullanım

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

Bağlantılar

Bu yardımcı olur umarım! Kodu burada bulabilirsiniz .


3

Sadece oluşturduğum bir kitaplığı kullanarak alternatif bir çözüm paylaşmak için. İle Textoo böyle sağlanabilir:

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();

Veya dinamik HTML kaynağıyla:

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);

Bu en iyi cevap olmalı. Katkı için teşekkürler efendim
Marian Pavel

3

Burada daha fazla seçenek arayanlar için bir

// 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);

KAYNAK: 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

TextView'in rengini örneğin kullanarak maviye değiştirdim:

android:textColor="#3399FF"

xml dosyasında. Nasıl altı çizili hale getirileceği burada açıklanmaktadır .

Ardından bir yöntem belirtmek için onClick özelliğini kullanın (sanırım setOnClickListener(this)başka bir yol olarak çağırabilirsiniz ), örneğin:

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

Bu yöntemde, bir niyet başlatmak gibi istediğim her şeyi normal olarak yapabilirim. myTextView.setMovementMethod(LinkMovementMethod.getInstance());Aktivitenizin onCreate () yönteminde olduğu gibi yine de normal şeyi yapmanız gerektiğini unutmayın.


1

Bu cevap Jonathan S'nin mükemmel çözümünü genişletiyor:

Metinden bağları çıkarmak için aşağıdaki yöntemi kullanabilirsiniz:

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;
    }

Bu, clickify()yöntemdeki parametrelerden birini kaldırmak için kullanılabilir :

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());
        }
    }

ClickSpan'de birkaç değişiklik:

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

Artık metni TextView üzerinde ayarlayabilir ve ardından ona bir dinleyici ekleyebilirsiniz:

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

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

});

0

Örnek: Metin görünümünde bir metin ayarladığınızı ve belirli bir metin ifadesine bir bağlantı sağlamak istediğinizi varsayalım: " # facebook'a tıklamak sizi facebook.com'a götürür"

Xml düzeninde:

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

Faaliyette:

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);

Ayrıca şu şekilde bir etiket sağlayıcı oluşturun:

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;
    }

}

Manifest dosyasında sağlayıcı ve test etkinliği için giriş yapın:

<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>

Şimdi #facebook'a tıkladığınızda, test etkinliğini başlatacaktır. Ve test etkinliğinde verileri şu şekilde alabilirsiniz:

Uri uri = getIntent().getData();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.