アンドロイド:
public class LocationService extends Service {
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
startActivity(new Intent(this, activity.class));
}
}
このサービスをActivity
から起動しました
Activity
で、条件がstartを満たす場合
startService(new Intent(WozzonActivity.this, LocationService.class));
上記のLocationService
からActivity
を起動できませんでしたが、サービスクラスで現在実行中のActivity
のコンテキストを取得するにはどうすればよいですか?
Serviceクラス内から:
Intent dialogIntent = new Intent(this, MyActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(dialogIntent);
私も同じ問題を抱えていたので、上記のどれも役に立たなかったことをお知らせしたいと思います。私のために働いたのは:
Intent dialogIntent = new Intent(this, myActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(dialogIntent);
そして、あるサブクラスで、別のファイルに保存されていました:
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
を与えました。
言及する価値のある別のこと:上記の答えは、タスクがバックグラウンドにある場合はうまく機能しますが、タスク(サービスで構成されたアクティビティ)がフォアグラウンド(つまり、アクティビティの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。幸運を祈ります!
Context
のService
は使用できません。 (パッケージ)Context
を同様に取得できました:
Intent intent = new Intent(getApplicationContext(), SomeActivity.class);
あるいは、
独自の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 Android:name="yourpackage.App" ...
次に呼び出します:
App.getContext();