마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

비콘 관련 질문입니다..

0 추천
안녕하세요! 다름이 아니고 reco 비콘을 이용해서 비콘이 위치한 거리를 기준으로 일정거리에 도달하면 핸드폰이 무음 상태로 변하고 핸드폰이 일정거리를 비콘에 벗어날경우 벨소리 모드롤 변경하려고 합니다.
아래에 큰 글씨로 표시된 부분이 코드인데 실행을 하면 바로 앱이 종료가 됩니다..
어디가 잘못되었는지 정말 궁금합니다....

public class RecoRangingListAdapter extends BaseAdapter {
    private ArrayList<RECOBeacon> mRangedBeacons;
    private LayoutInflater mLayoutInflater;
    private RECOBeacon recoBeacon;
    //private Context context;

    int Flagint;
    int AudioMode1;
    int AudioMode2;

    public RecoRangingListAdapter(Context context) {
        super();
        mRangedBeacons = new ArrayList<RECOBeacon>();
        mLayoutInflater = LayoutInflater.from(context);

    }

    public void updateBeacon(RECOBeacon beacon) {
        synchronized (mRangedBeacons) {
            if(mRangedBeacons.contains(beacon)) {
                mRangedBeacons.remove(beacon);
            }
            mRangedBeacons.add(beacon);
        }
    }

    public void updateAllBeacons(Collection<RECOBeacon> beacons) {
        synchronized (beacons) {
            mRangedBeacons = new ArrayList<RECOBeacon>(beacons);
        }
    }

    public void clear() {
        mRangedBeacons.clear();
    }

    @Override
    public int getCount() {
        return mRangedBeacons.size();
    }

    @Override
    public Object getItem(int position) {
        return mRangedBeacons.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        double testNum;
        String str;

        if(convertView == null) {
            convertView = mLayoutInflater.inflate(R.layout.item_ranging_beacon, parent, false);
            viewHolder = new ViewHolder();
            viewHolder.recoProximityUuid = (TextView)convertView.findViewById(R.id.recoProximityUuid);
            viewHolder.recoMajor = (TextView)convertView.findViewById(R.id.recoMajor);
            viewHolder.recoMinor = (TextView)convertView.findViewById(R.id.recoMinor);
            viewHolder.recoTxPower = (TextView)convertView.findViewById(R.id.recoTxPower);
            viewHolder.recoRssi = (TextView)convertView.findViewById(R.id.recoRssi);
            viewHolder.recoBattery = (TextView)convertView.findViewById(R.id.recoBattery);
            viewHolder.recoProximity = (TextView)convertView.findViewById(R.id.recoProximity);
            viewHolder.recoAccuracy = (TextView)convertView.findViewById(R.id.recoAccuracy);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder)convertView.getTag();
        }

        RECOBeacon recoBeacon = mRangedBeacons.get(position);
        String proximityUuid = recoBeacon.getProximityUuid();
        Context context = null;
        AudioManager mAudioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);

        viewHolder.recoProximityUuid.setText(" ");
        viewHolder.recoAccuracy.setText(String.format("%.2f", recoBeacon.getAccuracy()));

        str = viewHolder.recoAccuracy.getText().toString();
        testNum = Double.valueOf(str).doubleValue();
        if(testNum <= 0.3) {
            mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
            Flagint = 1;
        } else if (testNum>=0.31) {
            mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
            Flagint = 2;
        }

        if(Flagint == 1) {
            if(AudioMode1 == 0) {
                Toast.makeText(context, "스마트폰이 무음", Toast.LENGTH_LONG).show();
                AudioMode1 = 1;
                AudioMode2 = 0;
            }
        }

        else if (Flagint == 2) {
            if(AudioMode2 == 0) {
                Toast.makeText(context,"공간 벗어나서 무음 취소",Toast.LENGTH_LONG).show();
                AudioMode2 = 1;
                AudioMode1 = 2;
            }
        }

        viewHolder.recoProximityUuid.setText(String.format("%s-%s-%s-%s-%s", proximityUuid.substring(0, 8), proximityUuid.substring(8, 12), proximityUuid.substring(12, 16), proximityUuid.substring(16, 20), proximityUuid.substring(20) ));
        viewHolder.recoMajor.setText(recoBeacon.getMajor() + "");
        viewHolder.recoMinor.setText(recoBeacon.getMinor() + "");
        viewHolder.recoTxPower.setText(recoBeacon.getTxPower() + "");
        viewHolder.recoRssi.setText(recoBeacon.getRssi() + "");
        viewHolder.recoBattery.setText(recoBeacon.getBattery() + "");
        viewHolder.recoProximity.setText(recoBeacon.getProximity() + "");
        viewHolder.recoAccuracy.setText(String.format("%.2f", recoBeacon.getAccuracy()));

        return convertView;
    }

}
날다랍쥐 (120 포인트) 님이 2016년 9월 24일 질문
저도 reco비콘을 사용 중 입니다.
비콘과의 거리를 저도 이용하려 하는데
혹시 거리의 정확도가 어떻게 되나요
저는 많이 떨어지는것 같습니다.

2개의 답변

0 추천
에러문제는 로그를 같이 올려주시면 문제파악이 수월할것같습니다^^
익명사용자 님이 2016년 9월 26일 답변
0 추천
왜 오류가 생겼는지 모르면... 소스만 파는데 시간만 보내게 됩니다.

Log에 어떤 오류로 인해 종료 되었는지 먼저 파악하시고 해답을 유추하셔야 합니다.

어댑터 코드만 올리셨는데, 대충 본결과 이상이 있어보이지는 않습니다.

6.0 marshmallow 이상으로 compile 및 targeting 후 런타임 권한 없이 스캔을 시도하신건 아닐런지요?

SecurityException으로 프로세스가 중지 되었는지 Log를 확인해 보세요.

딱히 의심되는건 이것밖에 없네요.

 

런타임 권한의 문제라면, 블루투스를 스캔하기 위해서는  ACCESS_FINE_LOCATION 이나 ACCESS_COARSE_LOCATION 권한을 얻어야 합니다.
칠리님 (10,910 포인트) 님이 2016년 9월 26일 답변
안드로이드 6.0 이라면 먼저,
설정 -> 어플리케이션 -> 해당어플 선택 후
권한 항목에서 위치를 허가해 보세요.
답변 정말 감사합니다!

답변대로 컴파일 타케팅 버전을 제가 사용하고 있는 4.42인 19로 버전으로 설정하고 Sync now를 하면  style.xml에서 오류가 납니다..


---------------------------------------------------------------------------------------------


C:\reco_sdk_android_v1.1.4\sample\app\build\intermediates\res\merged\debug\values\values.xml
Error:(34) Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light.DarkActionBar'.

C:\reco_sdk_android_v1.1.4\sample\app\src\main\res\values\styles.xml
Error:No resource found that matches the given name: attr 'colorAccent'.
Error:No resource found that matches the given name: attr 'colorPrimary'.
Error:No resource found that matches the given name: attr 'colorPrimaryDark'.
Error:Execution failed for task ':app:processDebugResources'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Users\KIM\AppData\Local\Android\sdk1\build-tools\23.0.1\aapt.exe'' finished with non-zero exit value 1

-------------------------------------------------------------------------------------------

이렇게 뜨는데 여기서 건드려도 에러가 계속 나타납니다...
...