【问题标题】:How to Close activity ( Still_Image_Camera intent ) in Xamarin.Forms如何在 Xamarin.Forms 中关闭活动( Still_Image_Camera 意图)
【发布时间】:2019-09-03 09:29:08
【问题描述】:

我正在开发一个应用程序,它的工作原理是“当我连续拍摄 2 张​​照片时,相机会关闭”

所以我使用“MediaStore.IntentActionStillImageCamera”启动相机 并且可以连续拍照。

使用 Fileobserver,我可以计算拍摄了多少照片。

最后是当条件为真时我必须自动关闭相机而不采取任何行动。 但是,我尝试了 process.kill、activity.finishactivity .... 都失败了。。

如何自动关闭相机应用程序?在 Android 9.0 中

--代码修改----

所有代码都在 Application.Android 中的 Xamarin.Forms 中

// 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);
}

【问题讨论】:

    标签: c# android xamarin.forms xamarin.android


    【解决方案1】:
    activity.FinishActivity(0);
    

    尝试将其更改为:

    MainActivity.Instance.FinishActivity(0);
    

    我延迟模拟了你的场景,它成功了:

    在 page.xaml.cs 中:

    public partial class MainPage: ContentPage
    {
        public MainPage()
        {
            InitializeComponent ();
    
        }
    
        private void Button_Clicked(object sender, EventArgs e)
        {
            DependencyService.Get<IStartAndCloseCamera>().Open();
        }
    }
    

    接口IStartAndCloseCamera.cs

    public interface IStartAndCloseCamera
    {
        void Open();
    }
    

    在 Android 项目 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);
    
                }
            });
    
        }
       }
    }
    

    【讨论】:

    • @이정원 是您上面在 MainActivity 中显示的所有代码吗?
    • @이정원 让我们谈谈here
    • 我的声望不到 20,所以我不能说话 :(
    • @이정원 好的,您在哪里调用 ExitActivity 方法?在您的 OtherClass.cs 中?
    • ExitActivity 在按钮中从 MainPage.xaml.cs 调用,整个进度是 1. 启动 MainPage.Xaml 2. 当我单击按钮时,StartActivity(Still_IMAGE_CAMERA),3. 当我拍照时,计数照片使用 fileobserver 4. 当 fileobserver 中的条件为真时,调用 ExitActivity
    【解决方案2】:

    尝试使用两种替代方式:

    1. 使用当前上下文设置finish();
    2. 设置setResult(Activity.RESULT.CANCELLED);

    【讨论】:

    • 我试过了,主应用程序已经完成,但相机仍在工作。所以当我关闭相机时,mainapp 被初始化
    猜你喜欢
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2023-02-02
    相关资源
    最近更新 更多