0

在应用程序的主要活动中,我启动服务:

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

当它在不同的进程中时,我也无法调试服务。

已编辑:///////////////////////////////

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

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

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

已编辑:///////////////////

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

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) ,它就不起作用。它非常好奇。

屏幕关闭时也叫不吃午饭。

4

1 回答 1

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);
    }
}
于 2013-05-01T18:18:06.857 回答