onActivityResult 从未从小部件启动的活动中调用

Posted

技术标签:

【中文标题】onActivityResult 从未从小部件启动的活动中调用【英文标题】:onActivityResult never called from widget launched activity 【发布时间】:2020-09-11 19:57:18 【问题描述】:

我是新来的。我发现了 *** 的工作原理。

我正在创建一个新的 android 主屏幕小部件。我的小部件有一个按钮。按下时,它会启动一个活动(它不是配置活动,只是一个标准活动)。在这个活动中,我有一个测试按钮。我的目的是在按下这个测试按钮后创建一个文本文件。

在 onCreate 函数中,我有这段代码来处理按钮:

final Button testButton = findViewById(R.id.button_test);
    test.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            ActivityCompat.requestPermissions(WidgetActivity.this, new String[]Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    Utils.MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);

            String fileName = "test.txt";
            Intent exportIntent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
            exportIntent.addCategory(Intent.CATEGORY_OPENABLE);
            exportIntent.setType("text/plain");
            exportIntent.putExtra(Intent.EXTRA_TITLE, fileName);
            startActivityForResult(exportIntent, FILE_EXPORT_REQUEST_CODE);
        
    );

我有这个功能:

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) 

    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode != RESULT_OK)
        return;

    switch (requestCode) 
        case FILE_EXPORT_REQUEST_CODE:
            if (data != null) 
                Uri uri = data.getData();
                if (uri != null) 
                    Context c = WidgetActivity.this;

                    ParcelFileDescriptor pfd = null;
                    try 
                        pfd = c.getContentResolver().openFileDescriptor(uri, "w");
                        Preferences.export(mAppWidgetId, pfd.getFileDescriptor(), WidgetActivity.this);
                     catch (FileNotFoundException e) 
                        e.printStackTrace();
                    

                
            
            break;
    

onActivityResult 永远不会被调用。

我把这段代码放在我的MainActivity中,效果很好。

我不知道如何实现这个...

【问题讨论】:

【参考方案1】:

这似乎是不可能的。

我实现这一目标的方式:

    我的小部件像往常一样启动它的活动(而不是 MainActivity),其中一项功能提供了创建文件的可能性。 此活动中的按钮使用操作代码创建一个新意图,并启动 MainActivity。 MainActivity 使用操作代码来决定做什么:执行代码来创建文件。 当用户选择文件名和目录时,MainActivity 会调用 onActivityResult。

【讨论】:

以上是关于onActivityResult 从未从小部件启动的活动中调用的主要内容,如果未能解决你的问题,请参考以下文章

Fragment 中的 onActivityResult 从未调用过

从小部件启动对话框无法正常工作

从小部件启动/停止服务

当小部件具有配置活动时,无法从小部件启动活动

从小部件启动活动

如何从小部件启动对话框?