0

I'm trying to pass data to my activity, but unfortunately I'm still unsuccessful. What I am trying to accomplish is to select a file in the file browser, share it and pass the data to my activity.

Inside my manifest I added an intent filter:

<activity android:name=".MyActivity" android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="*/*"/>
    </intent-filter>            
</activity>

Inside my Java file i'm trying to get the data:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.myactivity);
    Intent intent = getIntent();
    Uri data = intent.getData();
    if (data != null) {
        // process the data
    } else {
        // no data received
    }
}

When I select a file from My Files and share it, my app is visible in the list, when i click it it launches my activity, but intent.getData(); always returns null. Am i missing something? Thanks.

Dusan
  • 3,284
  • 6
  • 25
  • 46

1 Answers1

0

you can get the data from the example given below:

Use an with a element. For example, to handle all links to twitter.com, you'd put this inside your in your AndroidManifest.xml:

<intent-filter>
    <data android:scheme="http" android:host="twitter.com"/>
    <action android:name="android.intent.action.VIEW" />
</intent-filter>

Then, when the user clicks on a link to twitter in the browser, they will be asked what application to use in order to complete the action: the browser or your application.

Of course, if you want to provide tight integration between your website and your app, you can define your own scheme:

<intent-filter>
    <data android:scheme="my.special.scheme" />
    <action android:name="android.intent.action.VIEW" />
</intent-filter>

Then, in your web app you can put links like:

<a href="my.special.scheme://other/parameters/here">

And when the user clicks it, your app will be launched automatically (because it will probably be the only one that can handle my.special.scheme:// type of uris). The only downside to this is that if the user doesn't have the app installed, they'll get a nasty error. And I'm not sure there's any way to check.

Edit: To answer your question, you can use getIntent().getData() which returns a Uri object. You can then use Uri.* methods to extract the data you need. For example, let's say the user clicked on a link to http://twitter.com/status/1234:

strong textUri data = getIntent().getData();
String scheme = data.getScheme(); // "http"
String host = data.getHost(); // "twitter.com"
List<String> params = data.getPathSegments();
String first = params.get(0); // "status"
String second = params.get(1); // "1234"

You can do the above anywhere in your Activity, but you're probably going to want to do it in onCreate(). You can also use params.size() to get the number of path segments ienter code heren the Uri. Look to javadoc or the android developer website for other Uri methods you can use to extract specific parts.

Launch custom android application from android browser

Community
  • 1
  • 1
Ashok Singhal
  • 520
  • 1
  • 5
  • 10
  • Thanks but, i dont think this is going to help me. I dont need to process links clicked in a browser, i need to pass a file from my SD card to the activity (actually, a path to the file would do it). When i change the action to android.action.VIEW, my app isn't listed in the "share via" screen anymore. My issue is, that getIntent().getData(); returns null. – Dusan Feb 28 '14 at 19:57