onActivityResult 从未从启动的小部件中调用 activity
onActivityResult never called from widget launched activity
我是新来的。我发现了 Whosebug 的工作原理。
我正在创建一个新的 android 主屏幕小部件。我的小部件有一个按钮。按下时,它会启动一个 activity(它不是一个配置 Activity,只是一个标准的 activity)。在这个 activity 中,我有一个测试按钮。我的目的是在按下这个测试按钮后创建一个文本文件。
在 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;
}
}
onActivity永远不会调用结果。
我把这段代码放在我的 MainActivity 中,它工作得很好。
我不知道如何实现...
好像不可能。
我的实现方式:
- 我的小部件像往常一样启动它的 activity(不是 MainActivity),并且有一个功能提供了创建文件的可能性。
- 此 activity 中的按钮使用操作代码创建一个新意图,并启动 MainActivity。
- MainActivity 使用操作代码来决定要做什么:执行创建文件的代码。
- MainActivity 有一个 onActivityResult 在用户选择文件名和目录时调用。
我是新来的。我发现了 Whosebug 的工作原理。
我正在创建一个新的 android 主屏幕小部件。我的小部件有一个按钮。按下时,它会启动一个 activity(它不是一个配置 Activity,只是一个标准的 activity)。在这个 activity 中,我有一个测试按钮。我的目的是在按下这个测试按钮后创建一个文本文件。
在 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;
}
}
onActivity永远不会调用结果。
我把这段代码放在我的 MainActivity 中,它工作得很好。
我不知道如何实现...
好像不可能。
我的实现方式:
- 我的小部件像往常一样启动它的 activity(不是 MainActivity),并且有一个功能提供了创建文件的可能性。
- 此 activity 中的按钮使用操作代码创建一个新意图,并启动 MainActivity。
- MainActivity 使用操作代码来决定要做什么:执行创建文件的代码。
- MainActivity 有一个 onActivityResult 在用户选择文件名和目录时调用。