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

问题描述 投票:0回答:1

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

我正在创建一个新的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中,并且效果很好。

我不知道该如何实现...

android android-intent android-widget android-fileprovider
1个回答
0
投票

这似乎是不可能的。

我实现这一目标的方式:-1:我的小部件像往常一样开始其活动(不是MainActivity),并且其中一项功能可以创建文件。-2:此活动中的按钮创建一个具有操作代码的新意图,并启动MainActivity。-3:MainActivity使用动作代码来决定要做什么:执行代码来创建文件。-4:MainActivity在用户选择文件名和目录时调用了onActivityResult。

© www.soinside.com 2019 - 2024. All rights reserved.