我正在尝试编写一个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]
答案 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);
}