Hallo. Ich versuche gerade, mir beizubringen, wie man services schreibt, die auf Key-Events reagieren. Beispielsweise gibt es Apps, die auf das Drücken des Power-Knopfes reagieren, ohne seine sonstige funktion zu ändern.
Ich bin allerdings ein bisschen verwirrt. Ich habe folgende AndroidManifest.xml:
[XML]<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.uxul.androidspam"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.VIBRATE"/>
<application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
<receiver android:name=".RemoteControlReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
<activity android:name="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>
[/XML]
Dann habe ich eine MainActivity.java, die ohne die Zeilen 30 und 31 auch compiliert:
Dann habe ich noch eine RemoteControlReceiver.java:
Wenn ich die genannten zwei Zeilen weglasse, passiert nichts, egal welche Hardwareknöpfe ich drücke. In
erscheinen die Tastendrücke, aber nicht mein Log-Text. Die beiden Zeilen compilieren aber auch nicht. am.registerMediaButtonEventReceiver möchte ein PendingIntent. Ich habe aber keine Ahnung, wo ich das herbekomme.
Könnt ihr mir helfen?
Wie gesagt, das ganze ist eher so ein Patchwork-Ding, wo ich mit verschiedenen Sachen experimentiere, der erste Teil ist zum Beispiel direkt aus dem Android-Tutorial. Ich hab mir das aus diversen Quellen zusammengetragen. Unter Anderem:
https://developer.android.com/training/managing-audio/volume-playback.html
https://developer.android.com/reference/android/view/KeyEvent.html
android - Key listener in Service - Stack Overflow
Ich bin allerdings ein bisschen verwirrt. Ich habe folgende AndroidManifest.xml:
[XML]<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.uxul.androidspam"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.VIBRATE"/>
<application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
<receiver android:name=".RemoteControlReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
<activity android:name="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>
[/XML]
Dann habe ich eine MainActivity.java, die ohne die Zeilen 30 und 31 auch compiliert:
Java:
package de.uxul.androidspam;
import android.app.*;
import android.view.*;
import android.os.*;
import android.content.*;
import android.util.*;
import android.media.*;
public class MainActivity extends Activity
{
private static final String TAG = "MainActivity";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
/** Called when the user clicks the Send button */
public void sendMessage(View view) {
// Do something in response to button
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(300);
Log.d(TAG, "Vibrate!");
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
am.registerMediaButtonEventReceiver(RemoteControlReceiver);
//am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
}
}
Dann habe ich noch eine RemoteControlReceiver.java:
Java:
package de.uxul.androidspam;
import android.app.*;
import android.view.*;
import android.os.*;
import android.content.*;
import android.util.*;
import android.media.*;
public class RemoteControlReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("RCR", "QUIEK");
}
}
Wenn ich die genannten zwei Zeilen weglasse, passiert nichts, egal welche Hardwareknöpfe ich drücke. In
Code:
adb logcat
Könnt ihr mir helfen?
Wie gesagt, das ganze ist eher so ein Patchwork-Ding, wo ich mit verschiedenen Sachen experimentiere, der erste Teil ist zum Beispiel direkt aus dem Android-Tutorial. Ich hab mir das aus diversen Quellen zusammengetragen. Unter Anderem:
https://developer.android.com/training/managing-audio/volume-playback.html
https://developer.android.com/reference/android/view/KeyEvent.html
android - Key listener in Service - Stack Overflow