0

GPS 通知を受信し、システム通知を送信し、電話をかけるためのフォアグラウンド サービスを作成しています。アプリケーションには何もActivity接続されておらず、ブート レシーバーから起動されるサービスのみが接続されています。サービスの onLocationChanged() 内から呼び出しアクティビティを開始しようとしたときに、次のようになりました。

Activity コンテキストの外部から startActivity() を呼び出すには、FLAG_ACTIVITY_NEW_TASK フラグが必要です。これは本当にあなたが望むものですか?

懐疑的な質問を恐れて、私は stackOverFlow を見ることにしました。そこで私はこれらを見つけました: Calling startActivity() from outside of an Activity context , Android: Make phone call from service , android start activity from service - すべてがこの正確なことを行うことを示唆しています.

だから、私の質問は: なぜこのフラグ (履歴スタックに関するもの) を使用することはお勧めできませんか? 私の場合、それをしても大丈夫ですか?

簡略化されたコード:

public class CallService extends Service implements LocationListener {

    @Override
    public void onCreate() {
        super.onCreate();
        startForeground(1, NotificationGenerator.getNotification());
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return START_STICKY;
    }

    @Override
    public synchronized void onLocationChanged(Location loc) {
        String url = "tel:xxxxxxxxxx";
        Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(url));
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }

    ...
}
4

1 に答える 1

2

その答えは、純粋にユーザー エクスペリエンス ( UX ) の領域にあります。通常、Android デバイスは個人用のデバイスであり、アプリのコーディング時にはそのことを念頭に置いておく必要があります。

ユーザーがゲームをプレイしたり、電話をかけたりしている可能性があります。通知なしでアクティビティを起動するのは失礼であり、それを行うアプリはすべてアンインストールします。

また、電話がロックされている場合、アクティビティは実際には開始されず、ユーザーが電話のロックを解除するまで待機します。

一方、通知は、アプリが何かを表示したいことをユーザーに伝えるために行われます。代わりにそれらを使用してください。

プライベート アプリを構築している場合を除き、要件に何が適しているかがわかります。

于 2013-02-25T09:08:23.577 に答える