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

어댑터의 값을 메인 액티비티에서 사용하고 싶습니다.

0 추천

package com.example.indoorbeacon;
public class RECORangingListAdapter extends BaseAdapter {//추상클래스. 기본적인  것 구현하는 클래스
    private ArrayList<RECOBeacon> mRangedBeacons;//객체 배열이나 리소스에 정의된 배열로부터 데이터 가져옴
    private LayoutInflater mLayoutInflater;
    RECOBeacon recoBeacon;
    
    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) {//포지션 위치의 항목ID를 리턴함.
        return mRangedBeacons.get(position);
    }
    @Override
    public long getItemId(int position) {
        return position;
    } 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if(convertView == null) {
            convertView = mLayoutInflater.inflate(R.layout.list_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.recoProximity = (TextView)convertView.findViewById(R.id.recoProximity);
            viewHolder.recoAccuracy = (TextView)convertView.findViewById(R.id.recoAccuracy);
            convertView.setTag(viewHolder);    
        } else {
            viewHolder = (ViewHolder)convertView.getTag();
            
        }

        recoBeacon = mRangedBeacons.get(position);    
       String proximityUuid = recoBeacon.getProximityUuid();
        //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() + "");//major
        viewHolder.recoMinor.setText(recoBeacon.getMinor() + "");//minor
        
        //viewHolder.recoTxPower.setText(recoBeacon.getTxPower() + "");
        viewHolder.recoRssi.setText(recoBeacon.getRssi() + "");//rssi
        viewHolder.recoProximity.setText(recoBeacon.getProximity() + "");
        viewHolder.recoAccuracy.setText(String.format("%.2f", recoBeacon.getAccuracy()));//immediate, far
        return convertView;     
    }
     class ViewHolder {
        //TextView recoProximityUuid;
        TextView recoMajor;
        TextView recoMinor;
        //TextView recoTxPower;
        TextView recoRssi;
        TextView recoProximity;
        TextView recoAccuracy;
    }    
}

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

 

===> 진하게 표시한 부분의 값이 어느 범위 안의 값이면 이벤트를 발생시키도록 하고 싶습니다.

블루투스 신호의 값을 받아옵니다.

그리고 recoBeacon = mRangedBeacons.get(position); 의 부분이 이해가 가지 않아요..ㅠㅠㅠㅠ

그냥 int 변수에 recobeacon.getMajor를 하려 했는데 여러 개의 블루투스 디바이스의 신호를 받아오기에 하나의 값만이 들어갈 수가 없어서인지 오류가 납니다.....ㅠㅠㅠㅠ도와주세요..ㅠㅠㅠ

koj110363 (120 포인트) 님이 2015년 10월 16일 질문
글자수 제한이 있어 댓글로 소스 첨부합니다.

public class MainActivity extends Activity {

    RECORangingListAdapter RECORangingListAdapter;
    RECOBeacon RECOBeacon;
    public static final String RECO_UUID = "24DDF411-8CF1-440C-87CD-E368DAF9C93E";
    public static final boolean SCAN_RECO_ONLY = true;
    public static final boolean ENABLE_BACKGROUND_RANGING_TIMEOUT = true;
    private static final int REQUEST_ENABLE_BT = 1;
    public static final boolean DISCONTINUOUS_SCAN = false;
   
    private BluetoothManager mBluetoothManager;
    private BluetoothAdapter mBluetoothAdapter;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //사용자가 블루투스를 켜도록 요청합니다.
                mBluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
                mBluetoothAdapter = mBluetoothManager.getAdapter();

                if(mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
                    Intent enableBTIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                    startActivityForResult(enableBTIntent, REQUEST_ENABLE_BT);
                }
    }
   
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_ENABLE_BT && resultCode == Activity.RESULT_CANCELED) {
            //사용자가 블루투스 요청을 허용하지 않았을 경우, 어플리케이션은 종료됩니다.
            finish();
            return;
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {//디바이스 menu 버튼 처음 눌러졌을 때 한번 호출되는 메소드
                                                    //메뉴의 메뉴아이템 설정하는 메소드
        getMenuInflater().inflate(R.menu.main, menu);   
        return true;
            }
   
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {//메뉴나 액션항목 선택시 수행할 작업 구현 메서드
                                                        // menuitem 중 하나 눌렀을 때 자동 호출 메소드
   
        switch (item.getItemId()) {
        case R.id.signal_check:
        //신호 수신 확인 리스트
        /*    final Intent intent = new Intent(this, RECORangingActivity.class);
            startActivity(intent);
            break;*/

        case R.id.action_settings:
        final Intent db = new Intent(this, DBviewActivity.class);
        startActivity(db);
            break;
        /*Toast.makeText(this, "SETTING", Toast.LENGTH_SHORT).show();
            break;*/
        }
    return super.onOptionsItemSelected(item);
    }
   
    @Override
    protected void onDestroy() {//백버트
        Log.i("MainActivity", "onDestroy");
        super.onDestroy();
    }
}
public class RECORangingActivity extends Activity implements RECORangingListener, RECOServiceConnectListener{

