重新启动应用程序并将其最小化时开始新的活动

艾米·卡斯(AimiKass)

第一次问一个问题,请客气:)

我想创建一个应用程序,当您接到来电时,它会向您显示一条消息(通过启动新的活动)。

我做到了,除了一个问题。当我第一次启动该应用程序时:

1)我必须在应用程序预先运行时打个电话,才能按计划工作。

2)然后我可以将其最小化

3)甚至锁定手机,应用程序即可完美运行

1)如果我启动应用程序

2)最小化

3)然后拨打电话什么都没有发生:(

4)我必须打开它,打个电话,然后再次最小化以使其正常运行。

我正在使用android模拟器对其进行测试。

主要活动:

public class MainActivity extends AppCompatActivity
{


    IntentFilter intentFilter;
    CallReceiver callReceiver;


    private void init()
    {
        intentFilter = new IntentFilter();
        callReceiver = new CallReceiver();
    }


    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        init();



        intentFilter.addAction("android.intent.action.PHONE_STATE");
        intentFilter.addAction("android.intent.action.NEW_OUTGOING_CALL");

        registerReceiver(callReceiver,intentFilter);


    }

CallReceiver:

public class CallReceiver extends PhonecallReceiver
    {

        public static final String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";


        @Override
        protected void onIncomingCallStarted(Context ctx, String number, Date start)
        {

            openNewActivity(number,ctx);

        }

        @Override
        protected void onOutgoingCallStarted(Context ctx, String number, Date start)
        {
        }

        @Override
        protected void onIncomingCallEnded(Context ctx, String number, Date start, Date end)
        {
        }

        @Override
        protected void onOutgoingCallEnded(Context ctx, String number, Date start, Date end)
        {
        }

        @Override
        protected void onMissedCall(Context ctx, String number, Date missed)
        {
        }



        private void openNewActivity(String number,Context context)
        {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    final StringBuilder builder = new StringBuilder();

                    try {
                        
                        Intent i = new Intent(context, IncomingCallActivity.class);
                        String message = "Message I want to be displayed";
                        i.putExtra(EXTRA_MESSAGE, message);


                        final Handler handler = new Handler(Looper.getMainLooper());
                        handler.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                //Do something after 100ms
                                context.startActivity(i);
                            }
                        }, 1000);


                    } catch (Exception e) {
                        builder.append("Error : ").append(e.getMessage()).append("\n");
                    }

                }
            }).start();
        }
    }

IncomingCallActivity:

public class IncomingCallActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        // Important: have to do the following in order to show without unlocking
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN |
                        WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                        WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
                WindowManager.LayoutParams.FLAG_FULLSCREEN |
                        WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                        WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

        setContentView(R.layout.main);

        Intent intent = getIntent();
        String message= intent.getStringExtra(CallReceiver.EXTRA_MESSAGE);

        TextView text = (TextView)findViewById(R.id.text);
        text.setText(message);
    }
}
Shlomi Katriel

Android不再允许从后台启动活动,并且官方建议改为显示通知。

请参阅从后台开始活动的限制

在文档中提到了一些例外,并解释了当您的应用程序处于前台时为什么它可以工作。

我认为您应该触发一条通知,以显示您打算在活动中显示的消息(或非常简化的UI),然后单击该通知将以您的UI的全部力量打开您的活动。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

应用程序在重新启动活动时崩溃

来自分类Dev

我的应用程序在最小化时重置数据

来自分类Dev

如何关闭正在运行的应用程序的所有活动并在单击时重新启动新的应用程序

来自分类Dev

启动外部活动后,Xamarin.Forms Android应用程序将重新启动

来自分类Dev

Python Tkinter:当主应用程序最小化时,进度条不会最小化

来自分类Dev

调试浮士德流处理-从主题开始重新启动应用程序

来自分类Dev

重新启动应用程序时出现“ IllegalStateException片段未附加到活动”

来自分类Dev

