#Region Project Attributes
#ApplicationLabel: Emad Camera
#VersionCode: 1
#VersionName:
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
#End Region
#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region
Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
End Sub
Sub Globals
'These global variables will be redeclared each time the activity is created.
'These variables can only be accessed from this module.
Private strShared As String
Private kvs As KeyValueStore
Private ion As Object
Private const tempImageFile As String = "tempimage.jpg"
Private imageFolder As String
End Sub
Sub Activity_Create(FirstTime As Boolean)
'Do not forget to load the layout file created with the visual designer. For example:
Activity.LoadLayout("Main")
' CallSubDelayed(TheCamera,"Activity_Create")
InitializeObjects
SetupSettingsDatabase
If FirstTime Then
imageFolder = Starter.rp.GetSafeDirDefaultExternal("shared") 'shared folder as set in the manifest editor
End If
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
' Misc sub routines.
'-------------------
Sub SetupSettingsDatabase
' kvs.DeleteAll
If kvs.ContainsKey("FileNumberCount") = False Then ' This setting needs to be created.
kvs.Put("FileNumberCount", 1)
End If
End Sub
Sub InitializeObjects
strShared = Starter.rp.GetSafeDirDefaultExternal("Settings")
kvs.Initialize(strShared, "Settings")
End Sub
' Misc. sub routines from the forum.
'-----------------------------------
Sub GetBA As Object
Dim jo As JavaObject
Dim cls As String = Me
cls = cls.SubString("class ".Length)
jo.InitializeStatic(cls)
Return jo.GetField("processBA")
End Sub
Sub ShowCamera
Dim i As Intent
i.Initialize("android.media.action.IMAGE_CAPTURE", "")
Dim p As Phone
Dim u As Object
If p.SdkVersion < 24 Then
Dim uri As Uri
uri.Parse("file://" & File.Combine(imageFolder, tempImageFile))
u = uri
Else
u = CreateFileProviderUri(imageFolder, tempImageFile)
End If
i.PutExtra("output", u) 'the image will be saved to this path
Try
StartActivityForResult(i)
Catch
ToastMessageShow("Camera is not available.", True)
Log(LastException)
End Try
End Sub
Sub StartActivityForResult(i As Intent)
Dim jo As JavaObject = GetBA
ion = jo.CreateEvent("anywheresoftware.b4a.IOnActivityResult", "ion", Null)
jo.RunMethod("startActivityForResult", Array As Object(ion, i))
End Sub
Sub CreateFileProviderUri (Dir As String, FileName As String) As Object
Dim FileProvider As JavaObject
Dim context As JavaObject
context.InitializeContext
FileProvider.InitializeStatic("android.support.v4.content.FileProvider")
Dim f As JavaObject
f.InitializeNewInstance("java.io.File", Array(Dir, FileName))
Return FileProvider.RunMethod("getUriForFile", Array(context, Application.PackageName & ".provider", f))
End Sub
'result arrives here
Sub ion_Event (MethodName As String, Args() As Object) As Object
Dim intFileCount As Int = kvs.Get("FileNumberCount")
File.Copy(imageFolder, tempImageFile, GetExternalStoragePublicDirectory("DCIM") & _
"/Camera", "Synventive" & intFileCount & ".jpg")
kvs.Put("FileNumberCount", intFileCount +1)
File.Delete(imageFolder, tempImageFile)
Return Null
End Sub
Sub GetExternalStoragePublicDirectory (name As String) As String
Dim jo As JavaObject
jo.InitializeStatic("android.os.Environment")
Dim path As Object = jo.RunMethod("getExternalStoragePublicDirectory", Array(name))
If path = Null Or File.Exists(path, "") = False Then
Log("No such folder.")
Return ""
End If
Log("The path: " & path)
Return path
End Sub
' Event handlers.
'----------------
Sub ButtonOpenCamera_Click
If Starter.rp.Check(Starter.rp.PERMISSION_CAMERA) And Starter.rp.Check( Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE) Then
ShowCamera
Else
Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_CAMERA)
Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
End If
End Sub
Sub ButtonExit_Click
Dim i As Intent
i.Initialize(i.ACTION_MAIN, "")
i.AddCategory("android.intent.category.HOME")
i.Flags = 0x10000000
StartActivity(i)
End Sub