2016-03-23 7 views
3

Ich versuche, meine App in Android N um eine Schnelleinstellung zu erweitern. Die Schnellkachel wird angezeigt, tut aber nichts, wenn sie angeklickt wird. Ich kann das sichtbare Feedback sehen, wenn ich es berühre, also weiß ich, dass es den Klick erkennt, aber beim Klicken macht es nichts.Schnelleinstellungen Toogle in Android N

Hier ist mein Service-Code:

public class QuickSettingTileService extends TileService { 

    public QuickSettingTileService() 
    { 
    } 

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

    @Override 
    public int onStartCommand(Intent intent, int flags, int startID) 
    { 
     //some setup code is here 

     return START_STICKY; 
    } 

    @Override 
    public void onClick() 
    { 
     Context context = getApplicationContext(); 

     Toast.makeText(context, "Quick Setting Clicked", Toast.LENGTH_SHORT).show(); 
     //Toggle code is here 
    } 
} 

Mein Manifest den Code hat fast direkt aus der Dokumentation kopiert. Nur geringfügige Änderungen vorgenommen wurden:

<service 
    android:name=".QuickSettingTileService" 
    android:label="@string/app_name" 
    android:icon="@drawable/quick_toggle_off" 
    android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"> 
    <intent-filter> 
     <action android:name="android.service.quicksettings.action.QS_TILE" /> 
    </intent-filter> 
</service> 

Der Service beim Öffnen der App gestartet wird:

Intent serviceIntent = new Intent(this, QuickSettingTileService.class); 
startService(serviceIntent); 
+0

Versuchen Sie, LogCat zu protokollieren, anstatt einen 'Toast' zu verwenden. – CommonsWare

Antwort

5

Entfernen Sie einfach diese Zeilen aus Ihrer QuickSettingTileService Klasse

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

@Override 
public int onStartCommand(Intent intent, int flags, int startID) 
{ 
    //some setup code is here 
    return START_STICKY; 
} 

Es gibt keine Notwendigkeit, überschreiben onBind() oder onStartCommand() auf einem TileService.

Sie müssen diesen Dienst auch nicht explizit starten. Der Erlaubnis- und Absichtsfilter im Manifest stellt sicher, dass Android OS Ihren Dienst startet, wenn Ihre Kachel der Benachrichtigungsleiste hinzugefügt wird.

+0

Wow, das war einfach. Vielen Dank! Ich habe ursprünglich einen Fehler erhalten, ohne onBind zu überschreiben, aber ich denke, dass ich den Dienst zu der Zeit fälschlicherweise anstelle von TileService erweitert habe. – Randy

+0

Ich bin froh, dass es geklappt hat. Bitte denken Sie daran, als Antwort zu markieren, damit dies anderen Menschen helfen kann. – murki