Android Studio 1.5.1 をインストールできたところで、早速 簡単なAndroidアプリを。
WiFiデバックすることが多いのでアンドロイド端末のIPアドレスなど ネットワーク情報を取得・表示させるだけのアプリ。
Android Studio で新規プロジェクトを作成。
↓
Empty Activity を選択。
▼
WiFiデバックすることが多いのでアンドロイド端末のIPアドレスなど ネットワーク情報を取得・表示させるだけのアプリ。
Android Studio で新規プロジェクトを作成。
↓
Empty Activity を選択。
▼
http://www.yukun.info/blog/2010/05/java-networkinterface-ipv6-ipv4.html
に綺麗なソースが公開されていたので show() の代わりに toString() を追加。
●app/src/main/java/example/myapplication/InetAddressesInfo.java
app/src/main/AndroidManifest.xml
app/src/main/res/layout/activity_main.xml
app/src/main/java/example/myapplication/MainActivity.java
コンパイル面倒な方には
http://www.remix.asia/dat/apk/
の
Ipconfig.apk
を。
に綺麗なソースが公開されていたので show() の代わりに toString() を追加。
●app/src/main/java/example/myapplication/InetAddressesInfo.java
package example.myapplication;
import java.net.Inet6Address;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
public class InetAddressesInfo{
private HashMap<NetworkInterface, ArrayList<InetAddress>> interfaceMap;
public InetAddressesInfo(){
interfaceMap = new HashMap<NetworkInterface, ArrayList<InetAddress>>();
}
public void getInterfaces(){
interfaceMap.clear();
try{
Enumeration<NetworkInterface> interfaceList = NetworkInterface.getNetworkInterfaces();
if( interfaceList == null ){
System.out.println( "Message: No interfaces found" );
}else{
while( interfaceList.hasMoreElements() ){
NetworkInterface iface = interfaceList.nextElement();
Enumeration<InetAddress> addrList = iface.getInetAddresses();
if( !addrList.hasMoreElements() ) continue;
ArrayList<InetAddress> iaddress = new ArrayList<InetAddress>();
while( addrList.hasMoreElements() )
iaddress.add( addrList.nextElement() );
interfaceMap.put( iface, iaddress );
}
}
} catch( SocketException se ){
System.out.println( "Error getting network interfaces: " + se.getMessage() );
}
}
public void show(){
for( NetworkInterface n : interfaceMap.keySet() ){
System.out.println( "Interface " + n.getName() + ": " );
for( InetAddress a : interfaceMap.get(n) ){
System.out.print("\tAddress " + ((a instanceof Inet4Address ? "(IPv4)"
: (a instanceof Inet6Address ? "(IPv6)" : "(?)"))) );
System.out.println( ": " + a.getHostAddress() );
}
}
}
public String toString(){
String str="";
for( NetworkInterface n : interfaceMap.keySet() ){
str += "Interface " + n.getName() + ": \n";
for( InetAddress a : interfaceMap.get(n) ){
str += "\tAddress " + (
(a instanceof Inet4Address ? "(IPv4)":
(a instanceof Inet6Address ? "(IPv6)" : "(?)")
)
);
str += ": " + a.getHostAddress() + "\n";
}
}
return str;
}
public HashMap<NetworkInterface, ArrayList<InetAddress>> getInterfaceMap(){
return interfaceMap;
}
public static void main( String[] args ){
InetAddressesInfo i = new InetAddressesInfo();
i.getInterfaces();
i.show();
}
}
●ネットワークリソースをアクセスする権限付与(★行:追加・変更)。app/src/main/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="example.myapplication">
★ <uses-permission android:name="android.permission.INTERNET"/>
★ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
●ハードコーディング Hello・・・ の代わりにプログラムからアクセスするシンボルを定義。app/src/main/res/layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="example.myapplication.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
★ android:id="@+id/textView" />
</RelativeLayout>
●メインapp/src/main/java/example/myapplication/MainActivity.java
package example.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
★ TextView textView = (TextView)findViewById( R.id.textView );
★ InetAddressesInfo i = new InetAddressesInfo();
★ i.getInterfaces();
★ textView.setText( i.toString() );
}
}
コンパイル面倒な方には
http://www.remix.asia/dat/apk/
の
Ipconfig.apk
を。