12

カスタムアクションと暗黙のインテントを使用して通信するために、2 つの別々のアプリケーションで 2 つのアクティビティを取得しようとしています。

最初のアプリケーション (サーバー) には、次のマニフェストがあります。

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

2 番目のアプリケーションは、次のようにインテントを作成します。

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 が 2 番目のアプリケーションで宣言されたアクティビティを認識しない原因は何ですか? ありがとう。

4

2 に答える 2

9

よく見た後、ここに私が見つけたものがあります:

組み込みアクション タイプを使用してデータ フィールドをアタッチする場合、またはカスタムアクション タイプをデータ フィールドなしで使用する場合はintent-filterdata要素なしで OK です。

ただし、カスタム アクションを定義してデータ フィールドを含める場合は、アタッチされた URI を手動で設定する必要がありますmime-typeAndroidのドキュメントは、

通常、型はデータ自体から推測されます。この属性を設定すると、その評価が無効になり、明示的な型が強制されます。

しかし、そうではありません。file://で終わる URI を入力すると、Android.txtはそれに null を割り当てたmime-typeので、どの . を使用してインテントのタイプを手動で設定する必要がありました。intent-filterdata*/* mime-typesetDataAndType()

つまり、データでカスタム アクションを使用する場合は、インテントを手動で定義する必要があります。mime-type

于 2012-09-07T10:01:35.993 に答える
1

まず、どのアプリケーションに移動するかのみを指定できます。どのアクティビティに移動するかを指定することはできません。ここで別のアプリに移動する方法については既に回答しています。その後、あなたのコントロールは他のアプリに行きます。そこで処理する必要があります

于 2012-09-06T10:06:29.660 に答える