1

これが私の問題です。サーバーからいくつかのドキュメントをロードするアプリを開発しています。Intent.ACTION_VIEW を介して別のアプリでドキュメントを開きます。これはすべて正常に機能しています。問題は、アプリ全体がピンで保護されているため、「バックグラウンドに送信」や「画面ロック」などのイベントをキャプチャして、後でピン画面を表示する必要があり、これが私の上で別のアプリを開いたときに機能しないことです。したがって、ユーザーがドキュメントを開いてホームボタンを押すと、メニューから起動アイコンをクリックすると、ドキュメントが開かれた外部アプリが再び取得され、戻るボタンでアプリに再度アクセスします。これは修正が必要なセキュリティ上の問題です。以下にいくつかのコード スニペットを示します。


文書を開く:

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);

Uri uri = Uri.fromFile(downloadedFile);
String mimeType = document.getMimeType();
intent.setDataAndType(uri, mimeType);
startActivityForResult(intent, 1);

バックグラウンドに送信されたキャプチャ:

        ActivityManager am = (ActivityManager) context
            .getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningTaskInfo> tasks = am.getRunningTasks(1);
    if (!tasks.isEmpty()) {
        ComponentName topActivity = tasks.get(0).topActivity;
        if (!topActivity.getPackageName().equals(context.getPackageName())) {
            IN_BACKGROUND = true;
            Log.i(PinUtil.class.getSimpleName(), "App sent to background ");
        } else {
            IN_BACKGROUND = false;
        }
    }

私の質問は次のとおりです:別のアプリが開かれたときにアプリがバックグラウンドに送信されるかどうかを検出することは可能ですか? ランチャー アイコンが押されたときに別のアプリを開かないようにする方法。

すべての応答に感謝します。よろしくルボス

4

1 に答える 1

1

この問題を解決するには:

したがって、ユーザーがドキュメントを開いてホームボタンを押すと、メニューから起動アイコンをクリックすると、ドキュメントが開かれた外部アプリが再び取得され、戻るボタンでアプリに再度アクセスします。これは修正が必要なセキュリティ上の問題です。以下にいくつかのコード スニペットを示します。

ユーザーがドキュメントを表示するために外部アプリを起動するときは、外部アプリがアプリケーションと同じタスクで実行されないようにする必要があります。新しい別のタスクで実行する必要があります。これは次のように行うことができます。

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // Ensure app runs in separate task
Uri uri = Uri.fromFile(downloadedFile);
String mimeType = document.getMimeType();
intent.setDataAndType(uri, mimeType);
startActivity(intent); // Can't use startActivityForResult() here

ただし、startActivityForResult()別のタスクで実行されているアクティビティは結果を返すことができないため、外部ビューアーを起動するときには使用できません。ただし、ほとんどの外部アプリケーションはACTION_VIEWとにかく起動しても結果を返さないため、おそらく問題にはなりません。

それからあなたはこう尋ねました:

私の質問は次のとおりです:別のアプリが開かれたときにアプリがバックグラウンドに送信されるかどうかを検出することは可能ですか? ランチャー アイコンが押されたときに別のアプリを開かないようにする方法。

アプリケーションがバックグラウンドにあるかどうかを判断するのに役立つ StackOverflow に関する回答がいくつかあるはずです (実際には、これを判断するのはそれほど簡単ではありません)。

上記の私の説明は、2番目の質問に答えるはずです。タスクで他のアプリを起動しない場合、ランチャー アイコンが押されたときにアプリのみが起動されます。

于 2013-02-14T17:59:03.340 に答える