调用 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) 时无法使用其他应用的问题;

Problem of being unable to use other apps when calling intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

提问人:kyesia 提问时间:4/17/2023 更新时间:4/17/2023 访问量:33

问:

在 GpsData 应用程序中,从服务器接收 GPS 数据。GPS 数据每秒由一个线程接收一次,InfoService 类将接收的 GPS 数据数发送到 MainActivity。在 MainActivity 中检查日志时,会调用 onPause() -> onNewIntent() -> onResume()。

但是,如果我按主页按钮使用其他应用程序,GpsData 应用程序将保持打开状态,无法使用其他应用程序。

GpsData 应用程序有没有办法继续接收 GPS 数据,同时允许用户通过按主页按钮使用其他应用程序?

代码>>

public class Client
{
public class SockHandler extends Handler
    {
        @Override
        public void handleMessage(Message msg)
        {
            switch (msg.what)
            {
                case TCPClient.SOCKET_WRITTEN:
                    break;

                case TCPClient.SOCKET_READ:
                    if (msg.arg1 <= 0)
                        break;

                    byte[]  buf     = (byte[])msg.obj;
                    String  recv    = new String(buf, 0, msg.arg1);

                    mRecvCount += msg.arg1;
                    mListener.setCount(String.format("%d", mRecvCount));

                    break;
                case TCPClient.SOCKET_KEEP_ALIVE:
                    if (!isConnected())     break;`
                    ...                 
                    break;
            }
        }
    }


public interface Message
    {
        void setCount(String count);
    }
}
public class InfoService extends Service implement Client.message {
    
    ........

     @Override
     public void setCount(String count) {
        Intent intent = new Intent(getApplicationContext(),MainActivity.class);
        intent.putExtra("Count", count);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }
}
public class MainActivity extends AppCompatActivity
{

   @Override
    protected void onResume() {
Log.i("MainActivity", "onResume CALL")
        super.onResume();
    }

    @Override
    protected void onRestart() {
        super.onRestart();
    }

    @Override
    protected void onPause() {
Log.i("MainActivity", "onPause CALL")
        super.onPause();
    }
    
   public void setCount(String strCount) {
        mRelayCountView.setText(strCount);
    }


    @Override
    protected void onNewIntent(Intent intent) {
    Log.i("MainActivity", "onNewIntent CALL")
    
    ........    

         if(intent.getStringExtra("Count")!=null) {
                setCount(intent.getStringExtra("Count"));
            }

    .......

        super.onNewIntent(intent);
    }


}
<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:launchMode="singleInstance"
    android:screenOrientation="portrait"
    android:theme="@style/AppTheme.NoActionBar"
    android:windowSoftInputMode="stateHidden|adjustPan"></activity>

我找不到解决方案。感谢您阅读这个问题。

Android OnResume 启动 - 活动 Onpause

评论


答:

1赞 dominicoder 4/17/2023 #1

GpsData 应用程序有没有办法继续接收 GPS 数据,同时允许用户通过按主页按钮使用其他应用程序?

好吧,您每秒都会从服务启动活动(这似乎是操作系统甚至不应该允许的),所以不要这样做。

GPS 数据每秒由一个线程接收一次,InfoService 类将接收的 GPS 数据数发送到 MainActivity。

删除启动活动的代码,将值存储在共享首选项或数据库中,稍后从活动中读取它,并在用户打开活动以在活动运行时接收更新时从活动绑定到服务:https://developer.android.com/guide/components/bound-services