MOTOACTVでGoogle Musicを便利に使いたい

2012年1月25日 by
カテゴリ: Android, 開発のこと 

完全に自分専用アプリ

画面を見なくても Google Music の再生停止をハードキーである MUSIC ボタンでやろう!

ついでに長押ししたら次の曲に飛ぼう!みたいな。

起動時に Wi-Fi を ON にしてるのはおまけです。

前提条件

/system/usr/keylayout/G2-keypad.kl

key 387 MEDIA WAKE_DROPPED

key 387 MEDIA_PLAY_PAUSE WAKE_DROPPED

あと当然 Google Music アプリは入れといてください。GoogleServiceFramework も入れてアカウントの設定がされてないとネットワークからのダウンロードができなくて意味無いです。

MUSIC ボタンを押した時に発生する com.motorola.music.KEY_DOWN_TRIGGERED と長押しした時に発生する com.motorola.android.HEADSET_KEY_LONG_PRESS をとっつかまえて何とかしてやろうじゃないかというおはなし。

再生停止は android.intent.action.MEDIA_BUTTON を sendBroadcast してます。

ウィジェットが発行する com.android.music.musicservicecommand.togglepause をパクって送ってたんですが、MusicPlaybackService が起動してないと反応してくれないので…

一方次の曲に飛ぶのは com.android.music.musicservicecommand.next でやってます。

元々の仕様に合わせてダブルクリックしたら曲飛ばしとかやろうと思ってたんですが面倒くs

個人的にはポケットに入ったままで止めたり曲を飛ばしたりできるようになったので大満足ですw

apk ファイルのダウンロードはこちら

以下一応動いてるけどエラーチェックとかしてないソース

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="jp8796.motoactv.musicbutton"
    android:versionCode="3"
    android:versionName="1.1" >

    <uses-sdk android:minSdkVersion="10" />
    <supports-screens android:smallScreens="true"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <receiver android:name=".MediaButtonIntentReceiver" android:exported="true">
            <intent-filter>
                <action android:name="com.motorola.android.HEADSET_KEY_LONG_PRESS" />
                <action android:name="com.motorola.music.KEY_DOWN_TRIGGERED" />
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>
    </application>
</manifest>
package jp8796.motoactv.musicbutton;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.KeyEvent;

public class MediaButtonIntentReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if(action.equalsIgnoreCase("android.intent.action.BOOT_COMPLETED")){
        	WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        	wifiManager.setWifiEnabled(true);
        }
        if(action.equalsIgnoreCase("com.motorola.android.HEADSET_KEY_LONG_PRESS")){
        	Intent next = new Intent("com.android.music.musicservicecommand.next");
        	next.putExtra("cmd", "next");
        	context.sendBroadcast(next);
        }else if(action.equalsIgnoreCase("com.motorola.music.KEY_DOWN_TRIGGERED")){
        	Intent startstop = new Intent("android.intent.action.MEDIA_BUTTON");
        	Bundle b = new Bundle();
        	KeyEvent ke = new KeyEvent(0,0x55);
        	b.putParcelable("android.intent.extra.KEY_EVENT", ke);
        	startstop.putExtras(b);
        	context.sendBroadcast(startstop);
/*        	Intent startstop = new Intent("com.android.music.musicservicecommand.togglepause");
        	startstop.putExtra("cmd", "togglepause");
        	context.sendBroadcast(startstop);
*/
    	}
	}

}

なお、/system/app/G2Music.apk は適当に葬り去っといてください。

コメント

2 件のコメント on MOTOACTVでGoogle Musicを便利に使いたい

  1. masaya
    2012年1月25日 10:48 PM
  2. ようやく届きました。
    今週末は遊べそう。
    いろいろ参考にさせていただきます。

  3. Ken
    2013年5月6日 8:58 AM
  4. こんにちは。いつも参考にさせて頂いております。
    こちらの記事の「MOTOACTVMusicButton.apk」のリンクが切れております。
    もし可能でしたら再アップを是非お願い致します。