サンプルプログラム工場

AAKAKA Appで使われているプログラムのサンプルコードをそのまま公開!

サンプルプログラム工場 > android > [Android]設定画面を一定回数開くごとにポップアップダイアログを表示するサンプル#trySocialButton00
Google Play AAKAKAxSOFTへ

[Android]設定画面を一定回数開くごとにポップアップダイアログを表示するサンプル#trySocialButton00

実行ファイル(APK)やサンプル(zip)をダウンロードする
trySocialButton00の実行イメージ

設定画面を開くと一定回数ごとにポップアップするダイアログを作る。
例えば設定アクティビティを5回開くたびに表示する、とか
「もう開かない」ボタンを押すと開かなくなるとか。
ボタンをクリックするとツイートできるようにする。
ついでにフェイスブックやツイッターへのリンクも

●検索した事
android preferenceActivity
android social button
android activity facebook
android activity twitter
DialogFragment android バージョン
PreferenceActivity 呼び出し 表示
DialogFragment 呼び出し
support.v4 PreferenceActivity
URIエンコード android
android Intent facebook share
android dialog 閉じないように

●開発環境
 Eclipse IDE バージョン: 4.2.1

package com.example.trysocialbutton00;

import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;

/**
 * メインのアクティビティ
 * @author a5
 *
 */
public class MainActivity extends Activity {

	// ______________________________________________________________________________
	@Override	// 作成時に呼び出される
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	// ______________________________________________________________________________
	@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;
	}
	
	// ______________________________________________________________________________
	/**
	 * クリックされたときに呼び出される
	 * @param view	ビュー
	 */
	public void onClick_openSettings(View view) {
		// IntentでPreferenceActivityを呼び出す
		// AndroidManifest.xmlに対してActivityの登録を忘れない。
		// 登録しないとエラー出る
		Intent intent = new Intent(this, Settings.class);
		startActivity(intent);	
	}

}

設定画面

package com.example.trysocialbutton00;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.net.Uri;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.preference.Preference.OnPreferenceClickListener;
import android.text.AndroidCharacter;
import android.util.Log;
import android.view.ContextThemeWrapper;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.RatingBar;
import android.widget.Toast;

/**
 * セッティングアクティビティ
 * @author a5
 *
 */
public class Settings extends PreferenceActivity {

	private static final String TAG = "Settings";
	
	// ダイアログを表示するインターバル
	private static final int VOTE_DLG_SHOW_COUNT_DOWN_INTERVAL = 5;
	
	// Preferenceのダイアログをインターバルのキー
	private static final String VOTE_DLG_SHOW_COUNT_DOWN_PREF_KEY = "vote_countdown";
	
	// ______________________________________________________________________________
	@SuppressWarnings("deprecation")
	@Override	// 作られたときの呼ばれる
	protected void onCreate(Bundle savedInstanceState) {
		
		super.onCreate(savedInstanceState);
		
		// 設定プリファレンスを作る
		this.addPreferencesFromResource(R.xml.settings);
		
		// 表示するタイミングかどうか調べる
		if (this.isShowVoteDialog()) {
			
			// ダイアログを表示する
			this.showVotePopupDialog();
		}
		
		//_____________________________________
		// PreferenceActivityでtwitterボタンが押された
		this.getPreferenceManager()
			.findPreference("key_twitter")
			.setOnPreferenceClickListener(new OnPreferenceClickListener() {
				// ______________________________________________________________________________
				@Override	// クリックされた
				public boolean onPreferenceClick(Preference preference) {
					
					// ツイッターへ行く
					gotoTwitter();
					return true;
				}
			});
		
		//_____________________________________
		// PreferenceActivityでfacebookでいいね!ボタンが押された
		this.getPreferenceManager()
			.findPreference("key_facebook")
			.setOnPreferenceClickListener(new OnPreferenceClickListener() {
				// ______________________________________________________________________________
				@Override	// クリックされた
				public boolean onPreferenceClick(Preference preference) {
					
					// フェイスブックへ行く
					gotoFacebook();
					return true;
				}
			});
		
		//_____________________________________
		// PreferenceActivityでカウントダウンをリセットボタンが押された
		this.getPreferenceManager()
			.findPreference("key_clear_countdown")
			.setOnPreferenceClickListener(new OnPreferenceClickListener() {
				// ______________________________________________________________________________
				@Override	// クリックされた
				public boolean onPreferenceClick(Preference preference) {
					
					Toast.makeText(getApplicationContext(), "カウントダウンを再開", Toast.LENGTH_SHORT).show();
					
					// カウントダウンを再開
					updateCountdown(VOTE_DLG_SHOW_COUNT_DOWN_INTERVAL - 1);

					return true;
				}
			});
		
		//_____________________________________
		// PreferenceActivityでカウントダウンをリセットボタンが押された
		this.getPreferenceManager()
			.findPreference("key_show_vote_dialog")
			.setOnPreferenceClickListener(new OnPreferenceClickListener() {
				// ______________________________________________________________________________
				@Override	// クリックされた
				public boolean onPreferenceClick(Preference preference) {
					
					// ダイアログを表示する
					showVotePopupDialog();
					return true;
				}
			});
	}
	
