আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটি খুলতে ব্রাউজার থেকে লিঙ্কগুলি বিরত করা হচ্ছে


107

আমি যখন ব্রাউজারটি এটিকে না খোলার পরিবর্তে প্রদত্ত প্যাটার্নের কোনও ইউআরএল ক্লিক করি তখন আমি আমার অ্যাপ্লিকেশনটিকে একটি লিঙ্ক খোলার অনুরোধ জানাতে সক্ষম হতে চাই। এটি তখন হতে পারে যখন ব্যবহারকারী ব্রাউজারে বা কোনও ইমেল ক্লায়েন্টে বা একটি সদ্য-মিন্টেড অ্যাপ্লিকেশনটিতে একটি ওয়েবভিউয়ের মধ্যে থাকে।

উদাহরণস্বরূপ, ফোনের যে কোনও জায়গা থেকে ইউটিউব লিঙ্কে ক্লিক করুন এবং আপনাকে YouTube অ্যাপটি খোলার সুযোগ দেওয়া হবে।

আমি কীভাবে এটি নিজের অ্যাপের জন্য অর্জন করব?


উত্তর:


141

বিষয়শ্রেণীতে একটি android.intent.action.VIEW ব্যবহার করুন android.intent.category.BROWSABLE

রোমেন গাইয়ের ফটোস্ট্রিম অ্যাপের AndroidManLive.xML থেকে ,

    <activity
        android:name=".PhotostreamActivity"
        android:label="@string/application_name">

        <!-- ... -->            

        <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"
                  android:host="flickr.com"
                  android:pathPrefix="/photos/" />
            <data android:scheme="http"
                  android:host="www.flickr.com"
                  android:pathPrefix="/photos/" />
        </intent-filter>
    </activity>

একবার আপনি ক্রিয়াকলাপের ভিতরে আসার পরে , আপনাকে ক্রিয়াটি সন্ধান করতে হবে এবং তারপরে আপনার দেওয়া URL টি দিয়ে কিছু করা উচিত। Intent.getData()পদ্ধতি কোনো URI দেয়।

    final Intent intent = getIntent();
    final String action = intent.getAction();

    if (Intent.ACTION_VIEW.equals(action)) {
        final List<String> segments = intent.getData().getPathSegments();
        if (segments.size() > 1) {
            mUsername = segments.get(1);
        }
    }

তবে এটি লক্ষ করা উচিত যে এই অ্যাপটি সামান্য কিছুটা পুরানো হয়ে গেছে (1.2), সুতরাং আপনি এটি অর্জনের আরও ভাল উপায় থাকতে পারেন।


8
একটি বিষয় সম্পর্কে সচেতন হতে হবে - আপনার ব্যবহারকারীর উপযুক্ত অ্যাপ্লিকেশনটি ব্যবহারের পছন্দ হিসাবে উপস্থাপন করা হবে কারণ আপনার কাজটি হ্যান্ডলার হিসাবে আপনার অ্যাপ্লিকেশনটি নিবন্ধকরণ করা। ব্যক্তিগতভাবে (ব্যবহারকারী হিসাবে) আমি এতে বিরক্ত হয়েছি যদিও আমি বুঝতে পেরেছি যে আমি "ডিফল্ট ক্রিয়া" বেছে নিতে পারি
বোস্টোন

1
এটি এইচটিসি ফোনগুলির জন্য কাজ করে না। আমি কীভাবে এটি এইচটিসি ফোনে কাজ করতে পারি?
ব্যবহারকারী484691

57
আপনি যদি ক্যোরিস্ট্রিং সহ পুরো ইউআরএলটির বিষয়ে চিন্তা করেন তবে আপনি সম্ভবত getData () এর পরিবর্তে intent.getDataString () ব্যবহার করতে চাইবেন। এই মন্তব্যটি আপনার কেবলমাত্র আমার জন্য ব্যয় করা সময়টি সাশ্রয় করবে ..... :-(
কেন্টন মূল্য

ব্যবহারকারী যে কোনও অ্যাপ্লিকেশন বা কেবল নেটিভ ব্রাউজার থেকে নেভিগেট করে এমন প্রতিটি ইউআরএলকে কল করা হবে?
গঞ্জোব্রায়েন

1
যে কোনও অ্যাপ্লিকেশন থেকে (এটি ইনটেন্ট। অ্যাকশন_ভিউ উদ্দেশ্যটি ব্যবহার করে)
জামেশ

2

কিছু লাইব্রেরি ইউআরএল থেকে স্বয়ংক্রিয়ভাবে প্যারামিটারগুলি পার্স করে।

যেমন

https://github.com/airbnb/DeepLinkDispatch

&&

https://github.com/mzule/ActivityRouter

পরেরটি আমার লেখা। যা সর্বদা স্ট্রিং নয়, প্রদত্ত ধরণের পরামিতিগুলি পার্স করতে পারে।

উদাহরণ

@Router(value = "main/:id" intExtra = "id")
...
int id = getIntent().getInt("id", 0);

0
private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        setUrlparams(url);

        if (url.indexOf("pattern") != -1) {
            // do something
            return false;
        } else {
            view.loadUrl(url);
        }

        return true;
    }

}

4
ধন্যবাদ। আপনি ওয়েব ভিউয়ের মালিকানার প্রসঙ্গে এটি কার্যকর। আমি যে প্রশ্নটি জিজ্ঞাসা করছিলাম সেটি হ'ল আমি কীভাবে আমার অ্যাপ্লিকেশনটিকে কোনও অ্যাপ্লিকেশানের লিঙ্কে ক্লিক করতে চাই (যেমন ব্রাউজার)।
জামেশ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.