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

context 부분이 에러가 뜹니다.. 왜그럴까요? 도와주시면 정말 감사드리겠습니다..

0 추천

비콘 기본 제공 sdk을 이용해서 기능 하나를 추가 중에 있습니다.(비콘과의 수신거리가 3미터 이내면 무음모드로, 3미터를 벗어나면 벨모드로 바꾸게하는 기능입니다.)

그런데,

아래 코드중에 빨간색으로 표시된 context 부분이 자꾸 빨간색으로 뜨고 있습니다.

혹시나해서 맨 처음에 Context context = null; 을 추가해보면 빨간것이 사라지지만 앱을 run 시켜보면

앱이 중지되었다고 뜹니다. 아무래도 저 context 때문에 그런 것 같습니다. 

저 빨간 context가 왜 에러가 뜨는지 도저히 모르겠습니다.. 알려주시면 정말 감사드리겠습니다.

고민고민 끝에 해결이 안되서 이렇게 질문을 드리게 됐습니다.. 읽어주셔서 감사합니다!!

(파란색 부분은 제가 추가한 코드들이고, 빨간색은 에러뜨는 context 입니다.)

 

// 전체 코드는 아니고 일부분 발췌했습니다.

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

        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);

        AudioManager mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);

        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() + "");
        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.recoProximity.setText(" ");
        //viewHolder.recoAccuracy.setText(String.format("%.2f", recoBeacon.getAccuracy()));
        viewHolder.recoAccuracy.setText(String.format("%.2f", recoBeacon.getAccuracy()));

        String str = viewHolder.recoAccuracy.getText().toString();
        double testNum = Double.valueOf(str).doubleValue();
        int Flagint = 0;
        int AudioMode1 = 0;
        int AudioMode2 = 0;

        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 = 0;
            }
        }

        return convertView;
    }

낮해밤별 (400 포인트) 님이 2016년 10월 15일 질문

1개의 답변

0 추천
 
채택된 답변

프로그래밍 경험이 전혀 없으신 것 처럼 보이네요. 먼저 자바부터 좀 공부를 하시는게 좋을 것 같습니다.

parent.getContext().getSystemService(Context.AUDIO_SERVICE);

로 해보세요.

아니면 해당 어댑터를 호출하는 액티비티 같은 context를 가지고 있는 곳에서 context 객체를 넘겨주셔도 되구요.

spark (224,800 포인트) 님이 2016년 10월 16일 답변
낮해밤별님이 2016년 10월 16일 채택됨
감사합니다 잘됩니다 자바공부를 더하겠습니다 정말 감사합니다!!!
...