Java 广播接收器-在应用程序之间发送字符串

Java 广播接收器-在应用程序之间发送字符串,java,android-studio,Java,Android Studio,我正在尝试将字符串从一个应用发送到另一个应用 第一个名为“发送”的应用程序只有“MainActivity”类和布局: private void sendMsg(){ final TextView msg = (TextView) findViewById(R.id.sendText); Button snd = (Button)findViewById(R.id.sendButton); snd.setOnClickListener(new View.

我正在尝试将字符串从一个应用发送到另一个应用

第一个名为“发送”的应用程序只有“MainActivity”类和布局:

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();
            }
        }
    });
}
第二个名为“rec”的应用程序有两个类“broadcastReciver”和“MainActivity”

main活动:

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"));
    }
}
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();
            }
        }

    }
}
广播接收器:

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"));
    }
}
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();
            }
        }

    }
}
我还在“AndroidManifest.xml”中的标记“receiver”之间添加了行:


应用程序应该做的是,当我在第一个应用程序中键入某个内容并通过另一个按钮发送它时,它应该在第二个应用程序中“广播”(显示)toast


我的第二个应用程序在运行时没有显示任何数据。

现在,必须在广播接收器的意向过滤器中指定操作

<receiver android:name="MyReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.MY_ACTION">          
            </action>
        </intent-filter>
    </receiver>
动作名称的符号对于让代码正常工作可能不是很重要,但我建议给出与发送应用程序包相关的名称。
例如:
“com.username.example.myApplication.ACTION\u example”

崩溃时会出现什么类型的错误/异常?@Steyrix I修复了错误,它是空指针,应用程序没有崩溃,但我仍然没有从第一个应用程序获取数据。我更新了上面的代码。您是否考虑过使用
setAction()
方法来发送您想要发送的意图?@Steyrix补充道,但当我运行第二个应用程序时,它仍然没有显示任何内容。您需要使用在清单中编写的相同名称来设置操作<代码>设置操作(“操作”)