@@ -3,10 +3,12 @@ package ai.pai.ptp.test; |
||
3 | 3 |
import android.app.Activity; |
4 | 4 |
import android.content.Intent; |
5 | 5 |
import android.graphics.Bitmap; |
6 |
+import android.media.Image; |
|
6 | 7 |
import android.os.Bundle; |
7 | 8 |
import android.os.Handler; |
8 | 9 |
import android.os.Message; |
9 | 10 |
import android.view.View; |
11 |
+import android.widget.AdapterView; |
|
10 | 12 |
import android.widget.GridView; |
11 | 13 |
import android.widget.ImageView; |
12 | 14 |
import android.widget.ListView; |
@@ -22,11 +24,12 @@ import java.util.ArrayList; |
||
22 | 24 |
import ai.pai.ptp.R; |
23 | 25 |
|
24 | 26 |
|
25 |
-public class MyTestActivity extends Activity implements Handler.Callback, Camera.CameraListener, Camera.StorageInfoListener, Camera.RetrieveImageInfoListener { |
|
27 |
+public class MyTestActivity extends Activity implements Handler.Callback, Camera.CameraListener, Camera.StorageInfoListener, Camera.RetrieveImageInfoListener { |
|
26 | 28 |
|
27 | 29 |
private ImageView photoIv; |
28 | 30 |
private TestLogListAdapter adapter; |
29 | 31 |
private GridView photoGridView; |
32 |
+ private ImageView photo_detail; |
|
30 | 33 |
private TestPhotoGridAdapter photoGridAdapter; |
31 | 34 |
private PtpService ptp; |
32 | 35 |
private Camera camera; |
@@ -55,6 +58,8 @@ public class MyTestActivity extends Activity implements Handler.Callback, Camera |
||
55 | 58 |
photoGridAdapter = new TestPhotoGridAdapter(this, photoGridView); |
56 | 59 |
photoGridView.setAdapter(photoGridAdapter); |
57 | 60 |
|
61 |
+ photo_detail = (ImageView) findViewById(R.id.photo_detail); |
|
62 |
+ |
|
58 | 63 |
findViewById(R.id.btn_get_devece_info).setOnClickListener(new View.OnClickListener() { |
59 | 64 |
@Override |
60 | 65 |
public void onClick(View v) { |
@@ -97,6 +102,21 @@ public class MyTestActivity extends Activity implements Handler.Callback, Camera |
||
97 | 102 |
} |
98 | 103 |
} |
99 | 104 |
}); |
105 |
+ |
|
106 |
+ ((GridView) findViewById(R.id.gridview_photos)).setOnItemClickListener(new AdapterView.OnItemClickListener() { |
|
107 |
+ @Override |
|
108 |
+ public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { |
|
109 |
+ photo_detail.setVisibility(View.VISIBLE); |
|
110 |
+ photo_detail.setImageBitmap(((Photo) photoGridAdapter.getItem(i)).origin); |
|
111 |
+ } |
|
112 |
+ }); |
|
113 |
+ |
|
114 |
+ findViewById(R.id.photo_detail).setOnClickListener(new View.OnClickListener() { |
|
115 |
+ @Override |
|
116 |
+ public void onClick(View view) { |
|
117 |
+ photo_detail.setVisibility(View.INVISIBLE); |
|
118 |
+ } |
|
119 |
+ }); |
|
100 | 120 |
} |
101 | 121 |
|
102 | 122 |
@Override |
@@ -133,7 +153,7 @@ public class MyTestActivity extends Activity implements Handler.Callback, Camera |
||
133 | 153 |
if (camera != null) { |
134 | 154 |
mainHandler.removeMessages(MSG_CHECK_STORAGE); |
135 | 155 |
camera.retrieveImageHandles(MyTestActivity.this, 0xFFFFFFFF, PtpConstants.ObjectFormat.EXIF_JPEG); |
136 |
- mainHandler.sendEmptyMessageDelayed(MSG_CHECK_STORAGE, 1000); |
|
156 |
+ mainHandler.sendEmptyMessageDelayed(MSG_CHECK_STORAGE, 100000); |
|
137 | 157 |
} |
138 | 158 |
} |
139 | 159 |
return false; |
@@ -237,16 +257,15 @@ public class MyTestActivity extends Activity implements Handler.Callback, Camera |
||
237 | 257 |
} |
238 | 258 |
|
239 | 259 |
@Override |
240 |
- public void onObjectAdded(int handle, int format) { |
|
241 |
- adapter.addInfo("相机系统发现新文件 ,文件句柄 =" + handle + " format = " + format); |
|
260 |
+ public void onObjectAdded(int handle) { |
|
261 |
+ adapter.addInfo("相机系统发现新文件 ,文件句柄 =" + handle); |
|
242 | 262 |
if (camera == null) { |
243 | 263 |
return; |
244 | 264 |
} |
245 |
- if (format == PtpConstants.ObjectFormat.EXIF_JPEG) { |
|
246 |
- camera.retrievePicture(handle); |
|
247 |
- } |
|
265 |
+ camera.retrievePicture(handle); |
|
248 | 266 |
} |
249 | 267 |
|
268 |
+ |
|
250 | 269 |
@Override |
251 | 270 |
public void onLogMessage(String msg) { |
252 | 271 |
adapter.addInfo(msg); |
@@ -314,6 +333,7 @@ public class MyTestActivity extends Activity implements Handler.Callback, Camera |
||
314 | 333 |
}); |
315 | 334 |
} |
316 | 335 |
|
336 |
+ |
|
317 | 337 |
public void retrieveImageInfo(final int handle) { |
318 | 338 |
mainHandler.post(new Runnable() { |
319 | 339 |
@Override |
@@ -3,6 +3,7 @@ package ai.pai.ptp.test; |
||
3 | 3 |
import android.view.LayoutInflater; |
4 | 4 |
import android.view.View; |
5 | 5 |
import android.view.ViewGroup; |
6 |
+import android.widget.AdapterView; |
|
6 | 7 |
import android.widget.BaseAdapter; |
7 | 8 |
import android.widget.GridView; |
8 | 9 |
import android.widget.ImageView; |
@@ -26,6 +27,13 @@ public class TestPhotoGridAdapter extends BaseAdapter { |
||
26 | 27 |
inflater = LayoutInflater.from(context); |
27 | 28 |
int screenW = context.getResources().getDisplayMetrics().widthPixels; |
28 | 29 |
height = (int) (screenW - 4 * 3 * context.getResources().getDisplayMetrics().density) / 3; |
30 |
+ |
|
31 |
+ gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { |
|
32 |
+ @Override |
|
33 |
+ public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { |
|
34 |
+ |
|
35 |
+ } |
|
36 |
+ }); |
|
29 | 37 |
} |
30 | 38 |
|
31 | 39 |
@Override |
@@ -88,7 +88,7 @@ public interface Camera { |
||
88 | 88 |
|
89 | 89 |
void onFocusPointsChanged(); |
90 | 90 |
|
91 |
- void onObjectAdded(int handle, int format); |
|
91 |
+ void onObjectAdded(int handle); |
|
92 | 92 |
|
93 | 93 |
void onLogMessage(String msg); |
94 | 94 |
} |
@@ -66,7 +66,7 @@ public class EosCamera extends PtpCamera { |
||
66 | 66 |
} |
67 | 67 |
|
68 | 68 |
public void onEventDirItemCreated(int objectHandle, int storageId, int objectFormat, String filename) { |
69 |
- onEventObjectAdded(objectHandle, objectFormat); |
|
69 |
+ onEventObjectAdded(objectHandle); |
|
70 | 70 |
} |
71 | 71 |
|
72 | 72 |
@Override |
@@ -24,6 +24,7 @@ import com.remoteyourcam.usb.ptp.PtpConstants.Operation; |
||
24 | 24 |
import com.remoteyourcam.usb.ptp.commands.GetDevicePropDescCommand; |
25 | 25 |
import com.remoteyourcam.usb.ptp.commands.InitiateCaptureCommand; |
26 | 26 |
import com.remoteyourcam.usb.ptp.commands.RetrieveAddedObjectInfoAction; |
27 |
+import com.remoteyourcam.usb.ptp.commands.RetrievePictureAction; |
|
27 | 28 |
import com.remoteyourcam.usb.ptp.commands.SimpleCommand; |
28 | 29 |
import com.remoteyourcam.usb.ptp.commands.nikon.NikonAfDriveCommand; |
29 | 30 |
import com.remoteyourcam.usb.ptp.commands.nikon.NikonCloseSessionAction; |
@@ -168,6 +169,12 @@ public class NikonCamera extends PtpCamera { |
||
168 | 169 |
this.vendorPropCodes = vendorPropCodes; |
169 | 170 |
} |
170 | 171 |
|
172 |
+ @Override |
|
173 |
+ public void retrievePicture(int objectHandle) { |
|
174 |
+ queue.add(new RetrievePictureAction(this, objectHandle, pictureSampleSize)); |
|
175 |
+ queue.add(new SimpleCommand(this, PtpConstants.Operation.NikonDeleteImagesInSdram, objectHandle)); |
|
176 |
+ } |
|
177 |
+ |
|
171 | 178 |
public void onEventObjectAdded(int objectHandle) { |
172 | 179 |
queue.add(new RetrieveAddedObjectInfoAction(this, objectHandle)); |
173 | 180 |
} |
@@ -34,6 +34,7 @@ import com.remoteyourcam.usb.ptp.commands.RetrieveImageAction; |
||
34 | 34 |
import com.remoteyourcam.usb.ptp.commands.RetrieveImageInfoAction; |
35 | 35 |
import com.remoteyourcam.usb.ptp.commands.RetrievePictureAction; |
36 | 36 |
import com.remoteyourcam.usb.ptp.commands.SetDevicePropValueCommand; |
37 |
+import com.remoteyourcam.usb.ptp.commands.SimpleCommand; |
|
37 | 38 |
import com.remoteyourcam.usb.ptp.model.DeviceInfo; |
38 | 39 |
import com.remoteyourcam.usb.ptp.model.DevicePropDesc; |
39 | 40 |
import com.remoteyourcam.usb.ptp.model.LiveViewData; |
@@ -110,7 +111,7 @@ public abstract class PtpCamera implements Camera { |
||
110 | 111 |
protected final int productId; |
111 | 112 |
|
112 | 113 |
private WorkerListener workerListener; |
113 |
- private int pictureSampleSize; |
|
114 |
+ protected int pictureSampleSize; |
|
114 | 115 |
|
115 | 116 |
public PtpCamera(PtpUsbConnection connection, CameraListener listener, WorkerListener workerListener) { |
116 | 117 |
this.connection = connection; |
@@ -376,12 +377,12 @@ public abstract class PtpCamera implements Camera { |
||
376 | 377 |
} |
377 | 378 |
} |
378 | 379 |
|
379 |
- public void onEventObjectAdded(final int handle, final int format) { |
|
380 |
+ public void onEventObjectAdded(final int handle) { |
|
380 | 381 |
handler.post(new Runnable() { |
381 | 382 |
@Override |
382 | 383 |
public void run() { |
383 | 384 |
if (listener != null) { |
384 |
- listener.onObjectAdded(handle, format); |
|
385 |
+ listener.onObjectAdded(handle); |
|
385 | 386 |
} |
386 | 387 |
} |
387 | 388 |
}); |
@@ -883,5 +884,4 @@ public abstract class PtpCamera implements Camera { |
||
883 | 884 |
public void setCapturedPictureSampleSize(int sampleSize) { |
884 | 885 |
this.pictureSampleSize = sampleSize; |
885 | 886 |
} |
886 |
- |
|
887 | 887 |
} |
@@ -119,6 +119,11 @@ public class PtpConstants { |
||
119 | 119 |
public static final int NikonGetObjectPropDesc = 0x9802; |
120 | 120 |
public static final int NikonGetObjectPropValue = 0x9803; |
121 | 121 |
public static final int NikonGetObjectPropList = 0x9805; |
122 |
+ public static final int NikonGetVendorStorageIDs = 0x9209; |
|
123 |
+ public static final int NIKONStartMovieRecInCard = 0x920a; |
|
124 |
+ public static final int NIKONEndMovieRec = 0x920b; |
|
125 |
+ public static final int NIKONTerminateCapture = 0x920c; |
|
126 |
+ public static final int NIKONGetPartialObjectHiSpeed = 0x920b; |
|
122 | 127 |
|
123 | 128 |
// Canon EOS |
124 | 129 |
public static final int EosTakePicture = 0x910F; |
@@ -156,9 +161,9 @@ public class PtpConstants { |
||
156 | 161 |
public static final int CaptureComplete = 0x400D; |
157 | 162 |
|
158 | 163 |
// Nikon |
159 |
- public static final int NikonObjectAddedInSdram = 0xC101; |
|
164 |
+ public static final int NikonObjectAddedInSdram = 0xffffC101; |
|
160 | 165 |
public static final int NikonCaptureCompleteRecInSdram = 0xC102; |
161 |
- public static final int NikonPreviewImageAdded = 0xC104; |
|
166 |
+ public static final int NikonPreviewImageAdded = 0xffffC104; |
|
162 | 167 |
|
163 | 168 |
// Canon EOS |
164 | 169 |
public static final int EosObjectAdded = 0xC181; // ? dir item request transfer or dir item created |
@@ -42,7 +42,7 @@ public class RetrieveAddedObjectInfoAction implements PtpAction { |
||
42 | 42 |
return; |
43 | 43 |
} |
44 | 44 |
|
45 |
- camera.onEventObjectAdded(objectHandle, getInfo.getObjectInfo().objectFormat); |
|
45 |
+ camera.onEventObjectAdded(objectHandle); |
|
46 | 46 |
} |
47 | 47 |
|
48 | 48 |
@Override |
@@ -70,6 +70,11 @@ public class NikonEventCheckCommand extends NikonCommand { |
||
70 | 70 |
case Event.CaptureComplete: |
71 | 71 |
camera.onEventCaptureComplete(); |
72 | 72 |
break; |
73 |
+ case Event.NikonObjectAddedInSdram: |
|
74 |
+ //libgphoto2 相关处理 |
|
75 |
+ if (eventParam == 0) { eventParam = 0xffff001; } |
|
76 |
+ camera.onEventObjectAdded(eventParam); |
|
77 |
+ break; |
|
73 | 78 |
} |
74 | 79 |
} |
75 | 80 |
} |
@@ -1,7 +1,10 @@ |
||
1 | 1 |
<?xml version="1.0" encoding="utf-8"?> |
2 | 2 |
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" |
3 |
+ xmlns:app="http://schemas.android.com/apk/res-auto" |
|
4 |
+ xmlns:tools="http://schemas.android.com/tools" |
|
3 | 5 |
android:layout_width="match_parent" |
4 | 6 |
android:layout_height="match_parent" |
7 |
+ android:background="#fff" |
|
5 | 8 |
android:orientation="vertical"> |
6 | 9 |
|
7 | 10 |
<Button |
@@ -53,15 +56,22 @@ |
||
53 | 56 |
android:horizontalSpacing="4dp" |
54 | 57 |
android:listSelector="@android:color/transparent" |
55 | 58 |
android:numColumns="3" |
56 |
- android:verticalSpacing="4dp" |
|
57 |
- /> |
|
59 |
+ android:verticalSpacing="4dp" /> |
|
58 | 60 |
|
59 | 61 |
<ImageView |
60 | 62 |
android:id="@+id/iv_latest_photo" |
61 | 63 |
android:layout_width="match_parent" |
62 | 64 |
android:layout_height="match_parent" |
63 |
- android:visibility="gone" |
|
64 |
- android:scaleType="fitCenter" /> |
|
65 |
+ android:scaleType="fitCenter" |
|
66 |
+ android:visibility="gone" /> |
|
67 |
+ |
|
68 |
+ <ImageView |
|
69 |
+ android:id="@+id/photo_detail" |
|
70 |
+ android:layout_width="wrap_content" |
|
71 |
+ android:layout_height="wrap_content" |
|
72 |
+ android:visibility="invisible" |
|
73 |
+ tools:src="@tools:sample/backgrounds/scenic" /> |
|
74 |
+ |
|
65 | 75 |
</RelativeLayout> |
66 | 76 |
|
67 | 77 |
</LinearLayout> |