主要活动停止时,不能从服务“startActivity”

时间:2013-05-01 17:53:17

标签: android service android-activity process

在应用程序的主要活动中我startService:

    startService(new Intent(MainActivity.this, BluetoothService.class).putExtra("address", address));

与PC建立蓝牙连接。然后我按下Android手机上的主页按钮,主要活动进入后台。我将呼叫命令从PC发送到手机并调试显示该服务通常接收该命令并尝试呼叫:

String[] splits = parameters.split("\\|");
String number = splits[0];

Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + number));
ConnectionManager.getInstance().GetMainActivity().startActivity(intent);

但只有当我在屏幕上显示主要活动时,才会启动通话活动。

在清单中:

<service android:name="BluetoothService" >

我尝试使用android:process =“:newThread”标签,但服务崩溃了

ConnectionManager.getInstance().GetMainActivity().startActivity(intent);

我也无法在不同的过程中调试服务。

EDITED://///////////////////////////////////

我有一个问题,我从简单的课开始活动:

class Command_call_impl implements CommandImpl
{
    public void Execute(String parameters)
    {
        String[] splits = parameters.split("\\|");
        String number = splits[0];

        Intent intent = new Intent(this, MainActivity.class);
        intent.putExtra("phone_number", number);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        ConnectionManager.getInstance().GetMainActivity().startActivity(intent);
    }
}

并且无法初始化Intent。似乎eclipse无法识别MainActivity,但它在同一个包中。

EDITED://///////////// 我以这种方式开始活动:

Intent intent = new Intent();
    intent.setClass(ConnectionManager.getInstance().GetMainActivity().getBaseContext(), MainActivity.class);
    intent.putExtra("phone_number", number);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    ConnectionManager.getInstance().GetMainActivity().startActivity(intent);

但仅当mainActivity处于活动状态时才调用onNewIntent。我也尝试过FLAG_ACTIVITY_SINGLE_TOP键。

EDITED://////////////////////

双重启动同一活动后问题解决了:

Intent intent = new Intent(ConnectionManager.getInstance().GetMainActivity().getBaseContext(), MainActivity.class);
    intent.putExtra("phone_number", number);
    intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    ConnectionManager.getInstance().GetMainActivity().getApplication().startActivity(intent);

    Intent intent2 = new Intent(ConnectionManager.getInstance().GetMainActivity().getBaseContext(), MainActivity.class);
    intent2.putExtra("phone_number", number);
    intent2.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    ConnectionManager.getInstance().GetMainActivity().getApplication().startActivity(intent);

我认为第一个意图显示活动和第二个启动呼叫活动。有趣的是,如果我从第一个意图中删除了intent.putExtra(“phone_number”,number),那就不行了。非常奇怪。

屏幕关闭时也不要打电话。

1 个答案:

答案 0 :(得分:0)

class Command_call_impl implements CommandImpl
{
private Context mContext;

    public Command_call_impl(Context context)
    {
        mContext = context;
    }   

    public void Execute(String parameters)
    {
        String[] splits = parameters.split("\\|");
        String number = splits[0];

        Intent intent = new Intent(mContext, MainActivity.class);
        intent.putExtra("phone_number", number);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        mContext.startActivity(intent);   
    }
} 

在MainActivity中覆盖onNewIntent

@Override
protected void onNewIntent(Intent intent)
{
    super.onNewIntent(intent);

    String phoneNumber = intent.getStringExtra("phone_number");
    if (phoneNumber != null)
    {
         Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phone));
        //callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(callIntent);
    }
}