我有一个活动,可以在您分享任何东西时处理“发送”意图。 以下是该活动的代码。
ShareSendMessageActivity.java
public class ShareSendMessageActivity {
boolean isDualPane;
Bundle bundle;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
// Get intent, action and MIME type
Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();
if ((Intent.ACTION_SEND.equals(action) || (Intent.ACTION_SEND_MULTIPLE.equals(action)) && type != null)) {
bundle = new Bundle();
handleSharedFile(intent);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
void handleSharedFile(Intent intent) {
ArrayList<Uri> listImageUri = new ArrayList<>();
ArrayList<String> listPath = new ArrayList<>();
String action = intent.getAction();
if (action.equalsIgnoreCase(Intent.ACTION_SEND)) {
Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
listImageUri.add(imageUri);
} else if (action.equalsIgnoreCase(Intent.ACTION_SEND_MULTIPLE)) {
listImageUri = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
}
for (Uri u : listImageUri) {
String path = FileUtils.getPath(this, u);
listPath.add(path);
}
bundle.putBoolean(IConstants.KEY_IS_FROM_SHARE, true);
bundle.putStringArrayList(IConstants.KEY_SHARED_FILE_PATH, listPath);
Intent callingIntent = new Intent(this, LoginActivity.class);
callingIntent.putExtras(bundle);
callingIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
callingIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(callingIntent);
finish();
overridePendingTransition(0, 0);
}
}
现在,当我共享* .txt文件时,此代码可以正常工作。但是,当我在应用程序中共享Chrome中的任何文本或URL时,如下面的屏幕截图所示。
所以在这两种情况下,它都会引发一个空指针异常,因为对于此代码而言
Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
我得到 imageuri = null。
那么我该如何在同一活动中进行处理。因为当我共享.txt文件,共享URL或文本时,我得到的是相同的MIME类型,即“文本/纯文本”。 根据我在聊天应用程序中的要求,如果我共享.txt文件,则应该 附加到收件人,如果我共享文本或URL,它应该向收件人发送消息。但是,如何区分这个意图动作是来自.txt文件还是(text,URL)。
答案 0 :(得分:1)
如果没有多余的EXTRA_STREAM
,请在EXTRA_TEXT
中查找文字。