简体   繁体   中英

Broadcast receiver - send String between apps

I am trying to send string from app to app.

First app called "send" has only "MainActivity" class and layout:

private void sendMsg(){

    final TextView msg = (TextView) findViewById(R.id.sendText);
    Button snd = (Button)findViewById(R.id.sendButton);

            snd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(!msg.getText().toString().trim().equals("")){
                Intent intent = new Intent("Updated");
                intent.setAction(Intent.ACTION_SEND);
                intent.putExtra("TEXT", msg.getText().toString().trim());
                intent.setType("text/plain");
                intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
                intent.setComponent(new ComponentName("com.example.rec","com.example.rec.broadcastReciver"));
                getApplicationContext().sendBroadcast(intent);
            }else{
                Toast.makeText(getApplicationContext(), "Write text that You want to broadcast!", Toast.LENGTH_LONG).show();
            }
        }
    });
}

Second app called "rec" has two classes "broadcastReciver" and "MainActivity".

MainActivity:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        zoviBroadCast();
    }

    private void zoviBroadCast(){
        broadcastReciver brcv = new broadcastReciver();
        registerReceiver(brcv,
                new IntentFilter("action"));
    }
}

broadcastReciver:

public class broadcastReciver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent)
    {
        //String data = intent.getStringExtra("TEXT").trim();
        if (intent != null)
        {
            String sIntentAction = intent.getAction();
            if (sIntentAction != null && sIntentAction.equals("action"))
            {
                String data = intent.getStringExtra("TEXT").trim();
                Toast.makeText(context, data, Toast.LENGTH_LONG).show();
            }
            else {
                Toast.makeText(context,"Something went wrong",Toast.LENGTH_SHORT).show();
            }
        }

    }
}

I also added lines between tag "receiver" in "AndroidManifest.xml":

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.rec">

    <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>
        </activity>
        <receiver
            android:name=".broadcastReciver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="action" />
            </intent-filter>
        </receiver>
    </application>
</manifest>

What application should do is when I type something in first application and send it another over button it should "broadcast" (show) toast at second app.

My second application is not showing any data when run.

Nowadays it is essential to specify an action in intent filter of your broadcast receiver.

<receiver android:name="MyReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.MY_ACTION">          
            </action>
        </intent-filter>
    </receiver>

When sending the broadcast, you need to set exactly the same action to the intent you send.

Intent i = new Intent();
i.setAction("android.intent.action.MY_ACTION");
context.sendBroadcast(i);

Notation of action name may be not very important to get your code working, but I recommend to give names related to the package of your sending app. For example: "com.username.example.myApplication.ACTION_EXAMPLE"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM