【问题标题】:Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag [duplicate]从 Activity 上下文外部调用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK 标志 [重复]
【发布时间】:2018-06-20 12:17:21
【问题描述】:

我在 android 中创建了表情符号键盘,但我可以在键盘视图中添加共享此应用程序按钮。

这里是我的点击分享方法。

public void shareapp() {
    String shareText = getResources().getString(R.string.share_text);
    Intent sendIntent = new Intent();
    sendIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    sendIntent.setAction(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_TEXT, shareText + "https://play.google.com/store/apps/details?id=" + getPackageName());
    sendIntent.setType("text/plain");
    Intent chooseIntent = Intent.createChooser(sendIntent, "Share this via");
    getApplication().getApplicationContext().startActivity(chooseIntent);
}

但是在单击共享应用按钮时发生错误 请参阅错误:

01-11 13:36:03.728 8795-8795/com.example.napturalistamoji E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.napturalistamoji, PID: 8795
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:747)
    at android.app.ContextImpl.startActivity(ContextImpl.java:734)
    at android.content.ContextWrapper.startActivity(ContextWrapper.java:345)
    at com.example.napturalistamoji.service.KeyboardService.shareapp(KeyboardService.java:685)
    at com.example.napturalistamoji.service.KeyboardService.onClick(KeyboardService.java:566)
    at android.view.View.performClick(View.java:5721)
    at android.view.View$PerformClick.run(View.java:22620)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:7331)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

谁能帮我解决我的问题?

【问题讨论】:

  • 您需要在从createChooser() 返回的chooseIntent 上致电addFlags()
  • 将其标记为重复并没有真正的帮助,因为不幸的是,链接的重复问题对 OP 的问题没有任何明确的答案。

标签: android android-intent android-service android-input-method


【解决方案1】:

在开始这样的活动时,您需要为您的意图设置标志

Intent chooseIntent = Intent.createChooser(sendIntent, "Share this via");
chooseIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().getApplicationContext().startActivity(chooseIntent);

您出于错误的意图设置了标志。

【讨论】:

  • setFlags() 和 addFlags() 方法都可以用来设置标志。唯一的区别是 setFlags() 方法删除了以前添加的标志。 stackoverflow.com/questions/6664189/…
  • 这个答案没用。
  • @DavidWasser 重做
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-17
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多