|  | // Copyright 2011 Google Inc. All Rights Reserved. | 
|  |  | 
|  | package com.example.android.wifidirect; | 
|  |  | 
|  | import android.app.IntentService; | 
|  | import android.content.ContentResolver; | 
|  | import android.content.Context; | 
|  | import android.content.Intent; | 
|  | import android.net.Uri; | 
|  | import android.util.Log; | 
|  |  | 
|  | import java.io.FileNotFoundException; | 
|  | import java.io.IOException; | 
|  | import java.io.InputStream; | 
|  | import java.io.OutputStream; | 
|  | import java.net.InetSocketAddress; | 
|  | import java.net.Socket; | 
|  |  | 
|  | /** | 
|  | * A service that process each file transfer request i.e Intent by opening a | 
|  | * socket connection with the WiFi Direct Group Owner and writing the file | 
|  | */ | 
|  | public class FileTransferService extends IntentService { | 
|  |  | 
|  | private static final int SOCKET_TIMEOUT = 5000; | 
|  | public static final String ACTION_SEND_FILE = "com.example.android.wifidirect.SEND_FILE"; | 
|  | public static final String EXTRAS_FILE_PATH = "file_url"; | 
|  | public static final String EXTRAS_GROUP_OWNER_ADDRESS = "go_host"; | 
|  | public static final String EXTRAS_GROUP_OWNER_PORT = "go_port"; | 
|  |  | 
|  | public FileTransferService(String name) { | 
|  | super(name); | 
|  | } | 
|  |  | 
|  | public FileTransferService() { | 
|  | super("FileTransferService"); | 
|  | } | 
|  |  | 
|  | /* | 
|  | * (non-Javadoc) | 
|  | * @see android.app.IntentService#onHandleIntent(android.content.Intent) | 
|  | */ | 
|  | @Override | 
|  | protected void onHandleIntent(Intent intent) { | 
|  |  | 
|  | Context context = getApplicationContext(); | 
|  | if (intent.getAction().equals(ACTION_SEND_FILE)) { | 
|  | String fileUri = intent.getExtras().getString(EXTRAS_FILE_PATH); | 
|  | String host = intent.getExtras().getString(EXTRAS_GROUP_OWNER_ADDRESS); | 
|  | Socket socket = new Socket(); | 
|  | int port = intent.getExtras().getInt(EXTRAS_GROUP_OWNER_PORT); | 
|  |  | 
|  | try { | 
|  | Log.d(WiFiDirectActivity.TAG, "Opening client socket - "); | 
|  | socket.bind(null); | 
|  | socket.connect((new InetSocketAddress(host, port)), SOCKET_TIMEOUT); | 
|  |  | 
|  | Log.d(WiFiDirectActivity.TAG, "Client socket - " + socket.isConnected()); | 
|  | OutputStream stream = socket.getOutputStream(); | 
|  | ContentResolver cr = context.getContentResolver(); | 
|  | InputStream is = null; | 
|  | try { | 
|  | is = cr.openInputStream(Uri.parse(fileUri)); | 
|  | } catch (FileNotFoundException e) { | 
|  | Log.d(WiFiDirectActivity.TAG, e.toString()); | 
|  | } | 
|  | DeviceDetailFragment.copyFile(is, stream); | 
|  | Log.d(WiFiDirectActivity.TAG, "Client: Data written"); | 
|  | } catch (IOException e) { | 
|  | Log.e(WiFiDirectActivity.TAG, e.getMessage()); | 
|  | } finally { | 
|  | if (socket != null) { | 
|  | if (socket.isConnected()) { | 
|  | try { | 
|  | socket.close(); | 
|  | } catch (IOException e) { | 
|  | // Give up | 
|  | e.printStackTrace(); | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | } | 
|  | } | 
|  | } |