0

I'm developing a app, it works "when i take 2 photos with continously, camera will close"

so i launch the camera with "MediaStore.IntentActionStillImageCamera" and it can take photo continuously.

and with Fileobserver, i can count How much photo was took.

The last is i have to close camera automatically with no action when condition is true. but, i tried process.kill, activity.finishactivity.... all failed..

How can I close camera app automatically? in Android 9.0

--code modified ----

all code is in Xamarin.Forms in Application.Android

// MainActivity.cs ( common code is removed )
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    internal static MainActivity Instance { get; private set; }
    protected override void OnCreate(Bundle savedInstanceState)
    {
        Instance = this;
        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
        LoadApplication(new App());
    }
}

//OtherClass.cs ( i launch camera app with intent )
public void TakePictureAsync()
{
    Intent intent = new Intent(MediaStore.IntentActionStillImageCamera);
    MainActivity.Instance.StartActivityForResult(intent, 0);
}
//OtherClass.cs ( close activity )

public void ExitActivity()
{
    MainActivity.Instance.FinishActivity(0);
}
Fábio Nascimento
  • 2,644
  • 1
  • 21
  • 27
이정원
  • 45
  • 6

2 Answers2

1
activity.FinishActivity(0);

try to change it to :

MainActivity.Instance.FinishActivity(0);

I simulated your scene with a delay, and it worked:

in page.xaml.cs:

public partial class MainPage: ContentPage
{
    public MainPage()
    {
        InitializeComponent ();

    }

    private void Button_Clicked(object sender, EventArgs e)
    {
        DependencyService.Get<IStartAndCloseCamera>().Open();
    }
}

interface IStartAndCloseCamera.cs :

public interface IStartAndCloseCamera
{
    void Open();
}

in Android poject AndroidStartAndCloseCamera.cs:

[assembly: Dependency(typeof(AndroidStartAndCloseCamera))]
namespace App18.Droid
{
  private int sec = 20;
  System.Threading.Timer _dispatcherTimer;
  class AndroidStartAndCloseCamera : IStartAndCloseCamera
    {
      public void Open()
       {
        TimerCallback timerDelegate = new TimerCallback(Tick);
        Intent intent1 = new Intent(MediaStore.IntentActionStillImageCamera);
        MainActivity.Instance.StartActivityForResult(intent1, 0);
        _dispatcherTimer = new System.Threading.Timer(timerDelegate, null, 0, 1000);
        return true;
       }

    private void Tick(object state)
    {          
       MainActivity.Instance.RunOnUiThread(() =>
        {
            if (sec > 0)
            {
                sec--;
            }
            else
            {
                _dispatcherTimer.Dispose();
                MainActivity.Instance.FinishActivity(0);

            }
        });

    }
   }
}
Leo Zhu
  • 15,726
  • 1
  • 7
  • 23
0

Try to use 2 alternatives way:

  1. Set finish(); with use of current context
  2. Set setResult(Activity.RESULT.CANCELLED);
Hasta Dhana
  • 4,699
  • 7
  • 17
  • 26
MIC
  • 111
  • 5
  • i tried it, Main app is finished, but camera is still working. so when i close the camera, mainapp is initalized – 이정원 Sep 02 '19 at 08:20