6

この質問は、 How to close or stop a external app that I started in Android で行われた提案から派生したものです。

私は、産業用プロセスのリモートコントロールである Android アプリを作成しています。プロセスは、Android アプリと常に通信している PC 上で実行されます。PC が PDF ファイルを Android に送信し、AdobeReader を起動することがあります。 apk で表示します。PCが画像を閉じると、Androidで閉じたいと思います。

上記のリンクで、AdobeReader を起動すると、コードからシャットダウンする方法がないと言われました。 ただし、アプリを前面に戻すことができるかもしれません。これは、私の目的には適しています。しかし、私はそれを機能させることができませんでした。私のアプリの主なアクティビティは RemoteControlActivity で、試しました:

try {
   Intent i = new Intent(ctx, RemoteControlActivity.class);
   ctx.startActivity(i);    
}   
   catch (ActivityNotFoundException e)   {
   Log.d("ShowButtons(normal)", "Hide");
}

また、 startActivity ( ) 呼び出しの前に、Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_FROM_BACKGROUND運が悪い。

マニフェストでは、remoteControlActivity の起動モードはsingleTaskです

デバッガーでは、StartActivity()は Catch 句に到達せずに呼び出されますが、RemoteControlActivity の onRestart または onResume ハンドラーでブレークポイントにヒットしません。

前もって感謝します!

編集: 以下の回答では、別のフラグが提案されていたので、試してみました:

try {
    Intent i = new Intent(ctx, RemoteControlActivity.class);
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK );
    ctx.startActivity(i);          
}   
catch (ActivityNotFoundException e) {
    Log.d("ShowButtons(normal)", "Hide");
}

...しかし運が悪い-デバッガーではstartActivityを呼び出し、catchブロックには到達しませんが、何も起こりません。

さらに編集:マニフェストを求められました。主なアクティビティの部分は次のとおりです。

<activity android:launchMode="singleTask"
    android:label="@string/app_name"
    android:windowNoTitle="false"
    android:configChanges="orientation"
    android:screenOrientation="landscape"
    android:name="RemoteControlActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />  
    </intent-filter>
</activity>
4

6 に答える 6

5

フラグIntent.FLAG_ACTIVITY_BROUGHT_TO_FRONTは、Android 自体がアクティビティを前面に出すときにのみ設定されます。自分で設定しても何も起こりません。

フラグIntent.FLAG_FROM_BACKGROUNDは何もしません。情報提供のみを目的として使用されます (アクティビティがバックグラウンド タスクによって開始されたことを示すため)。

を設定する必要がありますIntent.FLAG_ACTIVITY_NEW_TASK。のドキュメントからFLAG_ACTIVITY_NEW_TASK

このフラグを使用する場合、開始しようとしているアクティビティに対してタスクが既に実行されている場合、新しいアクティビティは開始されません。代わりに、現在のタスクが前回の状態で画面の前面に表示されます。

于 2012-07-12T14:20:50.287 に答える
2

これを試すことができます:

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
于 2014-10-23T02:21:48.677 に答える
1

アクティビティが既に実行されている可能性が高い場合は、 を使用しますFLAG_ACTIVITY_REORDER_TO_FRONT。または、 と の両方FLAG_ACTIVITY_CLEAR_TOPを使用しFLAG_ACTIVITY_SINGLE_TOPます。

于 2012-07-12T16:17:35.227 に答える
1

使ってください -

 FLAG_ACTIVITY_REORDER_TO_FRONT

たとえば、現在のタスクが A、B、C、D のようなものである場合、D が で B の startActivity() を呼び出すとFLAG_ACTIVITY_REORDER_TO_FRONT、B が前面に表示され、新しいタスクのステークは A、C、D のようになります。 B.

于 2016-08-31T06:43:53.757 に答える