Android Question Open the default camera App

ElliotHC

Active Member
Licensed User
I want to open the default camera App (not the camera in my own app)

B4X:
#Region  Project Attributes
    #ApplicationLabel: B4A Example
    #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.
    Dim Pm As PackageManager 'Phone library
    Dim Inte As Intent
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.
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("Layout1")
    For Each st As String In Pm.GetInstalledPackages
        Log(st)
        If st.Contains("camera") =True Then
          
            Inte=Pm.GetApplicationIntent(st)
  
            If Inte.IsInitialized Then StartActivity(Inte)
            Exit
        End If
    Next
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
For some reason it won't open, I suspect it's because it's not initialized.
 

DonManfred

Expert
Licensed User
For Each st As String In Pm.GetInstalledPackages
Log(st)
If st.Contains("camera") =True Then

Inte=Pm.GetApplicationIntent(st)

If Inte.IsInitialized Then StartActivity(Inte)
Exit
End If
Next
Start with debugging. LOG ALL apps returning.
There may be more that just ONE which contains the string camera.

B4X:
    For Each st As String In Pm.GetInstalledPackages
        If st.Contains("camera") =True Then
        Log(st)
        End If
    Next
End Sub
What does the log output?
 

ElliotHC

Active Member
Licensed User
Start with debugging. LOG ALL apps returning.
There may be more that just ONE which contains the string camera.

B4X:
    For Each st As String In Pm.GetInstalledPackages
        If st.Contains("camera") =True Then
        Log(st)
        End If
    Next
End Sub
What does the log output?
Yes, that's in my code.

upload_2019-8-11_10-36-44.png
 

ElliotHC

Active Member
Licensed User
If the app is not starting then i guess there is no valid ApplicationIntent returned.
Based on you last post the app is listed twice.
Check both of them if they provide a valid ApplicationIntent
It's not listed twice, I'm just logging it again if it appears.. Check the code, there is also one in side the If contains
 

ElliotHC

Active Member
Licensed User
Erel, does the Intent based camera just open the built in camera app? I need to take a super slow motion video clip using it.. I don't see how Intent Based Camera will do that for me?
 

ElliotHC

Active Member
Licensed User
I've got it set so that when I double tap the power button it launches the camera.. Perhaps I can simulate that to achieve this? It's seems like everything is against me trying to use the camera here.
 

ElliotHC

Active Member
Licensed User
It would seem this issue is that the default camera is not Initialized.

B4X:
    For Each st As String In Pm.GetInstalledPackages
        Log(st)
        If st.Contains("camera") =True Then

            Inte=Pm.GetApplicationIntent(st)
            Inte.Initialize("??","??")
           
            If Inte.IsInitialized Then StartActivity(Inte)
            Exit
        End If
    Next
Would it be Inte.Initialize("",st) ?

Or perhaps I need to allow runtime permissions

PERMISSION_CAMERA?
 
Last edited:

ElliotHC

Active Member
Licensed User
The intent based camera example will open the default camera app. If there is no default set then it will ask the user to select an app.

If you want the user to always select the app then call Intent.WrapAsIntentChooser.
I can get the project to open the default camera but it either opens in the camera mode or standard video mode. I need to it open without selecting either as I have the camera set to always open in the last mode used. In my case it's Super Slow-Mo.

Using:


B4X:
i.Initialize("android.media.action.VIDEO_CAPTURE", "")
Opens the Video camera only letting me start the recording by pressing record.

B4X:
i.Initialize("android.media.action.VIDEO_CAMERA", "")
Opens the camera, selects standard video and starts recording.

Is there a android.media.action.DEFAULT_CAMERA or something like that?

I need it to open in the last mode or in slow-mo mode but without recording.
 
Top