Android10の変更点で「バックグラウンドからのアクティビティの起動に関する制限」が追加され、Service内などバックグラウンドからActivityを開くのに制限がかかるようになったよう。
基本的には、「いきなりAcitivityを開くのではなく、通知を使ってね」という形らしい。
targetVerisonに関わらず、Android10以上の端末で制限される。
制限の例外
ドキュメントで説明されている通り、記載されている1つ以上の条件を満たすと従来どおりActivityを開くことができる。
その中で、
ユーザーによってアプリにSYSTEM_ALERT_WINDOWパーミッションが付与されている
というのがあるので、必要であれば、このパーミッションを許可してもらうのが良さそう。
SYSTEM_ALERT_WINDOW権限の確認と許可
AndroidManifest.xml
SYSTEM_ALERT_WINDOWについて、AndroidManifest.xmlに追加する。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example"> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> </manifest>
ソースコード
import android.content.Intent; import android.net.Uri; import android.provider.Settings; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private static final int REQUEST_PERMISSION_CODE = 1; // SYSTEM_ALERT_WINDOWが許可されているかのチェック public boolean isGranted() { return Settings.canDrawOverlays(this); } // SYSTEM_ALERT_WINDOWの許可をリクエストする public void requestPermission() { Uri uri = Uri.parse("package:" + getPackageName()); Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, uri); startActivityForResult(intent, REQUEST_PERMISSION_CODE); } // 許可されたかの確認は、onActivityResultでチェックする @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { if (requestCode == REQUEST_PERMISSION_CODE) { if (Settings.canDrawOverlays(this)) { // 許可されたときの処理 } else { // 拒否されたときの処理 } } else { super.onActivityResult(requestCode, resultCode, data); } } }
以上!