26

私のアプリは TCP 接続を介してファイル (すべての MIME タイプ) を送信するため、アプリを Android 共有メニューに表示したいと考えていました。

次のインテント フィルターをアクティビティに追加しましたAndroidManifest.xml

<intent-filter ><!--intent filter for single file sharing-->
    <action android:name="android.intent.action.SEND" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="*/*" />
</intent-filter>
<intent-filter ><!--intent filter for sharing multiple files-->
    <action android:name="android.intent.action.SEND_MULTIPLE" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="*/*" />
</intent-filter>

Activityこれを、共有アクションをクリックすると起動するに追加しました

Intent intent = getIntent();
if (Intent.ACTION_SEND.equals(intent.getAction())) {
    Uri uri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
    if (uri != null) {
        fileset = new HashSet();
        fileset.add(getPathfromUri(uri));
    }
} else if (Intent.ACTION_SEND_MULTIPLE.equals(intent.getAction())) {
    ArrayList<Uri> uris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
    if (uris != null) {
        fileset = new HashSet();
        for(Uri uri : uris) {
            fileset.add(getPathfromUri(uri));
        }
    }
}

このメソッドを使用して、共有するファイルの絶対パスを生成します。

public String getPathfromUri(Uri uri) {
    if(uri.toString().startsWith("file://")) {
         return uri.getPath();
    }
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    startManagingCursor(cursor);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    String path= cursor.getString(column_index);
    //cursor.close();
    return path;
}

上記の方法は、画像/ビデオおよびその他のファイルの絶対パスを適切に取得します.見逃したものはありますか、それともこれを行うためのより良い方法はありますか?

メニューに加えて、私の電話 Shareにはメニューがあります。Send Viaスクリーンショット

私のアプリをこのリストに入れる方法はありますか?

4

3 に答える 3

5

メニューに入る方法をここに概説しました:

http://blog.blundellapps.com/add-your-app-to-the-android-menu/

基本的には、あなたの mimetype /を持っています:

        <intent-filter>
            <action android:name="android.intent.action.GET_CONTENT" />

            <category android:name="android.intent.category.DEFAULT" />

            <data android:mimeType="*/*" />
        </intent-filter>

それを行っても表示されない場合は、彼らがインテント メニューを使用していることを意味し、それはカスタム共有リストであるため、強制的に侵入することはできません。

于 2012-12-20T09:33:06.163 に答える
3

アプリの外から画像を共有していると思います。インテントファイラーで minetype を定義してください。それは私の側でうまくいっています。

<activity
            android:name=".SharePhotoFromOutSide"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" >
            <intent-filter>
                <action android:name="android.intent.action.SEND" />

                <category android:name="android.intent.category.DEFAULT" />

                <data android:mimeType="photo/*" />
            </intent-filter>
        </activity>
于 2013-11-05T07:46:01.247 に答える
1

私はこの問題に対処しようとしましたが、samsung のギャラリーがそのメニューを介して共有するためのカスタム アクションを使用していることは確かです。リストされているすべてのアプリケーションがプリインストールされていることを考慮すると、Samsung がリストされているすべてのアプリケーション開発者とカスタム インテント アクションを使用することに同意したことは明らかです。

Samsungにも連絡しようとしましたが、まだ返信がありません。

于 2012-12-20T09:05:27.857 に答える