我有以下代码从扩展BroadcastReceiver
的类发送电子邮件:
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
S2Mconfig s2m = new S2Mconfig();
Log.d(TAG, "Create Intent for mail to " + address);
emailIntent.setType("plain/text");
emailIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, s2m.read(thisContext));
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, address);
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, body);
Log.d(TAG, String.format("Sending mail %s", emailIntent.toString()));
thisContext.startActivity(Intent.createChooser(emailIntent, "Send mail..."));
BroadcastReciever
已在manifest
中注册,我设置了INTERNET
权限:
<uses-permission android:name="android.permission.INTERNET" />...
<receiver android:name=".SmsReceiver" android:exported="true" >
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<action android:name="android.provider.Telephony.MMS_RECEIVED" />
</intent-filter>
</receiver>
日志确认在调用FLAG_ACTIVITY_NEW_TASK
之前设置了startActivity()
。
尽管如此,我还是得到了可怕的"Calling startActivity()... requires the FLAG_ACTIVITY_NEW_TASK flag...
任何线索都将非常感激。
答案 0 :(得分:4)
@Override
public void onReceive(Context context, Intent intent){
Context appContext = context.getApplicationContext();
和appContext
您可以开始“正常”活动。描述here就是一个例子
public void sendNotificationEmail(String emailBody) {
Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("text/html");
emailIntent.putExtra(Intent.EXTRA_EMAIL, notificationRecipients);
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "MyAppName Error");
emailIntent.putExtra(Intent.EXTRA_TEXT, emailBody);
Intent emailChooser = Intent.createChooser(emailIntent, "An error has occurred! Send an error report?");
emailChooser.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
startActivity(emailChooser);
} catch (ActivityNotFoundException e) {
// If there is nothing that can send a text/html MIME type
e.printStackTrace();
}
}
所以将FLAG_ACTIVITY_NEW_TASK
添加到选择器Intent而不是发件人!
答案 1 :(得分:0)
尝试添加以下标志
intent.addFlags(
Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
当您开始活动时,请确保您使用的是context.getApplicationContext()
context.getApplicationContext()startActivity(意向);
答案 2 :(得分:0)
将您的代码从emailIntent.setType("plain/text");
更改为emailIntent.setType("text/plain");