Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当屏幕关闭时,前台服务的呼叫停止工作_Android_Xamarin_Xamarin.android_Android 10.0 - Fatal编程技术网

Android 当屏幕关闭时,前台服务的呼叫停止工作

Android 当屏幕关闭时,前台服务的呼叫停止工作,android,xamarin,xamarin.android,android-10.0,Android,Xamarin,Xamarin.android,Android 10.0,我有以下打电话的代码: publicstaticvoidcallphonenumber(此上下文上下文,字符串phoneNumber) { var uri=Android.Net.uri.Parse(“电话:”+phoneNumber); var callIntent=newintent(Intent.ActionCall,uri); callIntent.AddFlags(ActivityFlags.NewTask); AddFlags(ActivityFlags.FromBackground

我有以下打电话的代码:

publicstaticvoidcallphonenumber(此上下文上下文,字符串phoneNumber)
{
var uri=Android.Net.uri.Parse(“电话:”+phoneNumber);
var callIntent=newintent(Intent.ActionCall,uri);
callIntent.AddFlags(ActivityFlags.NewTask);
AddFlags(ActivityFlags.FromBackground);
背景。起始触觉(callIntent);
}
我在正在运行的前台服务中打电话。基本上,服务检测条件(在我的例子中是GPS位置)并拨打电话。它与我的像素2XL和安卓9配合得很好。但升级到安卓10后,我遇到了一个新问题

首先,我被迫添加一个新的权限
前台服务
。另外,前台服务可以按预期工作并拨打电话——但只有当手机处于“活动”状态时,我的意思是,当屏幕关闭时,它不会处于“睡眠”模式

如果屏幕关闭-服务正常,我可以跟踪活动,但它不会打电话

adb logcat
显示此警告(第一行是
Info
,第二行是
warning
):

02-04 20:48:00.923 1315 7951 I ActivityTaskManager:START u0{act=android.intent.action.CALL dat=tel:xxxxxxxxxx flg=0x10000004 cmp=com.android.server.telecom/.components.UserCallActivity}来自uid 10174
02-04 20:48:00.924 1315 7951 W活动任务管理器:后台活动开始[callingPackage:MyApp;callingUid:10175;isCallingUidForeground:false;isCallingUidPersistentSystemProcess:false;realCallingUid:10174;isRealCallingUidForeground:false;isRealCallingUidPersistentSystemProcess:false;OriginatingPendingEvent:null;IsBGStartHitelisted:false;intent:intent{act=android.intent.action.CALL dat=tel:xxxxxxxxxxx flg=0x10000004 cmp=com.android.server.telecom/.components.UserCallActivity};callerApp:ProcessRecord{43f3a72 13957:MyApp/u0a174}]

我认为您应该查看“部分唤醒锁定”以防止手机进入“睡眠模式”

在MainActivity.cs中创建WakeLock对象,并在OnCreate函数下配置WakeLock:

private PowerManager.WakeLock wl = null;

protected override void OnCreate(Bundle savedInstanceState)
{
    // ... Your own code here
    PowerManager pmanager = (PowerManager)this.GetSystemService("power");
    wl = pmanager.NewWakeLock(WakeLockFlags.Partial, "myapp_wakelock");
    wl.SetReferenceCounted(false);
    wl.Acquire();
 }
不要忘记在您的AndroidManifest.xml中添加权限:

<uses-permission android:name="android.permission.WAKE_LOCK" />

此解决方案可以工作,但您需要随身携带,因为对于某些制造商来说,如果您的应用程序使用多个资源,则负责CPU“始终处于活动状态”的前台服务可能会被终止。在某些情况下,他们会添加“电池节省器”选项模式,您需要在设置中直接禁用它,以便运行应用程序而不会出现问题


希望这能有所帮助

我想你应该看看“部分唤醒锁定”以防止手机进入“睡眠模式”

在MainActivity.cs中创建WakeLock对象,并在OnCreate函数下配置WakeLock:

private PowerManager.WakeLock wl = null;

protected override void OnCreate(Bundle savedInstanceState)
{
    // ... Your own code here
    PowerManager pmanager = (PowerManager)this.GetSystemService("power");
    wl = pmanager.NewWakeLock(WakeLockFlags.Partial, "myapp_wakelock");
    wl.SetReferenceCounted(false);
    wl.Acquire();
 }
不要忘记在您的AndroidManifest.xml中添加权限:

<uses-permission android:name="android.permission.WAKE_LOCK" />

此解决方案可以工作,但您需要随身携带,因为对于某些制造商来说,如果您的应用程序使用多个资源,则负责CPU“始终处于活动状态”的前台服务可能会被终止。在某些情况下,他们会添加“电池节省器”选项模式,您需要在设置中直接禁用它,以便运行应用程序而不会出现问题


希望这可以帮助

Android 10(API级别29)和更高的地方限制当应用程序在后台运行时,应用程序何时可以启动活动。为了启动活动,运行前台服务的应用程序仍然被认为是“在后台”。因此,我们可以使用ConnectionService,它可以拨打电话(VoIP或其他)并希望将这些呼叫集成到内置电话应用程序中。请检查。@LucasZhang MSFT谢谢,我将测试建议的解决方案-看起来非常可靠。正如我在问题中所述,如果电话处于“活动”状态,则会触发电话呼叫-即使呼叫是从后台服务触发的。我在想-如果我可以呢“唤醒”然后此时打电话,然后像我现在这样打电话。这可能是一个解决办法吗?Android 10(API级别29)和更高的地方限制,当应用程序在后台运行时,应用程序何时可以启动活动。出于启动活动的目的,运行前台服务的应用程序仍然被认为是”因此,我们可以使用ConnectionService,它可以拨打电话(VoIP或其他方式),并希望这些电话集成到内置的电话应用程序中。请检查。@LucasZhang MSFT谢谢,我将测试建议的解决方案-看起来非常可靠。正如我在问题中所述,如果电话处于“活动”状态,则会触发电话呼叫“状态-即使呼叫是由后台服务触发的。我在想-如果我可以在这个时候“唤醒”然后打电话,然后像现在这样打电话会怎么样。这会是一个解决办法吗?”?