2016-11-04 6 views
0

Ich habe ActivityAktivität nicht startet beim Booten nicht abgeschlossen

public class I1 extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout_main); 
    } 

} 

und BroadcastReceiver

public class I2 extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Intent mIntent = new Intent(context, I1.class); 
     mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(mIntent); 
    } 

} 

Warum nicht meine Tätigkeit beim Booten beginnt abgeschlossen? Das ist Code von AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.mypackage" 
    android:versionCode="1" 
    android:versionName="1.6" > 

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

    <uses-sdk 
     android:minSdkVersion="11" 
     android:targetSdkVersion="25" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" > 

     <activity 
      android:name=".I1" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <receiver 
      android:name=".I2" 
      android:enabled="true" 
      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> 

    </application> 

</manifest> 

und Code von Layout

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:keepScreenOn="true" 
    android:background="#000000" 
    tools:context="com.mypackage.Main" /> 

Können Sie mir bitte helfen, was mit meinem Code falsch?

+0

Bitte geben Sie den Gerätenamen mit dem Betriebssystem an. –

+0

Die Absicht wird empfangen? Gibt es eine Ausnahme? Und zuletzt, ist die App auf einer SD-Karte? – AxelH

+0

Keine Ausnahme protokolliert. Ich benutze USB-Debugging-Logcat. Ich habe versucht, App am Telefon und auf SD-Karte zu installieren. Absicht wurde nicht erhalten. Telefon - Philips Android 4.0.3. –

Antwort

1

Das Problem war wirklich unglaublich. Ich habe zwei identische Telefone - Philips Android 4.0.3. Einer von ihnen, auf dem ich meine App getestet habe, hatte einen Bug mit BOOT_COMPLETED Aktion. Dieser Code ist die beste denke ich

<receiver 
    android:name=".I2" > 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

und Broadcast-Receiver

@Override 
public void onReceive(Context context, Intent intent) { 
    Intent mIntent = new Intent(context, I1.class); 
    mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(mIntent); 
} 

und es funktioniert auch!

Dank Benutzer @AxelH!


Addition. Bei einigen Telefonen (z. B. ZTE Blade HN) müssen Sie die Hauptaktivität einmal starten, da das Telefon Broadcast Receiver nicht aktiviert, wenn die App neu ist und noch nie geöffnet wurde. Auch nach dem Aktualisieren der App müssen Sie es tun.

0

Versuchen Sie, die folgenden

<receiver android:name=".I2" android:enabled="true" android:exported="true"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     <action android:name="android.intent.action.QUICKBOOT_POWERON" /> 
    </intent-filter> 
</receiver> 

Eine andere Sache

Wenn Ihre App installiert auf externen Speicher (SD-Karte) zu bemerken, werden Sie nie erhalten Boot-Komplett Aktion. Daher müssen Sie Folgendes im Manifest-Tag angeben.

android:installLocation="internalOnly" 
+0

Tut mir leid, es funktioniert immer noch nicht. Nichts ist passiert. Ich habe die SD-Karte entfernt und die App erneut im Telefonspeicher installiert. –

+1

Ich würde nur mit dem 'nie erhalten' nicht einverstanden sein. Das funktioniert (gut, es funktioniert, wenn ich den Test gemacht habe), aber es gibt eine Änderung, die es nicht tut, wenn die Absicht gesendet wird, bevor die Karte montiert wird. – AxelH