2016-03-25 6 views
0

Ich möchte die App überwachen, wenn sie installiert ist. Ich weiß, ich sollte den Broadcast-Empfänger verwenden, und ich sollte auchSo verwenden Sie <intent-filter> im Empfänger

<receiver android:name="com.gr.xxx"> 
    <intent-filter > 
     <action android:name="android.intent.action.PACKAGE_ADDED"/> 
     <action android:name="android.intent.action.PACKAGE_REPLACED"/> 
     <action android:name="android.intent.action.PACKAGE_REMOVED"/> 
     <data android:scheme="package"/> 
    </intent-filter> 
</receiver> 

im Mainifest hinzufügen. Aber wenn ich nicht schreibe <data android:scheme="package"/> wird es nicht funktionieren.

Meine Frage ist: wie kann ich wissen, ob <data> schreiben sollte oder nicht. Und was soll ich in das Schema schreiben?

Antwort

0

Wenn ich jedoch nicht schreibe, wird es nicht funktionieren.

Korrekt.

Intents meisten ausgestrahlt haben keine Uri für die „Daten“ Facette ausgefüllt, weshalb Sie normalerweise nicht <data> Elemente in <intent-filter> Elemente für <receiver> Elemente sehen. Die paketbezogenen Broadcasts tun jedoch setzen package:Uri in Intent, so dass Sie das in Ihren Filter aufnehmen müssen.

wie kann ich wissen, ob oder nicht

In diesem Fall schreiben sollte, die Dokumentation für diese Intent Aktionen haben „Die Daten enthalten den Namen des Pakets“. Diese kleine Aussage ist der Schlüssel, um Ihnen zu sagen, dass Sie ein <data> Element benötigen. Es sagt Ihnen jedoch nicht, was das Schema ist, weshalb Sie die Suche im Internet beenden, um herauszufinden, warum Ihre <intent-filter> nicht funktioniert. Ich habe vor ein paar Tagen mit genau diesen gleichen Intent Aktionen in dieses Problem gerannt.

Idealerweise wäre die Dokumentation besser. Idealerweise hätte ich Haare.

Und was soll ich in das Schema schreiben?

Es wäre die Regelung (en), die für die Uri im Intent verwendet werden könnte.

Sie werden mit <activity> in diese mehr laufen, wo Sie content: Schemata viel, file: Systeme viel (wenn auch abnehmend), und manchmal http: oder https: Systeme sehen. Das liegt daran, dass wir häufiger eine Uri mit einer Activity als eine Uri mit einer BroadcastReceiver verwenden.

+0

Die 'android.intent.action.PACKAGE_ADDED' ist eine Systemaktion. Wo ist der ** Quellcode **? Weil du gesagt hast: "Du wirst mit darauf stoßen"> Ich kann die Absicht nicht finden, weil ich nur den Aktionsnamen kenne. Ich kenne das Paket und die Klasse nicht.So kann ich den Code der Absicht nicht bekommen –

+0

@gus_gao_CHINA: "Wo ist der Quellcode?" - https://source.android.com irgendwo. Sie sollten es nicht benötigen, um auf diese "Absicht" -Aktionen zu reagieren. Unter https://github.com/commonsguy/cw-omnibus/tree/master/Introspection/SAWMonitor finden Sie ein Beispielprojekt, das auf die hinzugefügten und ersetzten Aktionen Ihrer Frage wartet. – CommonsWare

+0

Danke.Nur eine weitere Frage: Wenn ich zum Beispiel diese Aktion 'ACTION_MEDIA_UNMOUNTED' verwenden möchte, wie kann ich wissen, dass ich' scheme = file' anstelle von 'content' oder etwas anderes einstellen soll? Wenn ich den Inhaltsanbieter verwende, kann ich die URL im Quellcode (Anbieter) abrufen. –