	// ______________________________________________________________________________
	/**
	 * Voteダイアログを表示するかどうか
	 * @return true: 表示する
	 */
	private boolean isShowVoteDialog() {
		
		// プリファレンスを取り出す
		SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
		int countDown = sp.getInt(VOTE_DLG_SHOW_COUNT_DOWN_PREF_KEY, 0);
		Log.i(TAG + "IsShowVoteDialog", "countDown: " + countDown);
		
		Toast.makeText(
				this.getApplicationContext(),
				countDown != -1 ? "ダイアログ表示まであと:" + countDown : "ダイアログは表示されません。",
				Toast.LENGTH_SHORT).show();
		
		// カウントダウンがマイナスの場合はもう表示する必要はない
		if (countDown < 0) {
			return false;
		}
		
		// カウントダウン
		if (countDown == 0) {
			// またしばらく表示しない
			this.updateCountdown(VOTE_DLG_SHOW_COUNT_DOWN_INTERVAL - 1);
			return true;
		}
		
		// 次のカウントへ
		this.updateCountdown(countDown - 1);
		
		return false;
	}
	
	// ______________________________________________________________________________
	/**
	 * カウントダウンを更新する
	 * @param count 次のカウント
	 */
	private void updateCountdown(int count) {
		
		// プリファレンスを取り出す
		SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
		
		// 値を更新する
		Editor edit = sp.edit();
		edit.putInt(VOTE_DLG_SHOW_COUNT_DOWN_PREF_KEY, count);
		edit.commit();
	}
	
	// ______________________________________________________________________________
	/**
	 * ポップアップダイアログを表示する
	 */
	private void showVotePopupDialog() {

		// ダイアログを作る
		LayoutInflater inflate = LayoutInflater.from(this);
		inflate.inflate(R.layout.dialog_vote_popup, null);
		final View view = inflate.inflate(R.layout.dialog_vote_popup, null);
		
		
		// アラートダイアログを作る
		final Dialog dlg = new AlertDialog.Builder(this)
			.setTitle("気に入っていただけましたか?")
			.setView(view)
			.create();
		
		// ダイアログの外側をタッチしても閉じない様にする
		dlg.setCanceledOnTouchOutside(false);


		// ダイアログボタンの設定
		// 
		
		// レーティングバー
		final RatingBar rating = (RatingBar)view.findViewById(R.id.dlg_rating);
		// レーティングバーはsetOnClickListenerが効かない、なのでOnTouchListenerを使ってクリックイベントを拾う
		rating.setOnTouchListener(new OnTouchListener() {
			
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				// 指が離された
				if (event.getAction() == MotionEvent.ACTION_UP) {
					// インテントで呼び出す
					String ratingUrl = "https://play.google.com/store/apps/details?id=com.aakaka.live.kaleidoscope_free";
					Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(ratingUrl));
					Settings.this.startActivity(intent);					
				}
				return false;
				
			}
		});
		
		// ツイッター
		final Button tweetButton = (Button)view.findViewById(R.id.dlg_tweet);
		tweetButton.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {

				// ツイッターへ移動する
				gotoTwitter();

			}
		});
		
		
		// Facebook
		final Button facebookButton = (Button)view.findViewById(R.id.dlg_facebook);
		facebookButton.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {

				// フェイスブックへ移動する
				gotoFacebook();
			}
		});
		
		// 表示しない
		final Button neverShowButton = (Button)view.findViewById(R.id.dlg_never);
		neverShowButton.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// カウントダウン終了
				updateCountdown(-1);
				dlg.cancel();
			}
		});
		
		// 評価した
		final Button votedButton = (Button)view.findViewById(R.id.dlg_voted);
		votedButton.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				
				Toast.makeText(Settings.this.getApplicationContext(), "ご評価ありがとうございます!", Toast.LENGTH_SHORT).show();
				
				// カウントダウン終了
				updateCountdown(-1);
				dlg.cancel();
			}
		});
		
		// 後で評価する
		final Button cancelButton = (Button)view.findViewById(R.id.dlg_cancel);
		cancelButton.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				dlg.cancel();
			}
		});
	
		

		dlg.show();
	}
	
	// ______________________________________________________________________________
	/**
	 * Twitterへ移動する
	 */
	private void gotoTwitter() {
		
		final String tweet = "AAKAKAxSOFTではいろんなアプリを作っているよ!";
		final String url = "https://play.google.com/store/search?q=AAKAKAxSOFT";
		Uri uriTweet;
		try {
			// インテントで送信する。もしツイッターアプリがあるときはそちらから勝手に送信されるようになる
			uriTweet = Uri.parse("https://twitter.com/intent/tweet?text=" + URLEncoder.encode(tweet, "UTF-8") + "&url=" + url);
			Intent intent = new Intent(Intent.ACTION_VIEW, uriTweet);
			Settings.this.startActivity(intent);

		} catch (UnsupportedEncodingException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}

	}
	
	// ______________________________________________________________________________
	/**
	 * フェイスブックへ移動する
	 */
	private void gotoFacebook() {
		
		// 単純にFacebookのページへ飛ばす
		// テキストの送信がしたい場合はFaceBook SDKを使って処理をしなければならないので、ちょっと面倒
		final String facebookUrl = "https://www.facebook.com/AAKAKAxSOFT";
		
		// Intentで飛ばす
		Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(facebookUrl));
		Settings.this.startActivity(intent);

	}
}

