-1

私はAndroidサービスを作成しようとしています.とりわけ、電話をかけようとしています. ネットワークでリッスンし、接続を受け入れ、テキストを処理し、テキストで応答するなど、他のことを行うサービスがあります。今、通話を設定しようとしています。

これまでのところ、呼び出しを設定するビットは余分な不要な {} です。余分な {} のコードをこのサービスを開始するアクティビティに貼り付けると、呼び出しが設定されます。私が違うと思うのは文脈だけです。それで、私は何を間違っていますか?

public class Service extends android.app.Service {

@Override
public int onStartCommand(Intent intent, int flags, int startId) {  
    {
        android.content.Intent intent2 = 
                new android.content.Intent(
                    android.content.Intent.ACTION_CALL, 
                    android.net.Uri.parse("tel:012345556789"));
        this.startActivity(intent2);
    }       
    return Service.START_NOT_STICKY;
}

スタック

    Thread [<1> main] (Suspended (exception RuntimeException))  
    ActivityThread.handleServiceArgs(ActivityThread$ServiceArgsData) line: 2673 
    ActivityThread.access$1900(ActivityThread, ActivityThread$ServiceArgsData) line: 141    
    ActivityThread$H.handleMessage(Message) line: 1331  
    ActivityThread$H(Handler).dispatchMessage(Message) line: 99 
    Looper.loop() line: 137 
    ActivityThread.main(String[]) line: 5039    
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
    Method.invoke(Object, Object...) line: 511  
    ZygoteInit$MethodAndArgsCaller.run() line: 793  
    ZygoteInit.main(String[]) line: 560 
    NativeStart.main(String[]) line: not available [native method]  
4

2 に答える 2

0

サービスからのアクティビティの開始は特殊なケースであることを発見しました。フラグが必要なのは、おそらく偶発的なアクティビティの開始を停止するためです。ここで答えを得ましたhttps://stackoverflow.com/a/3456099/537980

{
    android.content.Intent intent2 = 
            new android.content.Intent(
                android.content.Intent.ACTION_CALL, 
                android.net.Uri.parse("tel:012345556789"));
    intent2.setFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK); //Add this line, if starting an activity from a service.
    this.startActivity(intent2);
}    
于 2013-01-31T09:22:38.247 に答える
0

電話をかけたい場合、これはコードです:

Intent callIntent = new Intent(Intent.ACTION_CALL);
        callIntent.setData(Uri.parse("tel:123456789"));
        startActivity(callIntent);

しかし、より良いアプローチは、アクティビティの新しいスレッドでこれを使用することです - コードスニペット:

Thread thread = new Thread()
{
    @Override
    public void run() {

Intent callIntent = new Intent(Intent.ACTION_CALL);
        callIntent.setData(Uri.parse("tel:123456789"));
        startActivity(callIntent);

    }
};

thread.start();

CALL_PHONEマニフェストに : パーミッションが必要です。

お役に立てば幸いです

于 2013-01-30T19:00:11.130 に答える