从服务中拨打电话

时间:2013-01-30 18:48:45

标签: java android

我正在尝试编写一个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]  

2 个答案:

答案 0 :(得分: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权限。

我希望我帮助

答案 1 :(得分: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);
}