読者です 読者をやめる 読者になる 読者になる

さまよえる、Android

Androidのプログラミングで便利なことや残しておきたいことを残しておく。もしオススメのライブラリがあったら教えてくださいね。

AndroidからMacのlocalhostにアクセスする。

アプリからlocalhostに接続したい

MacApacheをインストールしてテストサーバーを構築し、Androidアプリからアクセスしたい
しかし、localhostにアクセスできない。

出来る

ぐぐったら解決できた。AndroidをUSBでMacに接続し、Chromeに下のURLを入力する。

Macchrome

chrome://inspect/#devices

AndroidChromeを起動

端末名が表示される

f:id:araiyusukej:20170327095632p:plain

設定

localhost:8080に設定し、Androidのコードのドメインlocalhost:8080に変更

AndroidMac両方のChromeを起動しておけば、Androidのアプリからlocalhostにアクセスすることができるようになる。

RatingBarの実装

アクティビティ

public class MainActivity extends AppCompatActivity  implements RatingBar.OnRatingBarChangeListener {

    RatingBar mRatingBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRatingBar = (RatingBar) findViewById(R.id.rating);
        mRatingBar.setOnRatingBarChangeListener(this);
        //最大星数
        mRatingBar.setNumStars(6);
        // ステップ
        mRatingBar.setStepSize(1);
        // レーティングをセットする
        mRatingBar.setRating(3);
    }

    @Override
    public void onRatingChanged ( RatingBar ratingBar, float rating, boolean fromUser ) {
        Toast.makeText(getApplicationContext(),
                String.valueOf(ratingBar.getRating()), Toast.LENGTH_SHORT).show();
    }

}

xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    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="jp.co.araiyusuke.ratingbar.MainActivity">
    <RatingBar
        android:id="@+id/rating"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>

Herokuでアクセス制御を実装する(PHP)

IP取得

HerokuのPHPからIPを取得するには、$_SERVER["REMOTE_ADDR"]ではなく、$_SERVER['HTTP_X_FORWARDED_FOR']を利用する。Herokuのシステムはクライアントとサーバーの間に、ロードバランサーという負荷分散システムの仕組みが導入されているらしく、$_SERVER["REMOTE_ADDR"]には、ロードバランサーのIPが代入されている。

<?php
$ipAddress = $_SERVER['HTTP_X_FORWARDED_FOR'] ;

echo $ipAddress . "<br>";
echo gethostbyaddr($ipAddress);
?>

.htaccess

SetEnvIf X-Forwarded-For 124.***.***.*** denyIp1
SetEnvIf X-Forwarded-For 124.***.***.*** denyIp2

order allow,deny
allow from all
deny  from env=denyIp1
deny  from env=denyIp2