繁体   English   中英

使用应用程序之间的隐式意图的自定义操

[英]Custom actions using implicit intents between applications

我一直在尝试在两个单独的应用程序中获取两个活动,以使用自定义操作和隐式意图进行通信。

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

<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无法识别第二个应用程序中声明的活动? 谢谢。

经过深思熟虑,这是我发现的:

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

但是,在定义自定义操作包含数据字段时,必须手动为附加的URI设置mime-type Android文档声称

通常,类型是从数据本身推断出来的。 通过设置此属性,可以禁用该评估并强制显式类型。

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

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

首先,您只能指定要转到的应用程序; 你不能指定去哪个活动; 我已经回答了如何导航到另一个应用程序在这里 ; 之后你的控制权转到另一个应用程序; 你必须在那里处理它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM