[Android]ServiceからのActivityの起動

ServiceからActivityを起動するには、以下のようにします。

Intent intent = new Intent(getApplication(), Activityクラス名.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(intent);

上記の手順では、HOMEボタンでのアプリ切り替え後5秒間は、ほかのActivityを起動できない制限を受けます。
そのような場合は、PendingIntentを使うと解消されます。

Intent intent = new Intent(getApplication(), Activityクラス名.class);
PendingIntent pendingIntent = PendingIntent.getActivity(getApplication(), 777, intent, PendingIntent.FLAG_UPDATE_CURRENT);
pendingIntent.send();

Android10以降では、サービスからのActivity起動が抑制されているようです。(参照)
android.permission.SYSTEM_ALERT_WINDOWを取得することで解決できます。

AndroidManifest.xmlにPermissionを追加します。
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /&rt;
OVERLAY_PERMISSIONを得る処理を実行します。
以下の関数は、Permissionがあれば、trueを返し、無ければfalseを返します。
Permissionが無い場合は、設定を行うActivityを表示します。
public static int OVERLAY_PERMISSION_REQ_CODE = 1000;

@TargetApi(Build.VERSION_CODES.M)
public boolean checkPermission_DrawOverlays() {
    final Context context = getContext();
    if(context == null)return false;
    boolean result = Settings.canDrawOverlays(context);
    if (!result) {
        Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + context.getPackageName()));
        startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE);
    }
    return result;
}

0 件のコメント :

コメントを投稿