主にandroidとかのメモ

すぐにできる!Android用艦これプレイヤーを作ろう!

タイトルは釣りですが、ただのWebViewサンプルレベルなので。
本当のタイトルは「Webviewでflash動かすメモ」です。ごめんなさい。

初めに。
flashplayerはadobeのサイトから4.0用のapkを落として入れておく(4.3でも使えました)
ただGalaxyS4は、なぜかFlashPlayerが途中で止まってしまい、動きませんでしたのでダメぽいです。

手持ちでの動作確認済み:
GalaxyNote(4.1), GalaxyNexus(4.3), Nexus7(4.3), XperiaZ(4.1)

あとflashplayerの仕様なのか、タップするとダブルタップになるようで、補給とかチェックボックスがON→OFFってなります。
ロングタップすると良いです。

■前準備

File>New Project>Android – Android Application project
1
ICS以降を指定しました。ICS未満は絶滅した方がいい。

あとは全部デフォルトのまま進む。
ビルドしてサンプルが動き、Hello,worldが表示されることを確認。

■AndroidManifest
・通信が必要なのでandroid.permission.INTERNETをつける。
・MainActivityにandroid:screenOrientation=”sensorLandscape”つける(横向き固定にしたい場合)
・画面回転などで再描画かかると、WebViewがリロードされてしまうので
android:configChanges=”keyboardHidden|orientation|screenSize”を書いておく。

横画面固定にして念のためkeyboardHidden|orientation書いて安心してたら、画面ロック⇒復帰で再描画かかってハマったよ。screenSize書いたら大丈夫になった。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.akagiplus"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="14" />
<uses-permission android:name="android.permission.INTERNET"/>

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.akagiplus.MainActivity"
android:label="@string/app_name"
android:screenOrientation="sensorLandscape"
android:configChanges="keyboardHidden|orientation|screenSize" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

■レイアウト
/res/layout/activity_main.xmlをひらく
Hello,worldのTextBox消して、全面WebViewにする。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <WebView
android:id="@+id/webView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" />
</RelativeLayout>

WebViewの余白が邪魔なので、android:paddingXXXXX4行は消したほうがいいです。

■MainActivity

/src配下のMainActivity.javaを開く。

●onCreate()で
・WebViewを取得、各種設定をする
・画面広くして表示したいページ(艦これのURL)を指定する。
・javascriptとflashplayer(別途インストール必要)を有効にする。
・UAをPCのchromeと同じに偽装(AndroidのUAだと艦これが動かないから)

onCreateの処理書けば、もうDMMのログインページが出るはず。
ログインしたらちゃんと遊べます。
device-2013-08-28-005410

public class MainActivity extends Activity {
	private WebView mWebView;
	private Activity mActivity;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		mActivity=this;

		// タイトルバーを消す(画面広くしたい)
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		// ステータスバーを消す(画面広くしたい)
		getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

		setContentView(R.layout.activity_main);

	    String url ="http://www.dmm.com/netgame/social/-/gadgets/=/app_id=854854/"; // 艦これのURL

	    //WebViewの各種設定
	    mWebView = (WebView) findViewById(R.id.webView1);
	    mWebView.setVerticalScrollbarOverlay(true);
	    mWebView.getSettings().setLoadWithOverviewMode(true);
	    mWebView.getSettings().setUseWideViewPort(true);

	    mWebView.getSettings().setPluginState(PluginState.ON); //flash
	    mWebView.getSettings().setJavaScriptEnabled(true); //js
	    mWebView.getSettings().setBuiltInZoomControls(true); //+-のズーム表示
	    mWebView.getSettings().setUserAgentString("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36");

	    mWebView.setWebViewClient(new WebViewClient());
	    mWebView.loadUrl(url);

	}

	@Override
	protected void onResume() {
       super.onResume();
       mWebView.onResume();
	}

	@Override
	protected void onPause() {
        mWebView.onPause();
	    super.onPause();
	}

	@Override
	protected void onDestroy(){
		mWebView.stopLoading();
		mWebView.setWebViewClient(null);
		mWebView.setWebChromeClient(null);
		mWebView.removeAllViews();
		mWebView.destroy();
		mWebView = null;
		super.onDestroy();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

●onResume()とonPause()
webviewに止まってね、動いてねと指示だししないと、電源キー押して画面消しても動き続けます。
電車内で「か・ん・こ・れ!」など鳴り響いたらたまりませんね?

●onDestroy()
しっかりWebViewを殺しておきます。

●その他
onCreateOptionsMenuは使ってないので消していいです。

艦コレは通信エラー起こると「リロードしてください」となるので、メニューにリロードを作ってみるのもいいでしょう。

あとバックキー塞いどかないと、間違って押してえらいことになりますので、塞いでおきましょう。

適当な場所に追記します。

    @Override
    public boolean onKeyDown( int keyCode, KeyEvent event ) {
        if ( event.getAction() == KeyEvent.ACTION_DOWN
                && keyCode == KeyEvent.KEYCODE_BACK ) {

        	//終了ダイアログ
        	AlertDialog.Builder alertDialog=new AlertDialog.Builder(this);

            // ダイアログの設定
            alertDialog.setTitle("確認");      //タイトル設定
            alertDialog.setMessage("終了するのです?");  //内容(メッセージ)設定

            alertDialog.setPositiveButton("応", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    // OKボタン押下時の処理
                	mActivity.finish();
                }
            });
            alertDialog.setNegativeButton("否", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                	//なにもしない
                }
            });

            alertDialog.show();

            return true;
        }
        return super.onKeyDown( keyCode, event );
    }

device-2013-08-28-010402

ばっちりガード!

 

■今後の課題

flashplayerのインストールチェックして、なければ
Uri uri = Uri.parse(“http://helpx.adobe.com/jp/flash-player/kb/228683.html#main_Android_Flash_Player______”);
でブラウザ起動してあげると親切ですね。

あと艦これのページのソースgetして、flash部分だけ全画面表示するように書き換えると良いと思うけど、時間かかりそうだったので諦めました。