Java 广播接收器-在应用程序之间发送字符串
我正在尝试将字符串从一个应用发送到另一个应用 第一个名为“发送”的应用程序只有“MainActivity”类和布局: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.
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补充道,但当我运行第二个应用程序时,它仍然没有显示任何内容。您需要使用在清单中编写的相同名称来设置操作<代码>设置操作(“操作”)