POS-45 Dodanie możliwości robienia zdjęć
This commit is contained in:
parent
966edab483
commit
8ce472a931
@ -12,15 +12,28 @@ using System.Collections.Generic;
|
||||
using System.Security;
|
||||
using System.Net;
|
||||
using System.Linq;
|
||||
using System.IO;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
using Klient.Droid.Modules;
|
||||
using Android.Provider;
|
||||
using Android.Content;
|
||||
using Android.Graphics;
|
||||
|
||||
using Com.Xamarin.Formsviewgroup;
|
||||
using Android.Icu.Text;
|
||||
using System.IO;
|
||||
using Android.Media;
|
||||
using System.Threading.Tasks;
|
||||
using Java.IO;
|
||||
using System.Net.Http.Headers;
|
||||
|
||||
namespace Klient.Droid
|
||||
{
|
||||
[Activity(Label = "Klient", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
|
||||
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
|
||||
{
|
||||
Bitmap bitmap;
|
||||
ByteArrayContent fileContent;
|
||||
public static int PickImageId = 1000;
|
||||
private static readonly HttpClient client = new HttpClient();
|
||||
public static Android.Content.Intent photo;
|
||||
@ -36,8 +49,10 @@ namespace Klient.Droid
|
||||
|
||||
base.OnCreate(savedInstanceState);
|
||||
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
|
||||
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
|
||||
StrictMode.SetVmPolicy(builder.Build());
|
||||
LoadApplication(new App());
|
||||
SetContentView(Resource.Layout.ekranStartowy);
|
||||
SetContentView(Resource.Layout.ekranPoLogowaniu);
|
||||
}
|
||||
|
||||
[Java.Interop.Export("SignIn")]
|
||||
@ -202,6 +217,18 @@ namespace Klient.Droid
|
||||
|
||||
StartActivityForResult(Android.Content.Intent.CreateChooser(Intent, "Select Picture"), PickImageId);
|
||||
}
|
||||
|
||||
[Java.Interop.Export("LoadFromCamera")]
|
||||
public void LoadFromCamera(View v)
|
||||
{
|
||||
Intent intent = new Intent(MediaStore.ActionImageCapture);
|
||||
//Android.Net.Uri pictureUri = Android.Net.Uri.FromFile(new File(GetExternalFilesDir(Android.OS.Environment.DirectoryDcim), Guid.NewGuid().ToString().Replace(".", "")+".jpg"));
|
||||
//intent.PutExtra(MediaStore.ExtraOutput, pictureUri);
|
||||
StartActivityForResult(intent, 0);
|
||||
|
||||
}
|
||||
|
||||
|
||||
[Java.Interop.Export("GoToStart")]
|
||||
public void GoToStart(View v)
|
||||
{
|
||||
@ -216,15 +243,89 @@ namespace Klient.Droid
|
||||
protected override void OnActivityResult(int requestCode, Result resultCode, Android.Content.Intent data)
|
||||
{
|
||||
SetContentView(Resource.Layout.ekranPoZdjeciu);
|
||||
FindViewById<TextView>(Resource.Id.ErrorPhoto).Text = "";
|
||||
if (requestCode == 0)
|
||||
{
|
||||
photo = data;
|
||||
base.OnActivityResult(requestCode, resultCode, data);
|
||||
if(data != null) bitmap = (Bitmap)data.Extras.Get("data");
|
||||
|
||||
byte[] bitmapData;
|
||||
var stream = new MemoryStream();
|
||||
bitmap.Compress(Bitmap.CompressFormat.Jpeg, 60, stream);
|
||||
bitmapData = stream.ToArray();
|
||||
fileContent = new ByteArrayContent(bitmapData);
|
||||
|
||||
|
||||
FindViewById<ImageView>(Resource.Id.Preview).SetImageBitmap(bitmap);
|
||||
|
||||
}
|
||||
else if(requestCode == PickImageId)
|
||||
{
|
||||
Android.Net.Uri uri = data.Data;
|
||||
photo = data;
|
||||
FindViewById<ImageView>(Resource.Id.Preview).SetImageURI(uri);
|
||||
}
|
||||
else if(data == null)
|
||||
{
|
||||
SetContentView(Resource.Layout.ekranPoLogowaniu);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
[Java.Interop.Export("SendPhoto")]
|
||||
async public void UploadPhoto(View v)
|
||||
{
|
||||
if(photo.Data == null)
|
||||
{
|
||||
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/octet-stream");
|
||||
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
|
||||
{
|
||||
Name = "image",
|
||||
FileName = Guid.NewGuid().ToString()
|
||||
};
|
||||
|
||||
string boundary = "---8d0f01e6b3b5dafaaadaad";
|
||||
MultipartFormDataContent formDataContent = new MultipartFormDataContent(boundary);
|
||||
formDataContent.Add(fileContent);
|
||||
|
||||
var response = await client.PostAsync("http://10.0.2.2:5001/api/Image/Process", formDataContent);
|
||||
if (response.StatusCode == HttpStatusCode.OK)
|
||||
{
|
||||
var jsonString = await response.Content.ReadAsStringAsync();
|
||||
dynamic jsonObject = JsonConvert.DeserializeObject(jsonString);
|
||||
FindViewById<TextView>(Resource.Id.ErrorPhoto).Text = "Przesłano zdjęcie!";
|
||||
SetContentView(Resource.Layout.ekranZLinkami);
|
||||
var second_response = await client.GetAsync("http://10.0.2.2:5001/api/Search", jsonObject.response);
|
||||
if (second_response.StatusCode == HttpStatusCode.OK)
|
||||
{
|
||||
var second_jsonString = await response.Content.ReadAsStringAsync();
|
||||
dynamic second_jsonObject = JsonConvert.DeserializeObject(second_jsonString);
|
||||
|
||||
List<SearchResult> fullLink = JsonConvert.DeserializeObject<List<SearchResult>>(second_jsonObject);
|
||||
|
||||
int end = 10;
|
||||
if (fullLink.Count < 10) end = fullLink.Count;
|
||||
for (int i = 0; i < end; i++)
|
||||
{
|
||||
FindViewById<TextView>(Resource.Id.links).Text = FindViewById<TextView>(Resource.Id.links).Text + fullLink[i].Title + ": " + fullLink[i].Link + "\n\n";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
FindViewById<TextView>(Resource.Id.links).Text = "Coś poszło nie tak!";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
string msg = await response.Content.ReadAsStringAsync();
|
||||
FindViewById<TextView>(Resource.Id.ErrorPhoto).Text = msg;
|
||||
}
|
||||
}
|
||||
|
||||
using(var imageStream = ContentResolver.OpenInputStream(photo.Data))
|
||||
using(var stramContent = new StreamContent(imageStream))
|
||||
using(var byteArrayContent = new ByteArrayContent(await stramContent.ReadAsByteArrayAsync()))
|
||||
|
@ -36,6 +36,7 @@
|
||||
<BundleAssemblies>false</BundleAssemblies>
|
||||
<MandroidI18n />
|
||||
<Debugger>Xamarin</Debugger>
|
||||
<AndroidSupportedAbis />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
@ -177,6 +178,9 @@
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable\Obraz4.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\xml\file_paths.xml" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
|
||||
<ProjectExtensions>
|
||||
<VisualStudio>
|
||||
|
@ -1,7 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.Klient.Android" android:installLocation="preferExternal">
|
||||
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.Klient.Android" android:installLocation="internalOnly">
|
||||
<uses-sdk android:minSdkVersion="28" android:targetSdkVersion="27" />
|
||||
<application android:label="Klient.Android" android:usesCleartextTraffic="true" android:theme="@style/Base.Theme.AppCompat.Light.DarkActionBar" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
</manifest>
|
1032
Klient/Klient/Klient.Android/Resources/Resource.designer.cs
generated
1032
Klient/Klient/Klient.Android/Resources/Resource.designer.cs
generated
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<paths xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<cache-path name="my_images"
|
||||
path="path" />
|
||||
</paths>
|
Loading…
Reference in New Issue
Block a user