2014-04-20 40 views
9

我试图启动一个服务类中的活动。我有下面的代码:从活动上下文之外调用startActivity()需要FLAG_ACTIVITY_NEW_TASK

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")); 
+0

“我试图启动一个服务类内的活动” - 为什么这个服务甚至存在?此代码在服务中添加的值是什么,而不是处于活动状态? – CommonsWare

回答

31

试试这个。

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); 
+0

好的。下面的代码工作。谢谢 – Vikalp

+0

@Vikalp很高兴它helped.Happy编码。 – Hariharan

+0

非常感谢你节省了我很多时间 –

5

@hariharan answer works。但是,它也可以在第一种情况下无需设置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); 
相关问题