gpt4 book ai didi

android - 在应用程序之间使用隐式 Intent 的自定义操作

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:53:24 25 4
gpt4 key购买 nike

我一直在尝试让两个单独的应用程序中的两个 Activity 使用自定义操作和隐式 Intent 进行通信。

第一个应用程序(服务器)具有以下 list :

<application android:icon="@drawable/ic_launcher"
android:label="@string/app_name" android:theme="@style/AppTheme">
<activity android:name="edu.example.sharing.manager.SecureFileShare"
android:label="@string/title_activity_secure_file_share" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="edu.example.sharing.action.STORE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="*/*" />
</intent-filter>
</activity>
</application>

第二个应用程序创建一个 Intent 如下:

File f = new File(s);
Uri fileUri = Uri.fromFile(f);
Intent intent = new Intent();
intent.setData(fileUri);
intent.setAction("edu.example.sharing.action.STORE");
startActivityForResult(intent, STORE_REQUEST);

它的 list 是正常的。然而,当我尝试在客户端应用程序中发送 Intent 时,我收到一个 Activity 未找到异常:

FATAL EXCEPTION: main
android.content.ActivityNotFoundException: No Activity found to handle Intent {act=edu.example.sharing.action.STORE dat=file:///storage/sdcard0/Download/Alarcon12-Rigoberto.pdf }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1545)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1416)
at android.app.Activity.startActivityForResult(Activity.java:3351)
at android.app.Activity.startActivityForResult(Activity.java:3312)

是什么导致 Android 无法识别第二个应用程序中声明的 Activity ?谢谢。

最佳答案

经过大量查找,这是我的发现:

当您使用内置操作类型并附加数据字段时当您使用没有数据字段的自定义操作类型时,没有 data 元素的 intent-filter 是可以的。

但是,当您定义自定义操作包含数据字段时,您必须为附加的 URI 手动设置 mime-typeAndroid documentation声称

Normally the type is inferred from the data itself. By setting this attribute, you disable that evaluation and force an explicit type.

但事实并非如此。当我输入以 .txt 结尾的 file:// URI 时,Android 为它分配了一个空的 mime-type,所以它不会t 匹配任何 intent-filter,即使是带有data*/* mime-type 的。我需要使用 setDataAndType() 手动设置 Intent 的类型。

简而言之:在对数据使用自定义操作时,您必须手动定义 Intent 的mime-type

关于android - 在应用程序之间使用隐式 Intent 的自定义操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12297407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com