1

私のデバイス (Htc One S) では、画像が次のパスに保存されていることがわかりました。storage/sdcard0/DCIM/100MEDIA/name_of_file.jpg

しかし、他のデバイスではパスが異なる可能性があると確信しています。私のアプリケーションでは、サーバー ソケットを作成し、イメージをクライアントに正常に送信できます。以下のコードでわかるように、このモードでパスを作成しますEnvironment.getExternalStorageDirectory()+"/"+Environment.DIRECTORY_DCIM+"/100MEDIA","IMAG0026.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();
        }
    }
}

ありがとう

4

1 に答える 1

1

この方法でギャラリー内の画像のリストを取得できます。

String[] projection = new String[]{
        MediaStore.Images.Media.DATA,
};

Uri images = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
Cursor cur = managedQuery(images,
        projection,
        "",
        null,
        ""
);

final ArrayList<String> imagesPath = new ArrayList<String>();
if (cur.moveToFirst()) {

    int dataColumn = cur.getColumnIndex(
            MediaStore.Images.Media.DATA);
    do {
        imagesPath.add(cur.getString(dataColumn));
    } while (cur.moveToNext());
}
于 2013-06-26T08:13:50.667 に答える