2016-08-02 33 views
1

Ich habe Probleme, Code beim Booten zu starten, habe ich die Quelle für ein Beispiel heruntergeladen, das funktionieren sollte, aber es nicht funktioniert. laut dem beispiel sollte es einen toast erzeugen wenn das telefon eingeschaltet wird, aber es passiert nicht, ich habe es auf android 6.0 und 7.0 getestet.

jede Hilfe ist dankbar, danke. Der Code ist wie folgt:
Manifest:Running-Code beim Booten android

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.androidautostartup" 
    android:versionCode="1" 
    android:versionName="1.0" > 

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

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="18" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <receiver 
      android:name=".BootComplete" 
      android:enabled="true" 
      android:exported="false" > 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 
     </receiver> 

     <service android:name=".AutoStartUp" > 
     </service> 

     <activity 
      android:name="com.example.androidautostartup.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

BootComplete.java

public class BootComplete extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     if (intent.getAction().equalsIgnoreCase(Intent.ACTION_BOOT_COMPLETED)) { 
      Intent serviceIntent = new Intent(context, AutoStartUp.class); 
      context.startService(serviceIntent); 
     } 
    } 
} 

AutoStartUp.java

public class AutoStartUp extends Service { 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); 
     // do something when the service is created 
    } 

} 

Antwort

0

Ich würde wirklich nicht tun UI Sachen auf einem Arbeiter empfehlen Thread (Dienst). Während es möglich ist, erzeugt es Verwirrung für den Benutzer, eine Nachricht außerhalb eines App-Kontexts zu erhalten.

Nachdem dies gesagt wurde, sollten Sie UI-Code auf dem UI-Thread ausführen, wenn Sie dies tun müssen.

Handler handler = new Handler(Looper.getMainLooper()); 

handler.post(new Runnable() { 

     @Override 
     public void run() { 
      Toast.makeText(getContext(), "Service Started", Toast.LENGTH_LONG).show(); 
     } 
    }); 
+0

Entschuldigung, wo soll ich das hinstellen? in der onCreate-Methode? – user6548194

+0

könnte man es tatsächlich auf dem Empfänger nennen. Oder in einem der Lifecycle-Callback auf dem Dienst, idealerweise onStart – jirungaray

+0

es gibt mir nur einen Fehler sagen kann Methode nicht beheben makeText anonym java.lang.runnable, java.lang.string, int – user6548194