37
<action android:name="android.intent.action.SEND" />     
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />

これは私のマニフェストファイルにあります

これにより、自分のアプリがすべてのアプリの共有リストに表示されますが、自分のアプリを別の特定のアプリの共有リストに表示したいのですが、他のアプリを所有していません

4

7 に答える 7

18

アプリの外部からコンテンツを共有するときに最初に開きたいアクティビティにこのコードを追加し、onCreate()でこのメソッドを呼び出します

private void onSharedIntent() {
    Intent receiverdIntent = getIntent();
    String receivedAction = receiverdIntent.getAction();
    String receivedType = receiverdIntent.getType();

    if (receivedAction.equals(Intent.ACTION_SEND)) {

        // check mime type 
        if (receivedType.startsWith("text/")) {

            String receivedText = receiverdIntent
                    .getStringExtra(Intent.EXTRA_TEXT);
            if (receivedText != null) {
                //do your stuff
            }
        }

        else if (receivedType.startsWith("image/")) {

            Uri receiveUri = (Uri) receiverdIntent
                    .getParcelableExtra(Intent.EXTRA_STREAM);

            if (receiveUri != null) {
                //do your stuff
                fileUri = receiveUri;// save to your own Uri object

                Log.e(TAG,receiveUri.toString());
            }
        }

    } else if (receivedAction.equals(Intent.ACTION_MAIN)) {

        Log.e(TAG, "onSharedIntent: nothing shared" );
    }
}

これをマニフェストに追加し、

 <activity
            android:name="your-package-name.YourActivity">
            <intent-filter>
                <action android:name="android.intent.action.SEND" /> 

                <category android:name="android.intent.category.DEFAULT" />      
                <data android:mimeType="image/*" />
                <data android:mimeType="text/*" />
            </intent-filter>
        </activity>
于 2018-12-23T10:28:56.023 に答える
13

これを行うには、アプリケーションが作成しているインテントを認識し、アプリケーションを特定のリストに追加するIntentFilterを作成する必要があります。

インテントとフィルターで暗黙のインテントを受信する

アプリケーションはおそらく、フックできる特定のアクション名を使用します。

<intent-filter . . . >
    <action android:name="com.example.project.SHOW_CURRENT" />
    <action android:name="com.example.project.SHOW_RECENT" />
    <action android:name="com.example.project.SHOW_PENDING" />
    . . .
</intent-filter>

または、特定の種類のファイルを受け入れるアプリケーションを探している可能性があります。

<intent-filter . . . >
    <data android:mimeType="video/mpeg" android:scheme="http" . . . /> 
    <data android:mimeType="audio/mpeg" android:scheme="http" . . . />
    . . .
</intent-filter>

アプリケーションの名前とそれが共有しているものは、より具体的な応答をするのに役立ちます。

于 2012-06-19T18:10:03.447 に答える
13

ここに画像の説明を入力してください-以下のコードを特定のアクティビティのプロジェクトAndroidManifest.xmlファイルに追加します。

     <activity
                android:name=".MainActivity"
                android:theme="@style/Theme.AppCompat.Light.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/plain" />
            </intent-filter>
     </activity>

-プロジェクト固有のアクティビティに次のコード行を追加します。

    Intent intent = getIntent();
    String action = intent.getAction();
    String type = intent.getType();
    if ("android.intent.action.SEND".equals(action) && type != null && "text/plain".equals(type)) {
                Log.println(Log.ASSERT,"shareablTextExtra",intent.getStringExtra("android.intent.extra.TEXT"));
            }
于 2019-03-07T06:26:22.203 に答える
8

これをmainefistファイルに追加します

<activity android:name=".ShareActivity">
<intent-filter
    android:label="Share with my app">
    <action android:name="android.intent.action.SEND" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

このリンクはあなたを助けるかもしれません

于 2014-03-23T13:01:31.343 に答える
8

これは、すべてのWebページを取得する場合、Webページ上のmp3ファイルをスキャンし、それらからアラームを設定するアプリの場合にうまく機能しました。Webページを共有すると、新しいURLアクティビティが開きます。

このコードの結果は次のとおりです。 ここに画像の説明を入力してください

  <activity
        android:name=".NewUrl"
        android:label="@string/title_activity_new_url"
        android:windowSoftInputMode="stateUnchanged">
        <intent-filter>
            <action android:name="android.intent.action.SEND"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <data android:mimeType="text/*"/>
        </intent-filter>
    </activity>

次に、アプリでリンクを受け取るために、このチュートリアルから素晴らしい情報を取得しました:http: //code.tutsplus.com/tutorials/android-sdk-receiveing-data-from-the-send-intent--mobile-14878

于 2016-08-06T01:47:54.000 に答える
3

上記の答えに何か付け加えたいと思います。アクティビティで複数のカテゴリを使用している場合にオーバーライドを防ぐために、別のインテントフィルタを配置する必要があることに注意してください。

たとえば、次の場合、アプリケーションはランチャーアクティビティとして検出されないため、デバイスのアプリケーションリストに表示されなくなります。

これをしないでください

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
      
                <!-- DO NOT DO THIS-->

                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="*/*" />
            </intent-filter>

        </activity>
    </application>

代わりに次のようにしてください

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <!-- USE SEPERATE INTENT FILTER -->

            <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="*/*" />
            </intent-filter>

        </activity>
    </application>

注:用途に応じてmimeTypeを変更してください。

評決:インテントフィルターで複数のカテゴリーを使用している場合は、それらを別々に使用してください。

于 2020-10-09T06:47:18.087 に答える
1

使用したいこのアプリのAPIがあるかどうかを確認します。

もしそうなら、あなたは知ることによって利益を得ることができます

  • フィルタのより具体的な暗黙のアクション
  • または、DEFAULT以外のカテゴリを追加することもできます
  • このようなものを見つけることができれば、他のアプリでは見られないでしょう。

    于 2012-06-19T17:43:32.880 に答える