Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从广播接收器发送电子邮件_Android_Email_Broadcastreceiver - Fatal编程技术网

Android 从广播接收器发送电子邮件

Android 从广播接收器发送电子邮件,android,email,broadcastreceiver,Android,Email,Broadcastreceiver,我正试图从一个扩展了Broadcastreceiver的类发送电子邮件 但是我得到了以下错误 android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

我正试图从一个扩展了Broadcastreceiver的类发送电子邮件

但是我得到了以下错误

android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
                                                                      at android.app.ContextImpl.startActivity(ContextImpl.java:1026)
                                                                      at android.app.ContextImpl.startActivity(ContextImpl.java:1013)
                                                                      at android.content.ContextWrapper.startActivity(ContextWrapper.java:284)
                                                                      at android.content.ContextWrapper.startActivity(ContextWrapper.java:284)
                                                                      at mimbarsoft.com.callspy.InternetConnecton.onReceive(InternetConnecton.java:37)
                                                                      at android.app.ActivityThread.handleReceiver(ActivityThread.java:2550)
                                                                      at android.app.ActivityThread.access$1500(ActivityThread.java:162) 
                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1440) 
                                                                      at android.os.Handler.dispatchMessage(Handler.java:107) 
                                                                      at android.os.Looper.loop(Looper.java:194) 
                                                                      at android.app.ActivityThread.main(ActivityThread.java:5371) 
                                                                      at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                      at java.lang.reflect.Method.invoke(Method.java:525) 
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
                                                                      at dalvik.system.NativeStart.main(Native Method) 
在看到一些stackoverflow帖子后,我添加了setFlags,但仍然得到了相同的错误

这是我的密码

public class InternetConnecton extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
    if(networkInfo != null && networkInfo.isConnected()){
        Toast.makeText(context,"Internet is connected",Toast.LENGTH_LONG).show();
        Intent emailIntent = new Intent(intent.ACTION_SEND_MULTIPLE);
        emailIntent.setType("text/plain");
        emailIntent.putExtra(intent.EXTRA_EMAIL,new String[]{"ahmedshihab14@yandex.com"});
        emailIntent.putExtra(intent.EXTRA_SUBJECT,"CallSPY");
        ArrayList<Uri> uris = new ArrayList<>();
        while(!IncomingCall.savedFile.isEmpty()){
            File f = IncomingCall.savedFile.poll();
            Uri uri = Uri.fromFile(f);
            uris.add(uri);
        }
        emailIntent.putParcelableArrayListExtra(intent.EXTRA_STREAM,uris);
        emailIntent.setFlags(intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent.createChooser(emailIntent,"Sending mail"));

    }else{
        Toast.makeText(context,"no internet",Toast.LENGTH_LONG).show();
    }
}
公共类InternetConnecton扩展了BroadcastReceiver{
@凌驾
公共void onReceive(上下文、意图){
ConnectivityManager ConnectivityManager=(ConnectivityManager)context.getSystemService(context.CONNECTIVITY_服务);
NetworkInfo NetworkInfo=connectivityManager.getActiveNetworkInfo();
if(networkInfo!=null&&networkInfo.isConnected()){
Toast.makeText(上下文,“Internet已连接”,Toast.LENGTH_LONG.show();
Intent emailIntent=新意图(Intent.ACTION\u SEND\u MULTIPLE);
emailIntent.setType(“文本/普通”);
emailIntent.putExtra(intent.EXTRA_EMAIL,新字符串[]{”ahmedshihab14@yandex.com"});
emailIntent.putExtra(intent.EXTRA_主题,“CallSPY”);
ArrayList URI=新的ArrayList();
而(!IncomingCall.savedFile.isEmpty()){
文件f=IncomingCall.savedFile.poll();
Uri=Uri.fromFile(f);
添加(uri);
}
emailIntent.putParcelableArrayListExtra(intent.EXTRA\u流,URI);
emailIntent.setFlags(intent.FLAG\u活动\u新任务);
context.startActivity(intent.createChooser(emailIntent,“发送邮件”);
}否则{
Toast.makeText(上下文,“无互联网”,Toast.LENGTH_LONG.show();
}
}
}


有人有任何解决方案吗?

不要在用户正在做的事情中间弹出一个活动。请显示一个
通知
。@Commonware您可以提出任何建议吗?在后台发送电子邮件时,我不必在中间弹出活动?在后台发送电子邮件,您必须通过GET_ACCOUNTS获得用户的同意,并访问Gmail API()。但是,用户需要为此登录。此外,正如@commonware所建议的,您可能不希望通过向用户显示随机生成活动来中断用户正在做的事情。请考虑为此使用通知。更多阅读:-您的代码不会在后台发送电子邮件。它将向用户显示一个活动。您需要使用一些第三方库(例如JavaMail)来发送电子邮件,而无需用户界面。