ポップアップダイアログ用のXMLレイアウト

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="match_parent"
	android:layout_height="match_parent"
	android:background="#ffffff"
	android:orientation="vertical" >

    <TextView
    	android:id="@+id/textView1"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:layout_gravity="left"
    	android:layout_marginLeft="5dp"
    	android:text="ご評価ください。"
    	android:textAppearance="?android:attr/textAppearanceLarge"
    	android:textColor="#000000" />

    <TextView
    	android:id="@+id/textView3"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:layout_marginLeft="3dp"
    	android:layout_marginRight="3dp"
    	android:text="よい評価は、よりよいアプリの開発につながります。"
    	android:textColor="#afafaf" />

    	<!-- android:text="よい評価がいただけると、よりよいものを作ることができます!" /> -->

    <RatingBar
    	android:id="@+id/dlg_rating"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:layout_gravity="center"
    	android:numStars="5"
    	android:rating="4.7" />

    <TextView
    	android:id="@+id/textView2"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:layout_marginLeft="5dp"
    	android:text="みんなに教える"
    	android:textAppearance="?android:attr/textAppearanceLarge"
    	android:textColor="#000000" />

    <LinearLayout
    	android:layout_width="match_parent"
    	android:layout_height="wrap_content"
    	android:orientation="vertical" >

    	<Button
    		android:id="@+id/dlg_tweet"
    		android:layout_width="wrap_content"
    		android:layout_height="wrap_content"
    		android:text="ツイッターでつぶやく" />
    	<Button
    		android:id="@+id/dlg_facebook"
    		android:layout_width="wrap_content"
    		android:layout_height="wrap_content"
    		android:text="フェイスブックでいいね!" />

    </LinearLayout>

    <View
    	android:id="@+id/view1"
    	android:layout_width="wrap_content"
    	android:layout_height="2dp"
    	android:layout_marginTop="10dp"
    	android:background="#555555" />

    <LinearLayout
    	android:layout_width="match_parent"
    	android:layout_height="wrap_content" >

    	<Button
    		android:id="@+id/dlg_never"
    		android:layout_width="wrap_content"
    		android:layout_height="wrap_content"
    		android:text="表示しない" />

    	<Button
    		android:id="@+id/dlg_voted"
    		android:layout_width="wrap_content"
    		android:layout_height="wrap_content"
    		android:text="評価した" />

    	<Button
    		android:id="@+id/dlg_cancel"
    		android:layout_width="match_parent"
    		android:layout_height="wrap_content"
    		android:layout_gravity="right"
    		android:text="後で評価" />
    </LinearLayout>

</LinearLayout>

設定画面用のXMLファイル

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <PreferenceScreen android:title="ツイッターでつぶやく" android:key="key_twitter" android:icon="@drawable/ic_launcher"></PreferenceScreen>
    <PreferenceScreen android:title="facebookでいいね!" android:key="key_facebook" android:icon="@drawable/ic_launcher"></PreferenceScreen>
    <PreferenceScreen android:key="key_clear_countdown" android:title="カウントダウンを初期化" android:icon="@drawable/ic_launcher"></PreferenceScreen>
    <PreferenceScreen android:key="key_show_vote_dialog" android:title="ダイアログを表示する" android:icon="@drawable/ic_launcher"></PreferenceScreen>
</PreferenceScreen>

マニフェストファイル、設定画面のアクティビティ登録を忘れずに

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

	<uses-sdk
		android:minSdkVersion="8"
		android:targetSdkVersion="17" />

	<application
		android:allowBackup="true"
		android:icon="@drawable/ic_launcher"
		android:label="@string/app_name"
		android:theme="@style/AppTheme" >
		<activity
			android:name="com.example.trysocialbutton00.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>
		<!-- PreferenceActivity -->
		<activity
			android:name="com.example.trysocialbutton00.Settings"
			android:label="@string/app_settings"
			android:exported="true">
		</activity>
	</application>

</manifest>

サンプルプロジェクトをダウンロード

, , , , ,

[Android]JNI(ネイティブコード)のサンプル#tryJni00 [Android]アプリを閉じても常駐してバックグラウンドで処理をするサンプル...

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>