如何在Android中的一个应用程序与其他应用程序之间发送数据?

Far*_*zad 4 android intentfilter android-intent android-activity

我试图通过Android中的Intent在App1和App2之间发送数据

我使用了这段代码,但无法解决我的问题。

App1 MainActivity:

        Intent i2 = new Intent("com.appstore.MainActivity");
        i2.setPackage("com.appstore");//the destination packageName
        i2.putExtra("Id", "100");
        startActivity(i2);
Run Code Online (Sandbox Code Playgroud)

App2 MainActivity:

Bundle data = getIntent().getExtras;
if(data!=null){
    String myString = b.getString("Id");

}
Run Code Online (Sandbox Code Playgroud)

Manfiest App2 MainActivity:

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

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

        </activity>
Run Code Online (Sandbox Code Playgroud)

Far*_*zad 5

最终代码:

应用程式1:

        Intent intent = new Intent();
        intent.setClassName("com.appstore", "com.appstore.MyBroadcastReceiver");
        intent.setAction("com.appstore.MyBroadcastReceiver");
        intent.putExtra("KeyName","code1id");
        sendBroadcast(intent);
Run Code Online (Sandbox Code Playgroud)

应用程式2:

Reciver:
public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Data Received from External App", Toast.LENGTH_SHORT).show();

    }
}
Run Code Online (Sandbox Code Playgroud)

清单:

        <receiver
            android:name=".MyBroadcastReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="first_app_packagename" />
            </intent-filter>
        </receiver>
Run Code Online (Sandbox Code Playgroud)

主要活动 :

  MyBroadcastReceiver mReceiver = new MyBroadcastReceiver();
        registerReceiver(mReceiver,
                new IntentFilter("first_app_packagename"));
Run Code Online (Sandbox Code Playgroud)

  • 第三,清单中的&lt;intent-filter&gt;声明和对registerReceiver()的IntentFilter的使用都是无用的,因为您实际上从未发送包含操作“ first_app_packagename”的广播“ Intent”。第四,由于使用setClassName()在广播Intent上显式设置了COMPONENT,因此不需要在Intent广播中设置ACTION。那也没用。 (4认同)
  • 这可能对您有用,但是您这里的内容太多了,您可能不明白为什么代码可以工作。首先,如果您在清单中声明了一个&lt;intent-filter&gt;,则无需指定`exported =“ true”`,因为这是默认设置,因此您无需指定`enabled =“ true “`,因为默认情况下所有组件都已启用。其次,如果您在清单中指定了&lt;intent-filter&gt;,则不需要通过调用registerReceiver()来注册BroadcastReceiver。您**一个或另一个,而不是两者**。 (3认同)

sam*_*amm 0

使用Bundle.putSerializable(Key,Object);和Bundle.putParcelable(Key, Object); 前一个对象必须实现Serializable,后一个对象必须实现Parcelable。