-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

如果你想打电话,这是代码:

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 回答
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 回答