离开并返回我的应用程序时,android重新启动活动

来自分类Dev

在按下主页按钮时重新启动我的应用程序活动

来自分类Dev

应用程序重新启动,从背景,而不是恢复以前的状态的主要活动

来自分类Dev

重新启动应用程序时出现“ IllegalStateException片段未附加到活动”

来自分类Dev

离开并返回我的应用程序时,android重新启动活动

来自分类Dev

最小化应用程序,从用户离开的地方开始

来自分类Dev

从其他应用程序启动现有活动时,将其重新排序到顶部

来自分类Dev

运行新/更新的应用程序文件,而无需重新启动服务器

来自分类Dev

运行新的/更新的应用程序文件,而无需重新启动服务器

来自分类Dev

如何通过pm2重新启动节点应用程序并应用新的配置文件?

来自分类Dev

应用重新启动时,如何从根活动而不是子活动开始?

来自分类Dev

CLLocationManager startMonitoringForRegion:设备重新启动后不重新启动应用程序

来自分类Dev

从终端重新启动bash而不重新启动终端应用程序(mac)?

来自分类Dev

如何在Qt中重新启动应用程序?

来自分类Dev

以编程方式重新启动应用程序?

来自分类Dev

用singleTop重新启动MainActivity或应用程序。

来自分类Dev

单击通知时重新启动应用程序

来自分类Dev

崩溃后如何重新启动Qt应用程序?

来自分类Dev

ServiceStack自托管应用程序重新启动

来自分类Dev

如何调试应用程序重新启动的原因

来自分类Dev

重新启动应用程序后导航栏缩小

来自分类Dev

重新启动应用程序后保存布尔状态

Related 相关文章

  1. 1

    应用程序在重新启动活动时崩溃

  2. 2

    我的应用程序在最小化时重置数据

  3. 3

    如何关闭正在运行的应用程序的所有活动并在单击时重新启动新的应用程序

  4. 4

    启动外部活动后,Xamarin.Forms Android应用程序将重新启动

  5. 5

    Python Tkinter:当主应用程序最小化时,进度条不会最小化

  6. 6

    调试浮士德流处理-从主题开始重新启动应用程序

  7. 7

    重新启动应用程序时出现“ IllegalStateException片段未附加到活动”

  8. 8

    离开并返回我的应用程序时,android重新启动活动

  9. 9

    在按下主页按钮时重新启动我的应用程序活动

  10. 10

    应用程序重新启动,从背景,而不是恢复以前的状态的主要活动

  11. 11

    重新启动应用程序时出现“ IllegalStateException片段未附加到活动”

  12. 12

    离开并返回我的应用程序时,android重新启动活动

  13. 13

    最小化应用程序,从用户离开的地方开始

  14. 14

    从其他应用程序启动现有活动时,将其重新排序到顶部

  15. 15

    运行新/更新的应用程序文件,而无需重新启动服务器

  16. 16

    运行新的/更新的应用程序文件,而无需重新启动服务器

  17. 17

    如何通过pm2重新启动节点应用程序并应用新的配置文件?

  18. 18

    应用重新启动时,如何从根活动而不是子活动开始?

  19. 19

    CLLocationManager startMonitoringForRegion:设备重新启动后不重新启动应用程序

  20. 20

    从终端重新启动bash而不重新启动终端应用程序(mac)?

  21. 21

    如何在Qt中重新启动应用程序?

  22. 22

    以编程方式重新启动应用程序?

  23. 23

    用singleTop重新启动MainActivity或应用程序。

  24. 24

    单击通知时重新启动应用程序

  25. 25

    崩溃后如何重新启动Qt应用程序?

  26. 26

    ServiceStack自托管应用程序重新启动

  27. 27

    如何调试应用程序重新启动的原因

  28. 28

    重新启动应用程序后导航栏缩小

  29. 29

    重新启动应用程序后保存布尔状态

热门标签

归档