2016-07-14 14 views
0

Ich habe eine App, die nur eine Benachrichtigung zeigt (erstellt mit NotificationManager) und Toast zeigt und dann mit finish() (alles in onCreate()) beendet. Der Anwendungsfall ist, dass beim Ausführen der App durch den Benutzer eine Benachrichtigung angezeigt wird, durch die bestimmte Aktionen ausgeführt werden können.Benötige ich eine Aktivität, um nur eine Benachrichtigung anzuzeigen?

Benötige ich überhaupt eine Aktivität oder gibt es eine schnellere Alternative? Es dauert einige Zeit, bis es geöffnet wird und das Layout geladen werden muss, obwohl es für den Benutzer nicht sichtbar ist.

Antwort

1

können Sie Android verwenden: theme = "@ android: style/Theme.NoDisplay" Um so schnell wie möglich, ohne das Laden-Layout eine Tätigkeit, bei der es

1

Sie benötigen eine Context, um diese Benachrichtigung zu erstellen. Sie können z.B. a Service, Activity, IntentService oder BroadcastReceiver und mehr. Um einen Toast zu erstellen, benötigen Sie auch eine Context, also wo erstellen Sie derzeit die Toast und die Notification?

+0

Derzeit erstelle ich sie in 'onCreate()' der Haupttätigkeit und bekommen Zusammenhang mit 'getApplicationContext()' . –

0

Aktivität ist nicht zwingend.

Ein Beispiel

Sie eine BroadcastReceiver haben kann, die den Toast Nachricht zum Beispiel zeigt. Auf diese Weise können Sie Ihre BroadcastReceiver registrieren, um das gewünschte Ereignis anzuhören (Like Incoming SMS, Boot Completed usw.) und den Toast anzeigen, wenn das Ereignis eintritt ...

Im folgenden Beispiel zeigen Sie einen Toast nach Empfangen einer SMS (unabhängig davon, ob der Nutzer die App geöffnet hat oder nicht).

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest> 
    ... 
    <uses-permission android:name="android.permission.READ_SMS"/> 
    <uses-permission android:name="android.permission.RECEIVE_SMS"/> 

    <application> 
     .... 
     <receiver android:name=".MyCustomBroadcastReceiver"> 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver> 
    </application> 
</manifest> 

MyCustomBroadcastReceiver.java

public class MyCustomBroadcastReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if(intent != null) { 
      String action = intent.getAction(); 
      if(action != null) { 
       if(action.equals("android.provider.Telephony.SMS_RECEIVED")) { 
        Toast.makeText(context, "SMS Received", Toast.LENGTH_LONG).show(); 
       } 
      } 
     } 
    } 
}