2011-06-29 19 views
11

Android uygulamamın, Flash eklentisi gerektiren bir WebView vardır. Web görünümü, yüklü değilse Adobe Flash'a bir Market bağlantısı sağlayacaktır. Flash'ı yükledikten sonra, uygulamanızda bunu başlatmanın tek yolu, uygulamayı zorlamak ve uygulamayı yeniden başlatmaktır. Kullanıcıların bunu kendileri için yaptığı bir düğmeyi sunmak isterim, çünkü sıradan kullanıcılar için kendi çalışma süreçlerini açmak ve uygulamayı el ile bırakmaya zorlamak çok karmaşıktır. Böyle bir yeniden başlatma düğmesini uygulamak için Java kodu nedir?Android uygulamasından çıkmak ve yeniden başlatmak nasıl zorlanır?

+3

Neden tam size gerekiyor uygulamanız için iznini gerektirmez zorlamak ve şeyleri başlatmak için uygulamanızı yeniden başlatır mısınız? Sadece flaş yüklendikten sonra başlangıç ​​kodunu tekrar arayın .. –

+1

Gerçekten uygulamanın kendisini zorlamak zorunda mıyım? WebView’i barındıran Etkinliği kapatmak yeterli olmaz mı? – Squonk

+1

Özel durum atma: P –

cevap

27

iki adımda uygulamanızı yeniden başlatabilirsiniz:

  1. Kendi süreci öldür. Process.myPid() kullanın, Process.killProcess()'a aktarın. Bunu işe almak için manifestinize (muhtemelen android.permission.KILL_BACKGROUND_PROCESSES) bir izin eklemeniz gerekebilir.
  2. Kendi sürecinizi öldürmeden önce, çok yakın zamanda Etkinliğinizi yeniden başlatmak için beklemede bir Alarm kaydı yaptırın. alarm.set için ikinci parametre triggerAtTime'dur. Bunu 0'a ayarlamak, alarmın hemen ateşlenmesine neden olur. Buradaki örnek, uygulamayı bir saniye ileriye taşımak için bir zaman belirler.

Kod şöyledir:

AlarmManager alm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); 
alm.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, PendingIntent.getActivity(this, 0, new Intent(this, this.getClass()), 0)); 
+0

Bu 'Süreç 'nesnesine ana' Etkinliğim 'içinden nasıl erişirim? – JoJo

+0

İşlemdeki bu yöntemler statiktir. Sadece onları arayabilirsin. – mportuesisf

+0

Evet, bu işe yarıyor. "Process.sendSignal (Process.myPid(), Process.SIGNAL_KILL)" – jtoberon

0

Etkinliğinizi durdurmak için finish numaralı telefonu arayabileceğinizi varsayalım, ancak uygulamanızın yeniden başlatılmasını sağlayamayacaksınız. Bu (eğer mümkün olsa bile) kök gerektirir ve korkunç bir fikir olurdu. Bu, herhangi bir uygulamanın istediği zaman başlayabileceği anlamına gelir: bu sadece kötü bir fikirdir ve mümkün olsaydı aslında bir hata olur.

+0

"Activity.finish" aslında uygulamayı bırakmaya zorlanıyor mu? Uygulamayı sadece hafızada saklıyor gibi görünüyor. Kodu çalıştırdığımda uygulamayı kapattı. Ancak uygulamayı yönetmeye gittiğimde, "Zorla durdur" düğmesi etkinleşti. Uygulamada bellekte bulunacak yer yoksa bu düğme devre dışı bırakılmalıdır. Bazı nedenlerle, Flash uygulamasının belleğin dışında kalmasını ve ardından WebView tarafından tanınması için yeniden başlatılmasını gerektirir. – JoJo

+0

@JoJo: Activity.finish yalnızca mevcut etkinliği kapatır. Uygulamadaki tüm etkinlikleri mi bitirdin yoksa sadece bir tane mi? Çünkü herhangi bir aktivite veya arka plan süreci hala mevcutsa, doğal olarak Uygulama yine de mevcut olacaktır. –

+0

'Activity.onCreate''ün sonuna' this.finish() 'ekledim. Yani uygulamayı başlattığınızda, hemen kapanır. Bu, bir ve tek faaliyetin kapatılmasına neden olmamalı mı? – JoJo

-1

Eğer System.exit ile uygulamanın çıkış (0) olabilir: Bu

İlgili konular