android-从BroadcastReceiver开始活动

android-从BroadcastReceiver开始活动,第1张

概述我有以下代码从扩展BroadcastReceiver的类发送电子邮件:IntentemailIntent=newIntent(android.content.Intent.ACTION_SEND);S2Mconfigs2m=newS2Mconfig();Log.d(TAG,"CreateIntentformailto"+address);emailIntent.setType("plainext");emailInte

我有以下代码从扩展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已在清单中注册,我设置了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>

日志确认在调用startActivity()之前已设置FLAG_ACTIVITY_NEW_TASK.
尽管如此,我仍然感到恐惧:“调用startActivity()…需要FLAG_ACTIVITY_NEW_TASK标志…
任何线索将不胜感激.

解决方法:

@OverrIDepublic 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中,而不是发送者中!

总结

以上是内存溢出为你收集整理的android-从BroadcastReceiver开始活动全部内容,希望文章能够帮你解决android-从BroadcastReceiver开始活动所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1087162.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存