私のデバイス (Htc One S) では、画像が次のパスに保存されていることがわかりました。storage/sdcard0/DCIM/100MEDIA/name_of_file.jpg
しかし、他のデバイスではパスが異なる可能性があると確信しています。私のアプリケーションでは、サーバー ソケットを作成し、イメージをクライアントに正常に送信できます。以下のコードでわかるように、このモードでパスを作成しますEnvironment.getExternalStorageDirectory()+"/"+Environment.DIRECTORY_DCIM+"/100MEDIA","IMAG00
26.jpg" `
それは私のデバイスには適していますが、別のデバイスでは間違っている可能性があります。そこで質問があります...デバイス内またはSDカード内のファイルのIDまたは名前を検索して送信するにはどうすればよいですか? ここに画像を送信するための私のコードがあります(正しく動作します)。
public class ServerThread extends AndroidApp2 implements Runnable { //dichiaro la classe ServerThread che implementa Runnable
public void run() {
try{
if ( SERVERIP != null){
handler.post(new Runnable(){
@Override
public void run(){
serverStatus.setText("Listening on IP: " + ip_address_conversion + ":" + SERVERPORT);
}
});
serverSocket = new ServerSocket(SERVERPORT);
while (true){
Socket client = serverSocket.accept();
handler.post(new Runnable(){
@Override
public void run(){
serverStatus.setText("Connected");
}
});
try{
handler.post(new Runnable(){
@Override
public void run(){
AlertDialog.Builder connection_alert3 = new AlertDialog.Builder(AndroidApp2.this);
connection_alert3.setTitle("Connection Incoming");
connection_alert3.setMessage("Do you want accept the incoming connection?");
connection_alert3.setCancelable(false);
connection_alert3.setPositiveButton("Yes", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id) {
alertValue = true;
}
});
connection_alert3.setNegativeButton("No", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
alertValue = false;
}
});
AlertDialog alert = connection_alert3.create();
alert.show();
}
});
if (alertValue == true){
File xmlFile = new File(Environment.getExternalStorageDirectory(),"xmlPhotos.xml");
int size = (int) xmlFile.length();
byte[] bytes = new byte[size];
try {
BufferedInputStream buf = new BufferedInputStream(new FileInputStream(xmlFile));
buf.read(bytes, 0, bytes.length);
buf.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
client.getOutputStream().write(bytes, 0, size);
String[] projecton = new String[]{
MediaStore.Images.Media.DATA,
};
Uri image = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
Cursor cursor = managedQuery(image, projecton,"", null, "");
final ArrayList<String> imagesPath = new ArrayList<String>();
if(cursor.moveToFirst()){
int dataColumn = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
do {
imagesPath.add(cursor.getString(dataColumn));
} while (cursor.moveToNext());
}
File photoFile = new File(Environment.getExternalStorageDirectory()+"/"+Environment.DIRECTORY_DCIM+"/100MEDIA","IMAG0026.jpg");
int size2 = (int) photoFile.length();
System.out.print("int2: "+size2);
byte[] bytes2 = new byte[size2];
try {
BufferedInputStream buf = new BufferedInputStream(new FileInputStream(photoFile));
buf.read(bytes2, 0, bytes2.length);
buf.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
client.getOutputStream().write(bytes2, 0, size2);
serverStatus.setText("Finish the transfer");
client.close();
}
} catch (Exception e){
handler.post(new Runnable() {
@Override
public void run() {
serverStatus.setText("Oops. Connection interrupted. Please reconnect your phones.");
}
});
e.printStackTrace();
}
}
} else{
handler.post(new Runnable(){
@Override
public void run(){
serverStatus.setText("Couldn't detect internet connection.");
}
});
}
} catch (Exception e) {
handler.post(new Runnable(){
@Override
public void run(){
serverStatus.setText("Error");
}
});
e.printStackTrace();
}
}
}
ありがとう