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

받은 예제를 프로젝트 생성후 새로 옮기면 실행도중 죽습니다

0 추천
package com.example.wifimanager;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import com.example.wifimanager.R;
import com.example.wifimanager.WifiApManager;
import com.example.wifimanager.ClientScanResult;

public class MainActivity extends Activity {
 TextView textView1;
 WifiApManager wifiApManager;

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  textView1 = (TextView) findViewById(R.id.textView1);

  wifiApManager = new WifiApManager(MainActivity.this);
  
  scan();
 }

 private void scan() {
  
  ArrayList<ClientScanResult> clients = wifiApManager.getClientList(false);

  textView1.append("WifiApState: " + wifiApManager.getWifiApState() + "\n\n");

  textView1.append("Clients: \n");
  for (ClientScanResult clientScanResult : clients) {
   textView1.append("####################\n");
   textView1.append("IpAddr: " + clientScanResult.getIpAddr() + "\n");
   textView1.append("Device: " + clientScanResult.getDevice() + "\n");
   textView1.append("HWAddr: " + clientScanResult.getHWAddr() + "\n");
   textView1.append("isReachable: " + clientScanResult.isReachable() + "\n");
  }
 
 }

 public boolean onCreateOptionsMenu(Menu menu) {
  menu.add(0, 0, 0, "Get Clients");
  menu.add(0, 1, 0, "Open AP");
  menu.add(0, 2, 0, "Close AP");
  return super.onCreateOptionsMenu(menu);
 }

 public boolean onMenuItemSelected(int featureId, MenuItem item) {
  switch (item.getItemId()) {
  case 0:
   scan();
   break;
  case 1:
   wifiApManager.setWifiApEnabled(null, true);
   break;
  case 2:
   wifiApManager.setWifiApEnabled(null, false);
   break;
  }

  return super.onMenuItemSelected(featureId, item);
 }
}
=========================
package com.example.wifimanager;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Method;
import java.net.InetAddress;
import java.util.ArrayList;

import android.content.Context;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.util.Log;

public class WifiApManager {
 
 private final WifiManager mWifiManager;
 
 public WifiApManager(Context context) {
  
  mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
 }
 

 public boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled) {
  try {
   if (enabled) { // disable WiFi in any case
    mWifiManager.setWifiEnabled(false);
   }

   Method method = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
   return (Boolean) method.invoke(mWifiManager, wifiConfig, enabled);
  } catch (Exception e) {
   Log.e(this.getClass().toString(), "", e);
   return false;
  }
 }
 
 
 public WIFI_AP_STATE getWifiApState() {
  try {
   
   Method method = mWifiManager.getClass().getMethod("getWifiApState");
   
   int tmp = ((Integer)method.invoke(mWifiManager));
   
   // Fix for Android 4
   if (tmp > 10) {
    tmp = tmp - 10;
   }
   
   return WIFI_AP_STATE.class.getEnumConstants()[tmp];
  } catch (Exception e) {
   Log.e(this.getClass().toString(), "", e);
   return WIFI_AP_STATE.WIFI_AP_STATE_FAILED;
  }
 }
 
 

public boolean isWifiApEnabled() {
        return getWifiApState() == WIFI_AP_STATE.WIFI_AP_STATE_ENABLED;
    }
    
  
 public WifiConfiguration getWifiApConfiguration() {
  try {
   Method method = mWifiManager.getClass().getMethod("getWifiApConfiguration");
   return (WifiConfiguration) method.invoke(mWifiManager);
  } catch (Exception e) {
   Log.e(this.getClass().toString(), "", e);
   return null;
  }
    }
    
 public boolean setWifiApConfiguration(WifiConfiguration wifiConfig) {
     try {
   Method method = mWifiManager.getClass().getMethod("setWifiApConfiguration", WifiConfiguration.class);
   return (Boolean) method.invoke(mWifiManager, wifiConfig);
  } catch (Exception e) {
   Log.e(this.getClass().toString(), "", e);
   return false;
  }
 }
    
 

 public ArrayList<ClientScanResult> getClientList(boolean onlyReachables) {
     return getClientList(onlyReachables, 300);
 }
    
 public ArrayList<ClientScanResult> getClientList(boolean onlyReachables, int reachableTimeout) {
  BufferedReader br = null;
  ArrayList<ClientScanResult> result = null;

  try {
   result = new ArrayList<ClientScanResult>();
   br = new BufferedReader(new FileReader("/proc/net/arp"));
   String line;
   while ((line = br.readLine()) != null) {
    String[] splitted = line.split(" +");

    if ((splitted != null) && (splitted.length >= 4)) {
     // Basic sanity check
     String mac = splitted[3];

     if (mac.matches("..:..:..:..:..:..")) {
      boolean isReachable = InetAddress.getByName(splitted[0]).isReachable(reachableTimeout);

      if (!onlyReachables || isReachable) {
       result.add(new ClientScanResult(splitted[0], splitted[3], splitted[5], isReachable));
      }
     }
    }
   }
  } catch (Exception e) {
   Log.e(this.getClass().toString(), e.getMessage());
  } finally {
   try {
    br.close();
   } catch (IOException e) {
    Log.e(this.getClass().toString(), e.getMessage());
   }
  }

  return result;
 }
}

 

프로젝트만 새로 생성했을뿐 mainActivity 나 wifiApManager 는 구글링으로 받은 예제에 포함된 파일입니다

한 패키지에 묶어서 프로젝트에 추가했고 설정이 잘못된건지 이유가 뭔지 도무지 모르겠습니다  도움 부탁드립니다

옮기기전에 예제 자체는 정상적으로 작동됩니다  두 파일 코드 내용으로 연속으로 올려드립니다

아무쪼록 고수분들의  조언기다리겠습니다

숭늉 (540 포인트) 님이 2014년 6월 19일 질문

2개의 답변

0 추천
 
채택된 답변
로그가 없어 정확한 원인은 알기 힘들지만 권한 등의 설정이 있는 AndroidManifest.xml 파일을 한번 비교 해보시길 바랍니다.
인연 (31,880 포인트) 님이 2014년 6월 20일 답변
숭늉님이 2014년 6월 25일 채택됨
해결보진 못했지만 감사합니다
0 추천
로그를 올려보세요            
익명사용자 님이 2014년 6월 20일 답변
...