我一直在尝试在两个独立的应用程序中使用自定义操作和隐式意图进行通信。
第一个应用程序(服务器)具有以下清单:
<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>
第二个应用程序按如下方式创建意图:
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);
它的表现是正常的。但是,当我尝试在客户端应用程序中发送intent时,我得到一个未找到活动的异常:
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无法识别第二个应用程序中声明的活动?感谢。
答案 0 :(得分:6)
经过多看,这就是我发现的:
使用内置操作类型并在使用自定义操作类型且没有数据字段时附加数据字段或 ,没有intent-filter
元素的data
即可。
但是,当您定义自定义操作和包含数据字段时,您必须手动为附加的URI设置mime-type
。 Android documentation声称
通常,类型是从数据本身推断出来的。通过设置此属性,可以禁用该评估并强制显式类型。
但事实并非如此。当我输入以file://
结尾的.txt
URI时,Android为其指定了空mime-type
,因此它与任何 intent-filter
都不匹配,即使是data
和*/*
mime-type
的人。我需要使用setDataAndType()
手动设置意图的类型。
简而言之:在对数据使用自定义操作时,必须手动定义意图mime-type
。
答案 1 :(得分:0)
首先,您只能指定要转到的应用程序;你不能指定去哪个活动;我已经回答了如何导航到另一个应用here;之后你的控制权转到另一个应用程序;你必须在那里处理