使用应用程序之间的隐含意图自定义操作(Custom actions using implicit i

2019-09-22 05:05发布

我一直在试图让两个独立的应用程序的两项活动使用自定义操作和隐含的意图进行沟通。

第一个应用程序(服务器),具有以下明显的:

<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);

它的表现是正常的。 当我尝试发送意图的客户端应用程序,但是,我得到一个未发现异常活动:

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无法识别在第二个应用程序申报活动? 谢谢。

Answer 1:

经过一番寻找,这里是我的发现:

当您使用内置的动作类型和附加数据字段当您使用自定义操作类型没有数据字段,一个intent-filter没有一个data元素就可以了。

然而,当定义自定义动作,并且包括一个数据字段时,必须手动设置mime-type为附加的URI。 在Android文档声称,

通常类型是从数据本身推断。 通过设置这个属性,您禁用评估和强制显式类型。

但事实并非如此。 当我把一个file:// URI其在截至.txt ,Android的分配一个null mime-type ,所以它不会匹配任何 intent-filter ,甚至是一个具有data*/* mime-type 。 我需要手动设置意图的使用类型setDataAndType()

总之 :您必须手动定义意图的mime-type使用与数据的自定义操作时。



Answer 2:

首先,你可以指定只哪个应用程序去; 你不能指定去哪个活性起着; 我已经回答了如何导航到另一个应用程序在这里 ; 之后,你的控制转到其他应用程序; 你必须有处理它



文章来源: Custom actions using implicit intents between applications