aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/activity
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2014-05-20 20:39:13 +0200
committerBananeweizen <bananeweizen@gmx.de>2014-05-20 20:39:13 +0200
commitbec64dc776e33094f399c188e5a4a299801e45b0 (patch)
tree84815623165d21a5f4794dd60d3c1ba3680bf9d8 /main/src/cgeo/geocaching/activity
parent1c54353bc39897df4079a006ef54a42f6a3b4b3c (diff)
parenta0825983139c99a9799503cafdf0dd0e3ce54a2f (diff)
downloadcgeo-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.java36
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);
+
+ }
}