两个应用程序之间的通信出现问题:queryIntentActivities返回空列表



我正在尝试使用intent在两个应用程序之间建立通信。第一个应用程序A会询问用户两个数字,当用户输入并按下按钮时,该应用程序A将向应用程序B发送结果请求,应用程序B将计算数字的总和,并等待按钮点击事件将结果发送回应用程序A。我在这里遇到的问题是queryIntentActivities方法返回一个空列表,我认为这意味着关于应用程序B意图的信息没有添加到意图的内部目录中。

这是应用程序A:的代码

final int CALLER_REQUEST = 1 ;
public static final String MY_ACTION = "com.android.intentapp3.myaction";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView updated = (TextView) findViewById(R.id.result_tv);
updated.setText("Not calculated yet!");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
//if(id == R.id.action_settings)
//  return true;
return super.onOptionsItemSelected(item);
}
public void onClick(View v) {
EditText nbr1 = (EditText) findViewById(R.id.number1_val);
EditText nbr2 = (EditText) findViewById(R.id.number2_val);
try {
int n1 = Integer.parseInt(nbr1.getText().toString());
int n2 = Integer.parseInt(nbr2.getText().toString());
} catch (Exception e) {
Toast.makeText(v.getContext(), "Error!", Toast.LENGTH_SHORT).show();
return;
}
Intent intent = new Intent(MainActivity.MY_ACTION);
intent.putExtra("number1", Integer.parseInt(nbr1.getText().toString()));
intent.putExtra("number2", Integer.parseInt(nbr2.getText().toString()));
intent.setAction(Intent.ACTION_SEND);
PackageManager pm = getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(intent, 0);
if (activities.size() > 0) {
Toast.makeText(this, "activity found", Toast.LENGTH_SHORT).show();
startActivityForResult(intent, CALLER_REQUEST);
}
else
{
Toast.makeText(this, "no activity found", Toast.LENGTH_SHORT).show();
}
}

应用程序B:代码

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
setContentView(R.layout.activity_main);
if(intent!=null && intent.getAction()=="com.android.intentapp3.myaction"){
TextView number1 = (TextView) findViewById(R.id.number1);
TextView number2 = (TextView) findViewById(R.id.number2);
if(number1==null)
{
Toast.makeText(getBaseContext(),"number 1 is null",Toast.LENGTH_SHORT).show();
return;
}
number1.setText(intent.getExtras().getString("number1"));
number2.setText(intent.getExtras().getString("number2"));
int n1 = Integer.parseInt(intent.getExtras().getString("number1"));
int n2 = Integer.parseInt(intent.getExtras().getString("number2"));
int sum = n1 + n2 ;
TextView result = (TextView) findViewById(R.id.result);
result.setText(Integer.toString(sum));
}
}

B:的清单xml文件

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.intentfilterexemple">
<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>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>
</application>
</manifest>

我认为这意味着关于应用程序B意图的信息没有添加到意图的内部目录中

在这种情况下,您的Intent<intent-filter>不匹配。

替换:

intent.setAction(Intent.ACTION_SEND);

带有:

intent.setAction(Intent.ACTION_SEND).setType("text/plain");

看看你是否有更好的运气。

最新更新