    protected RECOBeaconManager mRecoManager;
    protected ArrayList<RECOBeaconRegion> mRegions;
    private RECORangingListAdapter mRangingListAdapter;
    private ListView mRegionListView;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {       
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_ranging);

        mRecoManager = RECOBeaconManager.getInstance(getApplicationContext(), MainActivity.SCAN_RECO_ONLY, MainActivity.ENABLE_BACKGROUND_RANGING_TIMEOUT);
        mRegions = this.generateBeaconRegion();
        mRecoManager.setRangingListener(this);
        mRecoManager.bind(this);
    }
   
    private ArrayList<RECOBeaconRegion> generateBeaconRegion() {
        ArrayList<RECOBeaconRegion> regions = new ArrayList<RECOBeaconRegion>();
       
        RECOBeaconRegion recoRegion;
        recoRegion = new RECOBeaconRegion(MainActivity.RECO_UUID, "RECO Sample Region");
        regions.add(recoRegion);

        return regions;
    }
    @Override
    protected void onResume() {
        super.onResume();
       
        mRangingListAdapter = new RECORangingListAdapter(this);
        mRegionListView = (ListView)findViewById(R.id.list_ranging);
        mRegionListView.setAdapter(mRangingListAdapter);//어댑터연결
    }
   
    @Override
    protected void onDestroy() {
        super.onDestroy();   
        this.stop(mRegions);
        this.unbind();
    }
   
    private void unbind() {
        try {
            mRecoManager.unbind();
        } catch (RemoteException e) {
            Log.i("RECORangingActivity", "Remote Exception");
            e.printStackTrace();
        }
    }
   
    @Override
    public void onServiceConnect() {
        Log.i("RECORangingActivity", "onServiceConnect()");
        mRecoManager.setDiscontinuousScan(MainActivity.DISCONTINUOUS_SCAN);
        this.start(mRegions);
        //Write the code when RECOBeaconManager is bound to RECOBeaconService
    }

    @Override
    public void didRangeBeaconsInRegion(Collection<RECOBeacon> recoBeacons, RECOBeaconRegion recoRegion) {
        Log.i("RECORangingActivity", "didRangeBeaconsInRegion() region: " + recoRegion.getUniqueIdentifier() + ", number of beacons ranged: " + recoBeacons.size());
        mRangingListAdapter.updateAllBeacons(recoBeacons);
        mRangingListAdapter.notifyDataSetChanged();
        //Write the code when the beacons in the region is received
    }
   
    protected void start(ArrayList<RECOBeaconRegion> regions) {//일부 장치 안드로이드 버그
           
        for(RECOBeaconRegion region : regions) {
            try {
                mRecoManager.startRangingBeaconsInRegion(region);
            } catch (RemoteException e) {
                Log.i("RECORangingActivity", "Remote Exception");
                e.printStackTrace();
            } catch (NullPointerException e) {
                Log.i("RECORangingActivity", "Null Pointer Exception");
                e.printStackTrace();
            }
        }
    }

    protected void stop(ArrayList<RECOBeaconRegion> regions) {
        for(RECOBeaconRegion region : regions) {
            try {
                mRecoManager.stopRangingBeaconsInRegion(region);
            } catch (RemoteException e) {
                Log.i("RECORangingActivity", "Remote Exception");
                e.printStackTrace();
            } catch (NullPointerException e) {
                Log.i("RECORangingActivity", "Null Pointer Exception");
                e.printStackTrace();
            }
        }
    }
   
    @Override
    public void onServiceFail(RECOErrorCode errorCode) {
        return;
    }
   
    @Override
    public void rangingBeaconsDidFailForRegion(RECOBeaconRegion region, RECOErrorCode errorCode) {
        return;
    }
}

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...