0

アプリケーションの主なアクティビティでは、サービスを開始します。

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

PC との Bluetooth 接続を確立します。次に、Androidフォンのホームボタンを押すと、主なアクティビティがバックグラウンドになります。PC から電話に call コマンドを送信し、サービスが通常そのコマンドを受信して​​呼び出しを試みていることをデバッグ表示します。

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

ただし、mainActivity がアクティブな場合にのみ onNewIntent が呼び出されます。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);

最初の意図はアクティビティを示し、2 番目の開始コール アクティビティを示していると思います。興味深いことに、最初のインテントから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 に答える