diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2014-05-20 20:39:13 +0200 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2014-05-20 20:39:13 +0200 |
| commit | bec64dc776e33094f399c188e5a4a299801e45b0 (patch) | |
| tree | 84815623165d21a5f4794dd60d3c1ba3680bf9d8 /main/src/cgeo/geocaching/activity | |
| parent | 1c54353bc39897df4079a006ef54a42f6a3b4b3c (diff) | |
| parent | a0825983139c99a9799503cafdf0dd0e3ce54a2f (diff) | |
| download | cgeo-bec64dc776e33094f399c188e5a4a299801e45b0.zip cgeo-bec64dc776e33094f399c188e5a4a299801e45b0.tar.gz cgeo-bec64dc776e33094f399c188e5a4a299801e45b0.tar.bz2 | |
Merge pull request #3847 from schwabe/cgeo_nfc
Implement Android Beam (NFC Sharing) for cgeo
Diffstat (limited to 'main/src/cgeo/geocaching/activity')
| -rw-r--r-- | main/src/cgeo/geocaching/activity/AbstractActivity.java | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/main/src/cgeo/geocaching/activity/AbstractActivity.java b/main/src/cgeo/geocaching/activity/AbstractActivity.java index d7d88b5..d542b13 100644 --- a/main/src/cgeo/geocaching/activity/AbstractActivity.java +++ b/main/src/cgeo/geocaching/activity/AbstractActivity.java @@ -16,8 +16,14 @@ import org.apache.commons.lang3.StringUtils; import rx.Subscription; import rx.subscriptions.Subscriptions; +import android.annotation.TargetApi; import android.content.Intent; import android.content.res.Resources; +import android.nfc.NdefMessage; +import android.nfc.NdefRecord; +import android.nfc.NfcAdapter; +import android.nfc.NfcEvent; +import android.os.Build; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.ContextMenu; @@ -191,4 +197,34 @@ public abstract class AbstractActivity extends ActionBarActivity implements IAbs return false; } } + + // Do not support older devices than Android 4.0 + // Although there even are 2.3 devices (Nexus S) + // these are so few that we don't want to deal with the older (non Android Beam) API + + public interface ActivitySharingInterface { + /** Return an URL that represent the current activity for sharing */ + public String getUri(); + } + + protected void initializeAndroidBeam(ActivitySharingInterface sharingInterface) { + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH) + initializeICSAndroidBeam(sharingInterface); + } + + @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) + protected void initializeICSAndroidBeam(final ActivitySharingInterface sharingInterface) { + NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this); + if (nfcAdapter == null) { + return; + } + nfcAdapter.setNdefPushMessageCallback(new NfcAdapter.CreateNdefMessageCallback() { + @Override + public NdefMessage createNdefMessage(NfcEvent event) { + NdefRecord record = NdefRecord.createUri(sharingInterface.getUri()); + return new NdefMessage(new NdefRecord[]{record}); + } + }, this); + + } } |
