모바일 오유 바로가기
http://m.todayhumor.co.kr
분류 게시판
베스트
  • 베스트오브베스트
  • 베스트
  • 오늘의베스트
  • 유머
  • 유머자료
  • 유머글
  • 이야기
  • 자유
  • 고민
  • 연애
  • 결혼생활
  • 좋은글
  • 자랑
  • 공포
  • 멘붕
  • 사이다
  • 군대
  • 밀리터리
  • 미스터리
  • 술한잔
  • 오늘있잖아요
  • 투표인증
  • 새해
  • 이슈
  • 시사
  • 시사아카이브
  • 사회면
  • 사건사고
  • 생활
  • 패션
  • 패션착샷
  • 아동패션착샷
  • 뷰티
  • 인테리어
  • DIY
  • 요리
  • 커피&차
  • 육아
  • 법률
  • 동물
  • 지식
  • 취업정보
  • 식물
  • 다이어트
  • 의료
  • 영어
  • 맛집
  • 추천사이트
  • 해외직구
  • 취미
  • 사진
  • 사진강좌
  • 카메라
  • 만화
  • 애니메이션
  • 포니
  • 자전거
  • 자동차
  • 여행
  • 바이크
  • 민물낚시
  • 바다낚시
  • 장난감
  • 그림판
  • 학술
  • 경제
  • 역사
  • 예술
  • 과학
  • 철학
  • 심리학
  • 방송연예
  • 연예
  • 음악
  • 음악찾기
  • 악기
  • 음향기기
  • 영화
  • 다큐멘터리
  • 국내드라마
  • 해외드라마
  • 예능
  • 팟케스트
  • 방송프로그램
  • 무한도전
  • 더지니어스
  • 개그콘서트
  • 런닝맨
  • 나가수
  • 디지털
  • 컴퓨터
  • 프로그래머
  • IT
  • 안티바이러스
  • 애플
  • 안드로이드
  • 스마트폰
  • 윈도우폰
  • 심비안
  • 스포츠
  • 스포츠
  • 축구
  • 야구
  • 농구
  • 바둑
  • 야구팀
  • 삼성
  • 두산
  • NC
  • 넥센
  • 한화
  • SK
  • 기아
  • 롯데
  • LG
  • KT
  • 메이저리그
  • 일본프로야구리그
  • 게임1
  • 플래시게임
  • 게임토론방
  • 엑스박스
  • 플레이스테이션
  • 닌텐도
  • 모바일게임
  • 게임2
  • 던전앤파이터
  • 마비노기
  • 마비노기영웅전
  • 하스스톤
  • 히어로즈오브더스톰
  • gta5
  • 디아블로
  • 디아블로2
  • 피파온라인2
  • 피파온라인3
  • 워크래프트
  • 월드오브워크래프트
  • 밀리언아서
  • 월드오브탱크
  • 블레이드앤소울
  • 검은사막
  • 스타크래프트
  • 스타크래프트2
  • 베틀필드3
  • 마인크래프트
  • 데이즈
  • 문명
  • 서든어택
  • 테라
  • 아이온
  • 심시티5
  • 프리스타일풋볼
  • 스페셜포스
  • 사이퍼즈
  • 도타2
  • 메이플스토리1
  • 메이플스토리2
  • 오버워치
  • 오버워치그룹모집
  • 포켓몬고
  • 파이널판타지14
  • 배틀그라운드
  • 기타
  • 종교
  • 단어장
  • 자료창고
  • 운영
  • 공지사항
  • 오유운영
  • 게시판신청
  • 보류
  • 임시게시판
  • 메르스
  • 세월호
  • 원전사고
  • 2016리오올림픽
  • 2018평창올림픽
  • 코로나19
  • 2020도쿄올림픽
  • 게시판찾기
  • 게시물ID : programmer_21905
    작성자 : 글쓴이멍청이
    추천 : 0
    조회수 : 783
    IP : 211.33.***.43
    댓글 : 8개
    등록시간 : 2017/12/22 21:17:53
    http://todayhumor.com/?programmer_21905 모바일
    [질문글]안녕하십니까 선생님들 와이파이 다이렉트 관련해서 질문드리고자..
    옵션
    • 창작글
    • 본인삭제금지
    합니다.

    와이파이 다이렉트 오픈소스를 약간 수정해서 하려는데 대체 왜 가상 핸드폰에서 열리지 않는지 알 수가 없기에 바쁘시겠지만

    질문해봅니다..

    사용 툴은 안드로이드 스튜디오이고 와이파이 다이렉트로 휴대폰 두대가 서로 송수신 하려고 합니다.

    소스는

    WiFiDirectActivity,MyBroadCastReceiver, MyPhone, PeerListFragment 입니다.

    WiFiDirectActivity

    package com.cookandroid.mydirecttest1;

    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.net.wifi.p2p.WifiP2pConfig;
    import android.net.wifi.p2p.WifiP2pDevice;
    import android.net.wifi.p2p.WifiP2pManager;
    import android.provider.*;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuInflater;
    import android.view.MenuItem;
    import android.net.wifi.p2p.WifiP2pManager.*;
    import android.widget.Toast;

    public class WiFiDirectActivity extends AppCompatActivity
            implements ChannelListener,PeerListFragment.DeviceActionListener {
        public static final String TAG = "wifidirectdemo";
        private WifiP2pManager manager;
        private boolean isWifiP2pEnabled = false;
        private boolean retryChannel = false;

        private final IntentFilter intentFilter = new IntentFilter();
        private WifiP2pManager.Channel channel;
        private BroadcastReceiver receiver = null;

        public void SetIsWifiEnabled(boolean isWifiP2pEnabled){
            this.isWifiP2pEnabled = isWifiP2pEnabled;
        }
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            intentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
            intentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
            intentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
            intentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);

            manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
            channel = manager.initialize(this, getMainLooper(), null);
        }

        @Override
        protected void onPause() {
            super.onPause();
            receiver = new MyBroadCastReceiver(manager, channel, this);
            registerReceiver(receiver,intentFilter);
        }

        @Override
        protected void onResume() {
            super.onResume();
            unregisterReceiver(receiver);
        }

        public void resetData(){
            MyPhone fragment1 = (MyPhone)getFragmentManager().findFragmentById(R.id.frag_MyPhone);
            PeerListFragment fragment2 = (PeerListFragment)getFragmentManager().findFragmentById(R.id.frag_List);
            if (fragment2 != null){
                fragment2.clearPeers();
            }
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.action_menu, menu);
            return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()){
                case R.id.item_enable:
                    if (manager != null && channel != null){
                        startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
                    }else{
                        Log.e(TAG, "channel or manager is null");
                    }
                    return true;
                case R.id.item_search:
                    if (!isWifiP2pEnabled){
                        Toast.makeText(WiFiDirectActivity.this, "Enable P2P from action bar button above or system settings",
                                Toast.LENGTH_SHORT).show();
                        return true;
                    }
                    final PeerListFragment fragment = (PeerListFragment) getFragmentManager()
                            .findFragmentById(R.id.frag_List);
                    fragment.onInitiateDiscovery();
                    manager.discoverPeers(channel, new WifiP2pManager.ActionListener() {

                        @Override
                        public void onSuccess() {
                            Toast.makeText(WiFiDirectActivity.this, "Discovery Initiated",
                                    Toast.LENGTH_SHORT).show();
                        }

                        @Override
                        public void onFailure(int reasonCode) {
                            Toast.makeText(WiFiDirectActivity.this, "Discovery Failed : " + reasonCode,
                                    Toast.LENGTH_SHORT).show();
                        }
                    });
                    return true;
                default:
                    return super.onOptionsItemSelected(item);
            }

        }


        @Override
        public void onChannelDisconnected() {
            if (manager != null && !retryChannel) {
                Toast.makeText(this, "Channel lost. Trying again", Toast.LENGTH_LONG).show();
                resetData();
                retryChannel = true;
                manager.initialize(this, getMainLooper(), this);
            } else {
                Toast.makeText(this,
                        "Severe! Channel is probably lost premanently. Try Disable/Re-Enable P2P.",
                        Toast.LENGTH_LONG).show();
            }
        }

        @Override
        public void showDetails(WifiP2pDevice device) {

        }

        @Override
        public void cancelDisconnect() {
            if (manager != null) {
                final PeerListFragment fragment = (PeerListFragment) getFragmentManager()
                        .findFragmentById(R.id.frag_List);
                if (fragment.getDevice() == null
                        || fragment.getDevice().status == WifiP2pDevice.CONNECTED) {
                    disconnect();
                } else if (fragment.getDevice().status == WifiP2pDevice.AVAILABLE
                        || fragment.getDevice().status == WifiP2pDevice.INVITED) {

                    manager.cancelConnect(channel, new ActionListener() {

                        @Override
                        public void onSuccess() {
                            Toast.makeText(WiFiDirectActivity.this, "Aborting connection",
                                    Toast.LENGTH_SHORT).show();
                        }

                        @Override
                        public void onFailure(int reasonCode) {
                            Toast.makeText(WiFiDirectActivity.this,
                                    "Connect abort request failed. Reason Code: " + reasonCode,
                                    Toast.LENGTH_SHORT).show();
                        }
                    });
                }
            }
        }

        @Override
        public void connect(WifiP2pConfig config) {
            manager.connect(channel, config, new ActionListener() {
                @Override
                public void onSuccess() {

                }

                @Override
                public void onFailure(int i) {
                    Toast.makeText(WiFiDirectActivity.this, "Connect failed. Retry.",
                            Toast.LENGTH_SHORT).show();
                }
            });
        }

        @Override
        public void disconnect() {
            //연결종료 부분;
        }
    }

    MyBroadCastReceiver

    package com.cookandroid.mydirecttest1;

    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.net.NetworkInfo;
    import android.net.wifi.p2p.WifiP2pDevice;
    import android.net.wifi.p2p.WifiP2pManager;
    import android.net.wifi.p2p.WifiP2pManager.*;
    import android.util.Log;

    public class MyBroadCastReceiver extends BroadcastReceiver {
        private WifiP2pManager manager;
        private Channel channel;
        private WiFiDirectActivity activity;

        public MyBroadCastReceiver(WifiP2pManager manager, Channel channel, WiFiDirectActivity wiFiDirectActivity) {
            super();
            this.manager = manager;
            this.channel = channel;
            this.activity = wiFiDirectActivity;
        }

        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {

                // UI update to indicate wifi p2p status.
                //Wi-Fi P2P 상태를 나타내는 UI 업데이트.
                int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);
                if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
                    // Wifi Direct mode is enabled
                    //Wi-Fi Direct 모드가 사용 설정되어 있습니다.
                    activity.SetIsWifiEnabled(true);
                } else {
                    activity.SetIsWifiEnabled(false);
                    activity.resetData();

                }
                Log.d(WiFiDirectActivity.TAG, "P2P state changed - " + state);
            } else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {

                /*request available peers from the wifi p2p manager. This is an
                asynchronous call and the calling activity is notified with a
                callback on PeerListListener.onPeersAvailable()*/
                /*wifi P2P 관리자로부터 사용 가능한 피어를 요청하십시오.
                  이것은 비동기 호출이며 호출하는 활동은 PeerListListener.onPeersAvailable()에서
                  콜백으로 통지됩니다.*/
                if (manager != null) {
                    manager.requestPeers(channel, (PeerListListener) activity.getFragmentManager()
                            .findFragmentById(R.id.frag_List));
                }
                Log.d(WiFiDirectActivity.TAG, "P2P peers changed");
            } else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {

                if (manager == null) {
                    return;
                }

                NetworkInfo networkInfo = (NetworkInfo) intent
                        .getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO);

                if (networkInfo.isConnected()) {

                    /*we are connected with the other device, request connection info to find group owner IP*/
                    /*우리는 다른 장치와 연결되어 그룹 소유자 IP를 찾기 위해 연결 정보를 요청합니다.*/

                    PeerListFragment fragment = (PeerListFragment) activity
                            .getFragmentManager().findFragmentById(R.id.frag_List);
                    manager.requestConnectionInfo(channel, fragment);
                } else {
                    // It's a disconnect
                    //연결 끊긴 부분임.
                    activity.resetData();
                }
            } else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) {
                //기기가 변경될 경우에 어떻게 할 것인지.
                MyPhone fragment = (MyPhone) activity.getFragmentManager()
                        .findFragmentById(R.id.frag_MyPhone);
                fragment.updateThisDevice((WifiP2pDevice) intent.getParcelableExtra(
                        WifiP2pManager.EXTRA_WIFI_P2P_DEVICE));

            }
        }
    }

    MyPhone

    package com.cookandroid.mydirecttest1;

    import android.app.ProgressDialog;
    import android.content.Context;
    import android.net.Uri;
    import android.net.wifi.p2p.WifiP2pDevice;
    import android.net.wifi.p2p.WifiP2pInfo;
    import android.os.Bundle;
    import android.app.Fragment;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;

    public class MyPhone extends Fragment {
        private View mContentView = null;
        private WifiP2pDevice device;
        private WifiP2pInfo info;
        ProgressDialog progressDialog = null;

        public WifiP2pDevice getDevice(){
            return device;
        }
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            mContentView = inflater.inflate(R.layout.fragment_my_phone, container, false);
            return mContentView;
        }
        private static String getDeviceStatus(int deviceStatus) {
            Log.d(WiFiDirectActivity.TAG, "Peer status :" + deviceStatus);
            switch (deviceStatus) {
                case WifiP2pDevice.AVAILABLE:
                    return "Available";
                case WifiP2pDevice.INVITED:
                    return "Invited";
                case WifiP2pDevice.CONNECTED:
                    return "Connected";
                case WifiP2pDevice.FAILED:
                    return "Failed";
                case WifiP2pDevice.UNAVAILABLE:
                    return "Unavailable";
                default:
                    return "Unknown";

            }
        }
        public void updateThisDevice(WifiP2pDevice device) {
            this.device = device;
            TextView view = (TextView) mContentView.findViewById(R.id.myPhone_Name);
            view.setText(device.deviceName);
            view = (TextView) mContentView.findViewById(R.id.my_Phone_State);
            view.setText(getDeviceStatus(device.status));
        }

    }


    PeerListFragment

    package com.cookandroid.mydirecttest1;

    import android.app.ProgressDialog;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.net.Uri;
    import android.app.ListFragment;
    import android.net.wifi.WpsInfo;
    import android.net.wifi.p2p.WifiP2pConfig;
    import android.net.wifi.p2p.WifiP2pDevice;
    import android.net.wifi.p2p.WifiP2pDeviceList;
    import android.net.wifi.p2p.WifiP2pInfo;
    import android.net.wifi.p2p.WifiP2pManager;
    import android.net.wifi.p2p.WifiP2pManager.*;
    import android.os.Bundle;
    import android.support.annotation.NonNull;
    import android.support.v4.app.Fragment;
    import android.support.annotation.Nullable;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.ListView;
    import android.widget.TextView;

    import java.util.ArrayList;
    import java.util.List;

    public class PeerListFragment extends ListFragment implements PeerListListener,ConnectionInfoListener {
        private List<WifiP2pDevice> peers = new ArrayList<WifiP2pDevice>();
        ProgressDialog progressDialog = null;
        View mContentView = null;
        private WifiP2pDevice device;

        @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            this.setListAdapter(new WiFiPeerListAdapter(getActivity(),R.layout.list_item, peers));
        }
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            mContentView = inflater.inflate(R.layout.fragment_peer_list, container, false);

            return mContentView;
        }

        public WifiP2pDevice getDevice(){
            return device;
        }
        private static String getDeviceStatus(int deviceStatus) {
            Log.d(WiFiDirectActivity.TAG, "peer status : " + deviceStatus);
            switch (deviceStatus){
                case WifiP2pDevice.AVAILABLE:
                    return "Available";
                case WifiP2pDevice.INVITED:
                    return "Invited";
                case WifiP2pDevice.CONNECTED:
                    return "Connected";
                case WifiP2pDevice.FAILED:
                    return "Failed";
                case WifiP2pDevice.UNAVAILABLE:
                    return "Unavailable";
                default:
                    return "Unknown";
            }
        }
        @Override
        public void onListItemClick(ListView l, View v, int position, long id) {
            WifiP2pDevice device = (WifiP2pDevice)getListAdapter().getItem(position);
        }

        @Override
        public void onConnectionInfoAvailable(WifiP2pInfo wifiP2pInfo) {

        }//화면이동

        private class WiFiPeerListAdapter extends ArrayAdapter<WifiP2pDevice>{
            private List<WifiP2pDevice> items;

            public WiFiPeerListAdapter(Context con, int TextViewResourceId,
                                       List<WifiP2pDevice> object){
                super(con, TextViewResourceId, object);
                items = object;
            }
            @Override
            public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
                View v = convertView;
                Button btnConnect;

                if (v == null){
                    LayoutInflater vi = (LayoutInflater) getActivity().getSystemService(
                            Context.LAYOUT_INFLATER_SERVICE);
                    v = vi.inflate(R.layout.list_item, null);
                }
                final WifiP2pDevice device = items.get(position);
                if (device !=null) {
                    TextView top = (TextView)v.findViewById(R.id.txPhone_Name);
                    TextView bottom = (TextView)v.findViewById(R.id.txPhone_state);
                    if (top != null){
                        top.setText(device.deviceName);
                    }
                    if (bottom != null){
                        bottom.setText(getDeviceStatus(device.status));
                    }
                }
                btnConnect = (Button)v.findViewById(R.id.btnConnect);
                btnConnect.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        WifiP2pDevice device1 =new WifiP2pDevice();
                        WifiP2pConfig config = new WifiP2pConfig();
                        config.deviceAddress = device1.deviceAddress;
                        config.wps.setup = WpsInfo.PBC;
                        if (progressDialog != null && progressDialog.isShowing()){
                            progressDialog.dismiss();

                        }
                        progressDialog = progressDialog.show(getActivity(),"Press back to cancel",
                                "Connecting to : " + device1.deviceAddress,true,true);
                        ((DeviceActionListener)getActivity()).connect(config);
                    }//onClick;
                });
                return v;
            }
        }


        @Override
        public void onPeersAvailable(WifiP2pDeviceList peerList) {
            if (progressDialog != null&& progressDialog.isShowing()){
                progressDialog.dismiss();
            }
            peers.clear();
            peers.addAll(peerList.getDeviceList());
            ((WiFiPeerListAdapter)getListAdapter()).notifyDataSetChanged();
            if(peers.size() == 0){
                Log.d(WiFiDirectActivity.TAG, "No devices Found");
                return;
            }
        }

        public void clearPeers() {
            peers.clear();
            ((WiFiPeerListAdapter) getListAdapter()).notifyDataSetChanged();
        }
        public void onInitiateDiscovery() {
            if (progressDialog != null && progressDialog.isShowing()) {
                progressDialog.dismiss();
            }
            progressDialog = ProgressDialog.show(getActivity(), "Press back to cancel", "finding peers", true,
                    true, new DialogInterface.OnCancelListener() {

                        @Override
                        public void onCancel(DialogInterface dialog) {

                        }
                    });
        }


        public interface DeviceActionListener {

            void showDetails(WifiP2pDevice device);

            void cancelDisconnect();

            void connect(WifiP2pConfig config);

            void disconnect();
        }
    }

    이 게시물을 추천한 분들의 목록입니다.
    푸르딩딩:추천수 3이상 댓글은 배경색이 바뀝니다.
    (단,비공감수가 추천수의 1/3 초과시 해당없음)

    죄송합니다. 댓글 작성은 회원만 가능합니다.

    번호 제 목 이름 날짜 조회 추천
    23464
    진짜 벼랑끝에 몰려서 물어보는 질문 [5] 아젬라 25/03/13 16:33 504 2
    23463
    로또 [1] 까망사투리 25/03/03 14:18 614 0
    23462
    2월 8일 오후 8시 진행- 맛보기 강좌: 5시간 만에 웹 만들기 [1] quickturn 25/02/19 14:44 605 0
    23461
    로또 [2] 까망사투리 25/02/12 13:13 877 2
    23459
    C++ 입문전 초보자입니다. Qt / wxWidgets / FLTK 어떤 [6] OMG! 24/12/07 00:28 1157 0
    23458
    [KOCCA] 2024 게임콘텐츠 제작지원 이용자평가 체험단모집 장파랑 24/11/26 16:56 1107 0
    23457
    [한국콘텐츠진흥원] 2024 게임콘텐츠 제작지원 이용자평가 이용자 모집 장파랑 24/11/18 14:02 1138 0
    23456
    [한국콘텐츠진흥원] 2024 게임콘텐츠 제작지원 이용자평가 이용자 모집 장파랑 24/10/28 18:24 1529 0
    23455
    논문 읽는 사람들을 위한 문서 번역 서비스 rWhale 24/10/10 13:06 1871 2
    23453
    로또번호 [2] 까망사투리 24/09/19 11:10 2526 2
    23452
    AI와 함께가는 코딩 업계 [1] 펌글 우가가 24/09/02 22:19 2761 9
    23451
    Switch문 도배된 2100줄 짜리 함수 [4] 펌글 우가가 24/08/26 22:37 2614 4
    23450
    개인정보 수집 없는 이미지 리사이즈 사라밍 24/08/23 20:31 2007 0
    23449
    디자인 패턴의 템플릿 메소드 패턴 실무 적용 사례 [1] 써니썬 24/08/23 16:47 2021 1
    23448
    TMDB API Key 얻을 때 동의하게 되는 면책 및 포기 조항 우가가 24/08/18 16:07 2003 1
    23447
    펌) 아무튼 개쩌는 번역기를 국내기술로 개발완료 했다는 소식 [1] 펌글 우가가 24/08/15 17:30 2274 2
    23446
    쿠팡 가격 변동 추적 알림 서비스 피드백 요청 (제발) 창작글펌글 애오옹 24/08/10 14:30 2250 0
    23445
    넥사크로 17.1 관련 [2] 본인삭제금지 나르하나 24/08/01 12:30 2218 0
    23444
    개밯자 의자에 머리받침 없어 [2] 까망사투리 24/07/25 13:32 2622 1
    23443
    안드로이드 EditText 리스너 연동 문의드립니다. - 해결됨 [1] 창작글 상사꽃 24/07/01 17:47 2479 2
    23442
    펌) 파이어폭스 엔진이 신인 이유 [1] 펌글 우가가 24/06/30 23:25 3087 2
    23441
    예전에는 함수 하나에 대한 기능에 고민을 많이 했는데.. ssonacy 24/05/21 09:45 2839 0
    23440
    c++ 에서 DB 쿼리문처럼 사용할 방법이 있을까요? [8] 상사꽃 24/05/19 11:10 2999 0
    23439
    쉬운 배터리 알림 창작글 언젠가아자 24/05/14 10:47 3136 0
    23438
    아후 서터레스 [1] NeoGenius 24/04/02 17:52 2818 1
    23436
    로또 [3] 까망사투리 24/03/11 15:53 3499 4
    23434
    copilot 기업유료버전 intelliJ에 붙여서 쓰고있는데 지리네요 안녕월드 24/02/22 00:15 3514 0
    23433
    코딩마을 대나무숲 [6] cocoa 24/02/20 14:50 3683 5
    23432
    (질문) 프로그래머분들은 싱글PC게임 레벨제한 풀수 있죠?? [23] 본인삭제금지 할배궁디Lv2 24/02/13 13:36 3681 1
    23431
    Freemium NeoGenius 24/02/13 13:23 3112 0
    [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [다음10개▶]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