Androidアプリを強制的に再起動したいです。
以下サイトを参考にkotlinコードに変換して書いています。
https://qiita.com/Shiozawa/items/85f078ed57aed46f6b69
ただし、MainActivityからRestartActivityを呼び出せません。
初歩的なことかもしれませんが、何処を修正すべきか教えていただけないでしょうか。
現在の状況
エラーは出ておりません。
RestartActivityのonCreate()にLog.d("debug", "RestartActivity")を書いておりますが、
これが表示されていないので、RestartActivityが呼び出されているのかが不明で困っております。
(おそらくRestartActivityは呼び出されていないのではと思っています)
以上よろしくお願いします。
MainActivity
1class MainActivity : AppCompatActivity() { 2 3 private lateinit var binding: ActivityMainBinding 4 5 override fun onCreate(savedInstanceState: Bundle?) { 6 super.onCreate(savedInstanceState) 7 binding = ActivityMainBinding.inflate(layoutInflater) 8 setContentView(binding.root) 9 10 binding.btnTest.setOnClickListener { 11 restartApp() 12 } 13 } 14 15 private fun restartApp() { 16 Log.d("debug", "restartApp") 17 val context = applicationContext 18 val intent = RestartActivity.createIntent(context) 19 context.startActivity(intent) 20 } 21}
RestartActivity
1class RestartActivity : Activity() { 2 3 companion object { 4 const val EXTRA_MAIN_PID = "RestartActivity.main_pid" 5 fun createIntent(context: Context): Intent? { 6 val intent = Intent() 7 intent.setClassName(context.packageName, RestartActivity::class.java.name) 8 intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK 9 intent.putExtra(EXTRA_MAIN_PID, Process.myPid()) 10 return intent 11 } 12 } 13 14 public override fun onCreate(savedInstanceState: Bundle?) { 15 super.onCreate(savedInstanceState) 16 17 Log.d("debug", "RestartActivity") 18 19 // Kill the main process. 20 val intent = intent 21 val mainBrowserPid = intent.getIntExtra(EXTRA_MAIN_PID, -1) 22 assert(mainBrowserPid != -1) 23 assert(mainBrowserPid != Process.myPid()) 24 Process.killProcess(mainBrowserPid) 25 26 // Fire an Intent to restart the app 27 val context = applicationContext 28 val restartIntent = Intent(Intent.ACTION_MAIN) 29 restartIntent.setClassName(context.packageName, MainActivity::class.java.name) 30 restartIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK 31 context.startActivity(restartIntent) 32 33 // Kill this process. 34 finish() 35 Process.killProcess(Process.myPid()) 36 Log.d("debug", "RestartActivity End") 37 } 38}
AndroidManifest
1 <activity 2 android:name=".RestartActivity" 3 android:excludeFromRecents="true" 4 android:exported="false" 5 android:launchMode="singleInstance" 6 android:process=":restart_process" 7 android:theme="@android:style/Theme.Translucent.NoTitleBar"> 8 </activity>
あなたの回答
tips
プレビュー