2009-06-29 16 views
35

Android emülatörünün önyüklemeyi tamamlamasından sonra bir android uygulamasının nasıl otomatik başlatılacağından emin değilim. Bana yardımcı olacak herhangi bir kod parçacığı olan var mı?Bir Android Uygulaması Nasıl Otomatik Başlatılır?

+0

- Prashast cevabını bakın. –

+0

@Rajapandian İşçi, çalışan bir çözüm ise yanıtı kabul etmeli veya yorumlarda beklentilerinizi belirtmelidir. Başkaları için yararlı olur. – naveejr

+0

http: // karanbalkar.com/2014/01/autostart-application-at-bootup-in-android/ –

cevap

12

Otomatik başlatma ile, telefon açılışında otomatik başlatmayı kastediyorsanız, BOOT_COMPLETED Niyeti için bir BroadcastReceiver kaydettirmeniz gerekir. Android sistemleri, önyükleme tamamlandığında bu niyetleri yayınlar.

Bu amacı aldıktan sonra, yapmak istediğiniz her şeyi yapabileceğiniz bir Hizmet başlatabilirsiniz. Telefonda sürekli olarak çalışan bir Servis olması, sistem boşta olsa bile sistem kaynaklarını yediği için genelde kötü bir fikirdir. Servis/uygulamanızı yalnızca gerektiğinde başlatmalı ve gerekli olmadığında durdurmalısınız.

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

(elbette uygulamanızın kullandığı tüm diğer izinleri listelenmelidir):

36

Bir apaçık izin girdisi eklemek zorunda. Daha sonra BroadcastReceiver sınıfını uygulayın, basit ve hızlı bir şekilde çalıştırılabilir olmalıdır. En iyi yaklaşım, bu alıcıda servisinizi uyandırmak için bir alarm ayarlamaktır (eğer Prahast'ın yazdığı gibi çalkantılı tutmak gerekmiyorsa).

public class BootUpReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    PendingIntent pi = PendingIntent.getService(context, 0, new Intent(context, MyService.class), PendingIntent.FLAG_UPDATE_CURRENT); 
    am.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + interval, interval, pi); 
}} 

Ardından, bildirim dosyasına Alıcı sınıfını ekleyin:

<receiver android:enabled="true" android:name=".receivers.BootUpReceiver" 
     android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 
+0

Ara aralığı nedir? – asmgx

+0

".receivers" bu satırda asmgx

16

Düzenleme senin AndroidManifest.xml eklemek için RECEIVE_BOOT_COMPLETED izin

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

Düzenleme için AndroidManifest.xml uygulama parçalı İzin

altında
<receiver android:enabled="true" android:name=".BootUpReceiver" 
android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> 
<intent-filter> 
    <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
</intent-filter> 
</receiver> 

Şimdi aşağıdaki aktivitede yazın.

public class BootUpReceiver extends BroadcastReceiver{ 
@Override 
public void onReceive(Context context, Intent intent) { 
    Intent i = new Intent(context, MyActivity.class); 
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(i); 
} 
} 
+0

İyi çalışıyor. Teşekkürler! –

0

Bu konu için her zaman buraya giriyorum. Kodumu buraya koyacağım, böylece bir dahaki sefere kullanabilirim. (Phew, depo kodumdan arama yapmaktan nefret ediyor).

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

alıcı ve hizmet ekleyin:

<receiver android:enabled="true" android:name=".BootUpReceiver" 
     android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 
    <service android:name="Launcher" /> 

oluştur sınıf Fırlatıcı:

public class Launcher extends Service { 
    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 

     new AsyncTask<Service, Void, Service>() { 

      @Override 
      protected Service doInBackground(Service... params) { 
       Service service = params[0]; 
       PackageManager pm = service.getPackageManager(); 
       try { 
        Intent target = pm.getLaunchIntentForPackage("your.package.id"); 
        if (target != null) { 
         service.startActivity(target); 
         synchronized (this) { 
          wait(3000); 
         } 
        } else { 
         throw new ActivityNotFoundException(); 
        } 
       } catch (ActivityNotFoundException | InterruptedException ignored) { 
       } 
       return service; 
      } 

      @Override 
      protected void onPostExecute(Service service) { 
       service.stopSelf(); 
      } 

     }.execute(this); 

     return START_STICKY; 
    } 
} 

android yeniden başlatma sonrasında eylem yapmak için sınıf BootUpReceiver oluştur

izni ekleyin. örnek fırlatma MainActivity için

:

Yanılıyorsun @AdamC
public class BootUpReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Intent target = new Intent(context, MainActivity.class); 
     target.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(target); 
    } 
} 
+0

hatası asmgx

+0

@asmgx: Cevabı güncelliyorum. Oraya koymayı unuttum. – nafsaka

İlgili konular