英文:
Is it possible to show a specific page of the Flutter application when the phone screen is locked due to a specific event?
问题
I implemented a program that when a new call is made, a function is called and a special page of the application is opened.
当有新的电话呼入时,我实现了一个程序,会调用一个函数并打开应用的特定页面。
When the screen is locked, the problem I have is that the Android system does not allow the function to run before the screen is unlocked.
当屏幕被锁定时,我的问题是Android系统不允许在解锁屏幕之前运行该函数。
Finally, my question leads here:
最后,我的问题是:
Does anyone have experience in running the app or opening a specific page of the Flutter application at a specific time without unlocking the screen?
有人有在不解锁屏幕的情况下,在特定时间运行应用程序或打开Flutter应用程序的特定页面的经验吗?
is this possible?
这是否可能?
(Note: I've provided translations for the non-code text as requested. If you need translations for the code comments or variable names, please let me know.)
英文:
I implemented a program that when a new call is made, a function is called and a special page of the application is opened.
When the screen is locked, the problem I have is that the Android system does not allow the function to run before the screen is unlocked.
Finally, my question leads here:
Does anyone have experience in running the app or opening a specific page of the Flutter application at a specific time without unlocking the screen?
is this possible?
@pragma('vm:entry-point')
Future<void> phoneStateBackgroundCallbackHandler(
PhoneStateBackgroundEvent event,
String number,
int duration,
) async {
switch (event) {
case PhoneStateBackgroundEvent.incomingstart:
print('Incoming call start, number: $number, duration: $duration s');
openAppWithStartCall(number, duration);
break;
case PhoneStateBackgroundEvent.incomingmissed:
break;
case PhoneStateBackgroundEvent.incomingreceived:
break;
case PhoneStateBackgroundEvent.incomingend:
openAppWithEndCall(number, duration);
break;
case PhoneStateBackgroundEvent.outgoingstart:
print('Ougoing call start, number: $number, duration: $duration s');
break;
case PhoneStateBackgroundEvent.outgoingend:
print('Ougoing call ended, number: $number, duration: $duration s');
break;
}
}
and openAppWithStartCall:
openAppWithStartCall(String phone, int duration) async {
debugPrint('Action:android.intent.action.whenNewCall');
AndroidIntent intent = AndroidIntent(
action: 'android.intent.action.whenNewCall',
package: 'com.example.flutter_application_1',
data: Uri.encodeFull(
'MyApplicationId://search?phone=$phone&duration=$duration'),
);
await intent.launch();
}
When the phone screen is not locked, the above functions are executed and in fact the desired intent is executed.
If it is not possible to execute the same intent when the screen is locked, how can the same content be shown without unlocking the screen?
答案1
得分: 0
我已在AndroidManifest.xml中添加了这一行:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
在Android 10及以上版本中,我们可以访问“在其他应用程序上方打开”,这对我有效。
英文:
I have added this line in AndroidManifes.xml,
in androiod > 10 we can access "open over other apps" and this works for me.
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论