【问题标题】:Calling startActivity() from outside of an activity context requires the FLAG_ACTIVITY_NEW_TASK从活动上下文外部调用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK
【发布时间】:2014-04-20 13:11:03
【问题描述】:

我正在尝试在服务类中启动一项活动。我有以下代码:

public class SendLinkService extends Service {

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Bundle bundle = intent.getExtras();
    Intent shareIntent = new Intent(Intent.ACTION_SEND);
    shareIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    shareIntent.setType("text/plain");
    shareIntent.putExtra(Intent.EXTRA_TEXT, bundle.getString("URL"));
    getApplicationContext().startActivity(Intent.createChooser(shareIntent, "Share via"));
    return super.onStartCommand(intent, flags, startId);
}
}

它在 onStartCommand() 的以下行给出异常:

getApplicationContext().startActivity(Intent.createChooser(shareIntent, "Share via"));

【问题讨论】:

  • “我正在尝试在服务类中启动一个活动”——为什么这个服务还存在?这段代码通过服务而不是活动增加了什么价值?

标签: android


【解决方案1】:

试试这个。

Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, bundle.getString("URL"));
Intent new_intent = Intent.createChooser(shareIntent, "Share via");
new_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
getApplicationContext().startActivity(new_intent);

【讨论】:

  • @Vikalp 很高兴它有帮助。快乐的编码。
  • 非常感谢您为我节省了大量时间
  • 对于(Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) && (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P),在从Activity 上下文之外调用startActivity() 时,必须添加Intent.FLAG_ACTIVITY_NEW_TASK。文档 - developer.android.com/preview/behavior-changes#fant-required
【解决方案2】:

@hariharan 回答有效。但是,在第一种情况下,它也可以在不设置 Intent.FLAG_ACTIVITY_NEW_TASK 的情况下工作。更准确的答案是:

Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, bundle.getString("URL"));
Intent new_intent = Intent.createChooser(shareIntent, "Share via");
new_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
getApplicationContext().startActivity(new_intent);

【讨论】:

    【解决方案3】:

    对于(Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P),在从Activity 上下文之外调用startActivity() 时,必须添加Intent.FLAG_ACTIVITY_NEW_TASK。

    Docs

    Intent shareIntent = new Intent(Intent.ACTION_SEND);
    shareIntent.setType("text/plain");
    shareIntent.putExtra(Intent.EXTRA_TEXT, bundle.getString("URL"));
    Intent new_intent = Intent.createChooser(shareIntent, "Share via");
    new_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    getApplicationContext().startActivity(new_intent);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 2019-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-21
      • 1970-01-01
      相关资源
      最近更新 更多