5

単一または複数のファイルまたはフォルダーをアップロードできるアプリを作成しています。インテントフィルターは次のように定義されます。

    <activity android:name=".UploadActivity" android:launchMode="singleTop" android:theme="@style/Theme.Sherlock">
        <intent-filter android:label="@string/upload_intent">
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:mimeType="application/*" />
            <data android:mimeType="audio/*" />
            <data android:mimeType="image/*" />
            <data android:mimeType="media/*" />
            <data android:mimeType="multipart/*" />
            <data android:mimeType="text/*" />
            <data android:mimeType="video/*" />
        </intent-filter>
        <intent-filter android:label="@string/upload_intent">
            <action android:name="android.intent.action.SEND_MULTIPLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:mimeType="*/*" />
        </intent-filter>
    </activity>

これは、BlackmoonファイルエクスプローラーとAndroid4.0.3ギャラリーでうまく機能します。私のアプリは共有メニューに表示されます。ただし、URLを長押ししてページの共有を選択すると、ブラウザにも表示されます。

アプリにテキストファイルを送信すると、次のようになります。

getIntent().getAction() returns Intent.ACTION_SEND
getIntent().getType() returns "text/plain"
getIntent().getScheme() returns null
getIntent().getExtras().getString(Intent.EXTRA_STREAM) returns the filename

ただし、ブラウザからURLを送信すると、Intent.EXTRA_STREAMを除いた同じものが返されます。これはコードで簡単に検出でき、「テキストをアップロードできません!」と言うことができます。ただし、EXTRA_STREAMがある場合にのみトリガーされるように、インテントフィルターを変更したいと思います。そうすることは可能ですか?

(android:schemeを使用してみましたが、ファイルと共有されているテキスト文字列はどちらもnullであるため、区別されません...)

4

2 に答える 2

3

あなたが持っている:

getIntent().getExtras().getString(Intent.EXTRA_STREAM) returns the filename

私の知る限り、Androidは開いているfhまたはソケットをファイルに送信することはありません。ファイルへの単純な古いパスだけで、次のように処理します。

File somefile = new File(filename);

そして、それを読んだり書いたりします。

着信テキストが EXTRA_TEXT または STREAM である場合は、両方をテストして適切に処理します。お役に立てれば。

于 2014-01-04T22:55:40.780 に答える