163

アンドロイド:

public class LocationService extends Service {

    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        startActivity(new Intent(this, activity.class));
    }
}

からこのサービスを立ち上げましたActivity

Activityif 条件が満たされる場合に開始

startService(new Intent(WozzonActivity.this, LocationService.class));

LocationService上記の私から起動できませんでした。サービスクラスActivityで現在実行中のコンテキストを取得するにはどうすればよいですか?Activity

4

8 に答える 8

365

Service クラス内から:

Intent dialogIntent = new Intent(this, MyActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(dialogIntent);
于 2010-08-31T09:57:45.857 に答える
20

私は同じ問題を抱えていましたが、上記のどれもうまくいかなかったことをお知らせしたいと思います。私にとってうまくいったのは:

 Intent dialogIntent = new Intent(this, myActivity.class);
 dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 this.startActivity(dialogIntent);

そして、別のファイルに保存された私のサブクラスの1つでは、次のことを行う必要がありました。

public static Service myService;

myService = this;

new SubService(myService);

Intent dialogIntent = new Intent(myService, myActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
myService.startActivity(dialogIntent);

他のすべての答えは私にnullpointerexception.

于 2012-12-20T00:08:30.123 に答える
9

言及する価値のあるもう1つのこと:上記の答えは、タスクがバックグラウンドにある場合は問題なく機能しますが、タスク(サービス+いくつかのアクティビティで構成される)がフォアグラウンドにある場合(つまり、アクティビティの1つが表示されている場合)に機能させる唯一の方法ですユーザーへ)は次のようでした:

    Intent intent = new Intent(storedActivity, MyActivity.class);
    intent.setAction(Intent.ACTION_VIEW);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    storedActivity.startActivity(intent);

ここで ACTION_VIEW または FLAG_ACTIVITY_NEW_TASK が実際に使用されるかどうかはわかりません。成功の鍵となったのは

storedActivity.startActivity(intent);

もちろん、アクティビティを再度インスタンス化しないための FLAG_ACTIVITY_REORDER_TO_FRONT 。頑張ってください!

于 2011-08-08T07:45:26.293 に答える
1

Contextのを使用することはできませんService。(パッケージ)Contextを同様に取得できました:

Intent intent = new Intent(getApplicationContext(), SomeActivity.class);
于 2017-02-12T15:17:25.520 に答える
0

あるいは、

独自の Application クラスを使用して、必要な場所 (特に非アクティビティ) から呼び出すことができます。

public class App extends Application {

    protected static Context context = null;

    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
    }

    public static Context getContext() {
        return context;
    }

}

そして、 Application クラスを登録します:

<application android:name="yourpackage.App" ...

次に呼び出します:

App.getContext();
于 2014-08-14T13:16:26.887 に答える
-1

あなたのサービスから、バックグランドにあるアクティビティを思い出す必要がある場合は、次のリンクをお勧めします。Intent.FLAG_ACTIVITY_NEW_TASK は解決策ではありません。

https://stackoverflow.com/a/8759867/1127429

于 2014-07-24T13:02:16.110 に答える