LoginSignup
4
1

More than 5 years have passed since last update.

MAMORIO SDK (Android版)最初の一歩

Last updated at Posted at 2017-10-18

MAMORIO SDK (Android版)最初の一歩

動作環境(2017/10/18現在)

Android Studio 2.3.3
MAMORIO SDK Version 7.1 (https://github.com/otoshimono/mamorio-sdk-android-bin)
Nexus 5X(Android 8.0.0)

経緯

MAMORIO SDKがリリースされたということをお聞きして、このSDKを使ったアプリを作ってみませんか?とお誘いがあったので、はじめの一歩のアプリを作ってみました。

Android Studioで新規プロジェクトを作成する

Phone Tabletで、Minimun SDK 19(Android 4.4)を選択
Empty Activityを選択
して、作成しました。

SDKの説明に従って、プロジェクト初期設定手順

build.gradle(Project
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        maven {url "https://raw.githubusercontent.com/otoshimono/mamorio-sdk-android-bin/master/"}
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

minSdkVersion 23にしています。Android 6.0以上で追加されたPermisson対応の為

build.gradle(Modile
apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.0"
    defaultConfig {
        applicationId "jp.eguchi.android.mamoriosample2"
        minSdkVersion 23
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'

    compile 'jp.mamorio:mamorioSDK:7.1'
}

アプリのコード

一度、アプリを起動して、パーミッションの許可してから、再立ち上げすると、Android Monitorに出力されます。
ユーザ認証後、30秒間MAMORIOを探して、見つけた情報等出力するという動作が繰り返されます。

MainActivity.java
package jp.eguchi.android.mamoriosample2;

import android.Manifest;
import android.content.pm.PackageManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import java.util.List;

import otoshimono.com.lost.mamorio.sdk.Error;
import otoshimono.com.lost.mamorio.sdk.Mamorio;
import otoshimono.com.lost.mamorio.sdk.MamorioSDK;
import otoshimono.com.lost.mamorio.sdk.User;

public class MainActivity extends AppCompatActivity {

    private String TAG = "TEST";

    private String APP_TOKEN = "自分のAPP TOKEN";
    private String AUTH_TOKEN = "自分のAUTH TOKEN";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // ACCESS_FINE_LOCATIONの許可(Android 6.0以上向け)
        if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 0);
        } else {
            MamorioSDK.setUp(getBaseContext(), APP_TOKEN); // 探索専用
            step1();
        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG,"onStart()");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG,"onStop()");
        MamorioSDK.rangingStop();
    }

    void step1()
    {
        Log.d(TAG,"step1()");

        User.signIn(AUTH_TOKEN, new User.UserCallback() {
            @Override
            public void onSuccess(User user) {
                //アカウント登録成功時の処理
                Log.d(TAG,"捜索専用ユーザーの登録に成功しました。");

                step2();
            }

            @Override
            public void onError(Error error) {
                Log.d(TAG,"捜索専用ユーザーの登録に失敗しました。エラーメッセージ:" + error.getMessage());
            }
        });
    }

    void step2()
    {
        Log.d(TAG,"step2()");

        MamorioSDK.rangingStart(
                new MamorioSDK.RangingInitializeCallback() {
                    @Override
                    public void onSuccess() {
                        Log.d(TAG,"レンジングの開始に成功しました。");
                    }
                    @Override
                    public void onError(Error error) {
                        Log.d(TAG,"Sレンジングの開始に失敗しました。エラーメッセージ:"+error.getMessage());
                    }
                },
                //MAMORIO発見時のコールバック(null可)
                new MamorioSDK.RangingCallbackEnter() {
                    @Override
                    public void onEnter(List<Mamorio> list) {
                        //list:発見したMAMORIOの一覧
                        //nullの場合コールバックしない
                        Log.d(TAG,"RangingCallbackEnter()");

                        for(int i = 0 ; i < list.size() ; i++) {
                            Mamorio dev = list.get(i);

                            String name = dev.getName();
                            if(name != null){
                                Log.d(TAG,"name=" + name);
                            }

                            int major = dev.getMajor();
                            int minor = dev.getMinor();
                            Log.d(TAG,major + "," + minor);

                            if(dev.isNotYours() == true) {
                                Log.d(TAG,"他人のMAMORIO");
                            } else {
                                Log.d(TAG,"自分のMAMORIO");
                            }
                        }
                    }
                },
                //MAMORIO紛失時のコールバック(null可)
                new MamorioSDK.RangingCallbackExit() {
                    @Override
                    public void onExit(List<Mamorio> list) {
                        //list:紛失した自分のMAMORIO一覧
                        Log.d(TAG,"RangingCallbackExit()");

                        for(int i = 0 ; i < list.size() ; i++) {
                            Mamorio dev = list.get(i);

                            String name = dev.getName();
                            if(name != null){
                                Log.d(TAG,"name=" + name);
                            }

                            int major = dev.getMajor();
                            int minor = dev.getMinor();
                            Log.d(TAG,major + "," + minor);

                            if(dev.isNotYours() == true) {
                                Log.d(TAG,"他人のMAMORIO");
                            } else {
                                Log.d(TAG,"自分のMAMORIO");
                            }
                        }
                    }
                }
        );
    }
}

現時点の問題点

今のアプリだと終了させると、MAMARIO SDK内に隠れているService(.mamorio)とのconnectionが切れないよう(MamorioSDK.rangingStop()をコールしても)で、android.app.ServiceConnectionLeakedが出てしまうので、今後のSDKのバージョンアップで改善されることを期待します。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1