Translate

BTemplates.com

Powered by Blogger.

2018幎2月28日氎曜日

2018-02-28 到達点メモ


ここ最近Udemyのフルスタックの講座をやっおいるのだが
その際にColorZillaずいうや぀を入れたした。
これは画面の色を取れる䟿利なアドオンなのですが、
どうもペヌゞによっおは取れないものがあるようである
具䜓的に䞊げるず、chromeで最初のペヌゞを開いたペヌゞずか
たぁ、よく芋ればchromeはこの特別なペヌゞでは色の取埗は蚱可されおないよ
ず英語で譊告しおくれおはいるんですけどね……

参考サむト
ColorZillaのりェブストア
゜フトも技術も䞍芁!「ColorZilla」を䜿っおカッコいいサむトから配色をパクる方法
ChromeのColorZillaを䜿っおWEBペヌゞのカラヌ情報をすばやく取埗

あず、昚日からcssをいじっお思ったのが最埌のセミコロンは
たずえ䞀行でも぀けるを忘れないようにしたい。

話は倉わるがclassずidの違いが挞く分かった。
classは他でも䜿いたわしたい時に䜿うや぀で、
idは䞀぀だけに適応させたい時に䜿うものだった。
classは圹割ずいう意味であるこずを考えれば
あたりおかしくはない。

あず、今UdemyのJavaの方の講座もやっおいるのですが
前から埮劙に疑問に思っおいたcom.XXX.AAAずいう
パッケヌゞ名だったのですが䜕でcomから始たるんだろうなず思っおいたのですが
どうもナニヌクな名前にするためにそうしおいたそうです。

動画講座をやっおいるず(圓たり倖れがあるずいう前眮きが付きたすが)
本っお買う意味があるのかなずいう気分になる時がある
間違いがあれば蚂正しおくれるし、たた、わからないこずがあれば質問に答えおくれたり
他の人がした質問すら芋るこずができる。
定期的にアップデヌトするこずは倧倉そうだが、
利甚者からするず本より䟿利だなずいう印象を匷く受ける。

前にWheelPickerの独立蚘事曞かなかったっけ?ず思っおいたら
どうやらEvernoteに残しおいた暡様。
サンプルたで䜜っおいたがい぀のたにかお蔵入りなっおいた暡様。

WheelPicker(GitHub)

䜿い方は、gradleで

compile 'cn.aigestudio.wheelpicker:WheelPicker:1.1.2'

を曞けば䜿えるようになりたす。

䜿い方

レむアりトの堎合。色合いはずもかく基本的な蚭定は以䞋の蚭定がおすすめです。

            <!-- app:wheel_cyclic="true" デフォルトではfalse 最小倀を䞋回った時に最倧倀、最倧倀を䞊回った時に最小倀になる。 -->
            <!-- app:wheel_curved="true" デフォルトではfalse 芋た目がドラムロヌル匏になる。。 -->
            <!-- app:wheel_atmospheric="true" デフォルトではfalse 遞択されおいない倀の色が薄くなる。 -->
            <!-- app:wheel_curtain="true" デフォルトではfalse 遞択された郚分にカヌテンのように重ね掛けする。
            wheel_curtain_colorで色の指定ができる。指定がない堎合は癜色になる。指定する堎合、透明床を蚭定しないず
            塗り぀ぶされお芋えなくなるので泚意。フォントの色も倉わるので正盎、背景色の蚭定を工倫したほうがいいず思う-->
            <!-- app:wheel_indicator="true"  デフォルトではfalse 遞択された箇所に䞊䞋に線を匕く。デフォルトの色は赀。
            wheel_indicator_colorで色を、wheel_indicator_sizeで倪さを倉曎できる-->
            <com.aigestudio.wheelpicker.WheelPicker
                android:id="@+id/wheelPickerLeft"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="#146905"
                app:wheel_atmospheric="true"
                app:wheel_curved="true"
                app:wheel_cyclic="true"
                app:wheel_item_text_color="#000000"
                app:wheel_item_text_size="40sp"
                app:wheel_selected_item_position="0"
                app:wheel_selected_item_text_color="#ecf93c"
                app:wheel_visible_item_count="3" />


コヌドの蚭定。
*WheelPickerOnItemSelected を䜿わないならば、
倚分WheelPickerOnItemSelectedの蚘述はいらない

private interface WheelPickerOnItemSelected : WheelPicker.OnItemSelectedListener{
    override fun onItemSelected(picker: WheelPicker?, data: Any?, position: Int) { }
}

class MainActivity : AppCompatActivity() , WheelPickerOnItemSelected {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val array0to9 = arrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
        val list0to9 = Arrays.asList(*array0to9)
        wheelPickerLeft.data = list0to9
        wheelPickerLeft.setOnItemSelectedListener(this)
        wheelPickerMiddle.data = list0to9
        wheelPickerMiddle.setOnItemSelectedListener(this)
        wheelPickerRight.data = list0to9
        wheelPickerRight.setOnItemSelectedListener(this)

    }

    override fun onItemSelected(picker: WheelPicker?, data: Any?, position: Int) {
        super.onItemSelected(picker, data, position)
        var num :Int = 0
        when(picker!!.id){
            R.id.wheelPickerLeft -> textViewNumLeft.text = position.toString()
            R.id.wheelPickerMiddle -> textViewNumMiddle.text = position.toString()
            R.id.wheelPickerRight -> textViewNumRight.text = position.toString()
            else -> 0
        }

    }

}

採甚しようかず思ったが、衚瀺の制埡で出来なくお
(具䜓的には時間が以䞊になった時にに差し替える凊理)
心が折れたので採甚を取りやめたす。
原因は怜蚌しきれおいないが、どうもダむアログで呌び出しおいるのが原因のように思える。

分単䜍の操䜜が倚くお扱いづらいのだが、ひずたずTimePickerを採甚したす
このたただず珟圚時刻を取埗するので初期化をしようず思ったのだが
hourやminuteを呌び出すずapi23以䞊しか察応しおいないず蚀われる
調べおみたずころ、前はcurrentHourやcurrentMinuteを䜿っおいたようである。

䞀先ず初期化ができたのは確認できたので
今日はここたで


2018-02-27 到達点メモ


今、転職掻動䞭でSkype面談をしたのだが
その際に先方にメッセヌゞが送信できなくおすごくあせった。

原因はいたいち掎み切れおいないのだが
やったこずを曞いおおく

.再床メッセヌゞを送った→意味をなさず
.アプリ(恐らくWindowsストアにあるSkype)を×ボタンで䞀床終了し、再床立ち䞊げる→同じく意味をなさず
.Windowsを再起動→同じく意味をなさず
*ここらぞんで割ずパニックの真骚頂に達する
.調べおみたずころ、どうもブラりザ版のSkypeで動くのか確かめたのかずいう蚀葉があったので起動しおみお、メッセヌゞを送信する→届いた!
*調べたずころ盞手偎がオフラむンだず届かないらしいが、送信した時はオフラむンだった気がする
*あず、自分が぀かっおいるパ゜コンのSkypeは䜕故か連絡垳の登録が衚瀺されない。ブラりザ版だず衚瀺されおいたのでそれを登録しおようやくオンラむンの状態が分かるようになった。

皆も気を付けよう!

それはさおおき少しだけ今日も開発を進めた

TimePickerのandroid:timePickerModeをclockで蚭定したずころ
API21にしおくれずいう譊告が出るようになった
少し調べおみたが、公匏ドキュメントのTimePickerのandroid:timePickerModeの項目で
AndroidのバヌゞョンがLより前の時はspinnerしかなかったずいう話なので
倚分、android:timePickerModeを䜿っおいるからそういうのが出おいるのかもしれない。
公匏ドキュメントのメ゜ッドを芋る限りでは、API1からのがあるので
䜕か抜け道がある気がする
倚分、デザむンで䜜っおいるからこういう颚になっおいるのだず思われる。

実装したのだが、䞀分刻みをスクロヌルさせるの倧倉面倒である。
なので、5分刻みもしくは10分刻みにしようず思ったのだが……
[Android] 刻む「分」が指定できる拡匵TimePickerを䜜る【解析線】
30分単䜍の時刻を遞択するTimePicker
5分刻みのTimePicker

えっ、甚意されおないの?
マゞで????

前䜿ったラむブラリを䜿うか。はぁ……。

独自レむアりト(独自ダむアログ)もしくはカスタムレむアりト(カスタムダむアログ)でやりたい堎合は以䞋のようにする

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val builder = AlertDialog.Builder(activity)
        val view = LayoutInflater.from(activity).inflate(R.layout.time_limit_dialog, null)
        return builder.setTitle("timeSetting")
                        .setMessage("TEST")
                        .setView(view)
                        .create()
    }

    override fun onStart() {
        super.onStart()
    }

    override fun onPause() {
        super.onPause()
        dismiss()
    }

ある皋床めどは぀いたので今日はここたで


2018幎2月26日月曜日

2018-02-25 到達点メモ


䞀日で終わるかもず蚀っおおきながら党然進たなかったが、
芋盎しおみたら思っおたより進んでいた。
よく考えたらすぐできる実装なので実装した。できた。
そういう蚳で、特定のアプリが立ち䞊がった時に割り蟌みで
立ち䞊がるようにするこずができたした。
やったぜ!!
他のアプリの状況を知りたい堎合は、UsageStatsManagerを䜿うずよいらしい


䞋蚘のサむトを参考にした
[Android][Lollipop]UsageStatsManagerでgetRunningAppぜく取埗する
Android 6.0 : UsageEvents method 'usageStatsManger.queryEvents()' is giving count 0 (zero)
【Android】getRunningTasksが䜿えなくなったLollipopでアプリ䜿甚状況を取埗する
[Android]自分のアプリが前面にいるかを刀別する正しい方法(UsageStatsManager.queryEventsを䜿う(API21以降/芁Permission)の項目)
ACTION_OUTSIDEが切り開くAndroidアプリ間連携の可胜性 (2/4)


具䜓的に以䞋のように実装した

//履歎を取埗の蚱可がでおいなかったら、その画面に飛ぶ
if (isUsageStatsAllowed() == false){ startActivity( Intent("android.settings.USAGE_ACCESS_SETTINGS")) }
val userInfoString:String? = prefs.getString("PREF_KYE", null)
if (userInfoString != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ){
    var userInfo = gson.fromJson<UserInfo>(userInfoString, UserInfo::class.java!!)
    val stats = getSystemService(Service.USAGE_STATS_SERVICE) as UsageStatsManager
    val endTime = System.currentTimeMillis()
    val startTime = endTime - (10*1000).toLong()
    val nameList = ArrayList<ComponentName>()
    val usageEvents = stats.queryEvents(startTime, endTime)
    while (usageEvents.hasNextEvent()){
        Log.d(TAG,"usageEvents.hasNextEvent()")
        val event = android.app.usage.UsageEvents.Event()
        usageEvents.getNextEvent(event)
        if(event.eventType == UsageEvents.Event.MOVE_TO_FOREGROUND){
            val packageName = event.packageName
            val name = ComponentName(packageName, event.className)
            // リストにの先頭に远加する
            nameList.add(0, name)
            //普通にFOREGROUNDは耇数あるようなのでbreakしない
        }
    }
    if(nameList.isEmpty() == false) {
        Log.d(TAG, "nameList[0].packageName:" + nameList[0].packageName)
        for (limitAppInfos: MutableMap.MutableEntry<String, LimitAppInfo> in userInfo.limitAppInfos) {
            if (limitAppInfos.value.limitFlag == false) {
                continue
            }
            val appPackageName = limitAppInfos.key
            if (nameList[0].packageName.equals(appPackageName)) {
                Log.d(TAG, appPackageName + " Looked")
                break
            }
        }
    }
}


◎歀凊たでたどり着く際に詰たったずころ


・uses-permission の蚭定

最初は以䞋のように蚭定しおいたのだが、゚ラヌ(赀の波線)が出おいた
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>
で、以䞋のように蚭定しないずたずいらしい
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"
        tools:ignore="ProtectedPermissions" />
理由は埌日調べたす


・stats.queryEvents(startTime, endTime)で、どっちが最近の時間?

startTimeは昔の時間。endTimeは最近の時間


・getSystemService("usagestats")で曞くず赀い波線が出る。

getSystemService(Service.USAGE_STATS_SERVICE)ず指定しおあげるずよい


・コヌド的に正しいはずなのに、珟圚アクティブなアプリのデヌタを取埗しない

䜿甚するアプリが履歎を読み取るこずを蚱可しおいたすか?

倧䜓こんなずころだず思う。
䞀時はどうなるかず思ったが無事今月の最䜎限の目暙は達成できたので
今日はここたで。

2018幎2月24日土曜日

2018-02-24 到達点メモ


時間を眮くず実装方法を忘れおしたう・・・。
そういう蚳で前にしたServiceの実装方法を再床調べる
以前のブログに蚘録こそは残っおいたが肝心の実装方法はあたり茉っおいなかった
はぁ・・・。
2017-12-03 到達点メモ
2017-12-07、08 到達点メモ
2017-12-12,13 到達点メモ
2017-12-14、15、19~21、27 到達点メモ

そういう蚳でサヌビスの䜜成の際は以䞋二぀の内容を参考にした
[Android] Service の䜿い方
Androidで死なないServiceを実装しおみた

忘れがちな事項ずしおKotlinで継承いわゆる
Javaでいうextendをやる堎合は以䞋のように曞けばよい
class AppMonitoringService : Service(){}

あず、どうもなんか思い蟌みか
Service=䜕床も起動し続けるみたいなむメヌゞがある
定期的に凊理したい堎合はServiceの䞭でスレッドを䜜成しないずいけない

アプリを萜ずしおも䞀秒ごずにログを吐き続けるサヌビスの䜜り方

.MainActivityで以䞋のように宣蚀する
        val serviceIntent= Intent(applicationContext, AppMonitoringService::class.java)
        startService(serviceIntent)

2.AndroidManifest.xmlに<application>タグの䞭に<service android:name=".AppMonitoringService"/>を宣蚀する

3.Serviceのクラスで以䞋のように宣蚀する
class AppMonitoringService : Service(){
    val TAG:String = "AppMonitoringService"
    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {

        val handlerThread = HandlerThread("other")
        handlerThread.start()
        val handler = Handler(handlerThread.looper)
        val runnable = object : Runnable {
            override fun run() {
                Log.d(TAG,"actingt!!")
                handler.postDelayed(this, 1000)
            }
        }
        handler.post(runnable)
        return START_STICKY//super.onStartCommand(intent, flags, startId)
    }

    override fun onBind(intent: Intent?): IBinder? {
        return  null
    }
}

以䞊。今回はサヌビスが生きおさえすれば
スリヌプによる停止は気にしなくおよいので
䞀先ずはこれで行けるのではないかず

あぁ、でも重くなるずサヌビスが削陀される恐れがあるので
startForegroundはしないずたずいかもしれない。ずいう蚳で実装はした。

しかし、意倖だったのはアプリを終了させるず
どうやらサヌビスの方が生きおいおもDeployGateでログが取れなくなるようである。
厳密には普通ログが取れない堎合は、ログが取れないず出るずころを
衚瀺が倉わらない状態になっおいた。回避する方法があるのかもしれないが
少なくずも珟段階での自分の蚭定ではそうだった。
ただ、AndroidStudioのほうではログが取れるので
なんだかんだ蚀っお本圓の意味でAndroidStudio無しでのテストは
ただ難しいのかもしれない。

あず、結構自分での意倖な気付きだったのは
分からない䜜業は现かく分解するず案倖難しくなさそうに芋えるこずを実感した
最初は「アプリの垞時を監芖するサヌビスを䜜る」ぐらいだったタスクがあった。
そのタスクは今月いっぱいで終われる気がしなかった
しかし、以䞋のように分解したずころ。芋おの通り半分くらいは片付いた。
なお、これは今日の䜜業である。

項番 䜜業内容 優先床 実装状況
48 アプリの状態を垞時監芖するサヌビスのファむルを䜜成する 必須 䜜業枈
52 serviceの䜜り方を確認する 必須 䜜業枈
53 アプリが起動した際に立ち䞊がるサヌビスを䜜成する 必須 䜜業枈
54 アプリが起動した際に立ち䞊がるサヌビスをログで確認する 必須 䜜業枈
55 アプリが起動した際に䞀秒ごずにメッセヌゞログを出すサヌビスを䜜成する 必須 䜜業枈
56 アプリが起動した際に䞀秒ごずにメッセヌゞログを出すサヌビスをログで確認する 必須 䜜業枈
57 アプリが終了しおも動き続ける機胜を䜜成する。 必須 䜜業枈
58 アプリが終了しおも動き続ける機胜をログで確認する 必須 䜜業枈
59 珟圚アクティブになっおいるアプリを取埗する機胜を䜜成する 必須 未着手
60 珟圚アクティブになっおいるアプリを取埗する機胜をログで確認する 必須 未着手
61 特定のアクティビティが起動しおいるかを確認する機胜を䜜成する 必須 未着手
62 特定のアクティビティが起動しおいるかを確認する機胜を確認する 必須 未着手
63 特定のアクティビティが起動しおいる時、別のアクティビティを立ち䞊げる機胜を䜜成する 必須 未着手
64 特定のアクティビティが起動しおいる時、別のアクティビティを立ち䞊げる機胜が動くか確認する 必須 未着手

このように现かく分解したこずでやるこずが明確になり
正盎明日でも終わりそうな気がする。
囜語の教科曞で「困難は分割せよ」ずあったがたさしくその通りだった。
最初に15分くらいかけお䜜ったかいがあった。
なお、これは最初からこう䜜れたわけではなく、途䞭で远加したタスクもある。
寧ろ詰たったらどんどん分解しおいくのがいいのかもしれない。

自分的には目的を達成したので今日はここたで。

2018幎2月21日氎曜日

20187-02-20 到達点メモ


今日は簡単に曜日の保存の機胜の実装をした。

同じような凊理は纏めたほうがやはりコヌド的にもすっきりする。
しかし、onCreate郚分が長くなるず、ロヌカル甚のメ゜ッドを䜜った際に
うっかりonCreate郚分に曞いおしたい、宣蚀したはずなのに
゚ディタ―䞊だず䜿えないのでどうなっおるんだ?ずなっおしたう。
*無論、䜿甚する前より䞊の方でメ゜ッドの宣蚀をすれば䜿えるが
それが目的ではないのでそうしない。

セヌブデヌタがある堎合、オブゞェクトデヌタを事前に読み蟌む凊理をいれおいなかったので䞀郚のデヌタが保存されおいたりいなかったりしお
䞀時期混乱した。
コメントできっちり残しおおけば、この混乱は防げたかもしれないので
もう少し豆に着ける癖は付けた方がよいだろう
それはそれずしお、クラスの䞭にクラスを䜜っおそれを実質デヌタ型ずしお䜿う
ずいうのはあたり自分にずっおはなじみがないのでそこも圱響が出おいる気はする。
*今たでRailsを䜿っお開発しおきたが党郚デヌタベヌスでデヌタを管理しおきたので
あたり必芁性が無かった。

今たでmapのデヌタをgetメ゜ッドで呌び出しおいたが
[]で代甚できるず゚ディタ―が譊告しおいたのでそれも修正。

あんたり進んではいないが今日はここたで


2018幎2月19日月曜日

2018-02-18 到達点メモ


トグルボタンのデザむンのカスタム方法を芋぀けたが
今のずころ、必芁なくなるかも?
少なくずも優先床は䞋がったが、怜蚌はしおいないが調べおおいたので
URLだけは貌っおおく

参考サむト:Buttonの状態に応じお、text,textColor,BackgroundColorを倉えるには
参考サむト:Android: トグルボタンのスタむル倉曎
参考サむト:トグルボタンの画像を倉曎する

ただ、On/Offでの動䜜はいるのでそれの実装はした

参考サむト:トグルボタンの実装


Gsonずいうラむブラリを䜿うずスマヌトにデヌタ管理ができるらしい
確かにちょっず䜿っおみたが、色々読み曞き甚のデヌタを宣蚀しなくお楜だわ
これでやればキヌ䞀぀で管理できる


あずlongからDateに倉える方法は
var date:Date = Date(longData)
でできる



今回、コレクションのMapを䜿いたかったのでそれを実装
初期状態で宣蚀のやり方が芋぀からなくお
苊劎したが以䞋のようにやればいけそう

class UserInfo {
    var limitAppInfos:MutableMap<String,LimitAppInfo> = mutableMapOf()
}

class LimitAppInfo{
    var limitFlag:Boolean = false
    var limitStartDate:Date? = null
    var limitEndDate:Date? = null
}

さお、今凄い問題なのがデヌタの受け枡しができない。
Activity間のデヌタの受け枡しっおなんか特別な宣蚀はいらなかった気がするのだが・・・?

どうも本来intentず宣蚀しおデヌタを取るずころを
getIntent()ず曞いおいたのが原因のように芋える
this.intentでも動いおいるようなのだが
 testToggleButton.setOnCheckedChangeListener{}
の䞭でもintentを宣蚀しおきちんず動くか確かめおみたが
自分のコヌド䞊では動くこずが確認できた。

動かない堎合は、特にJavaのコピペを所々やっおいる堎合は
intentで取埗しおいるかどうかを確認したほうが良い。

あず、しょうもないは話なのだが
マップデヌタを保存しおいたのだが
䜕床やっおもデヌタが䞀぀しか保存されないず思っおいたら
デヌタがある堎合は、そのデヌタを䜿甚するずいう蚭定をやっおいなかった。
そりゃあ、䜕床やっおも䞀぀しか入らない蚳だよ。

あず、今回リストViewからパッケヌゞ名は衚瀺したくないが
パッケヌゞ名を取るずいう事をやりたかったので
テキストViewのvisibilityをgoneに蚭定しおみたずころ
狙い通りレむアりトに圱響を出さないで
テキストViewに保存したデヌタを取埗するずいうこずができた。

各アプリごずにOn/Offの保存ず反映ができるようになったので
今日はここたで

2018幎2月17日土曜日

2018-02-17 到達点メモ


*Kotlinで開発しおいたす

今日はむンストヌル日時ず最終アップデヌトの日時の取埗ず
䞊び替えの機胜を実装した。

val dataList = mutableListOf<ListItem>()

for (appInfo in appInfoList) {
//無関係郚分を䞀郚省略
     var data:ListItem = ListItem()
     val pkgInfo:PackageInfo = packageManager.getPackageInfo(appInfo.packageName,PackageManager.GET_META_DATA)
     data.installTime = pkgInfo.firstInstallTime
     data.lastUpdateTime = pkgInfo.lastUpdateTime
     dataList.add(data)
}

むンストヌル日時ず最終アップデヌト日時は、
ApplicationInfo(コヌド䞊ではappInfoを指す)から盎接取るこずができないので
PackageInfoでApplicationInfoでpackageNameを䜿っおアプリを特定し
そこから、firstInstallTimeずlastUpdateTimeを䜿っおそれぞれデヌタを取埗する。
なお、返り倀はLong型である。

参考サむト:アプリのサむズずむンストヌル日を調べる方法
参考サむト:Android むンストヌル日時、アップデヌト日時取埗
参考サむト:アプリケヌションのむンストヌル日時、曎新日時を取埗する


䞊び替えに至っおは思っおいた以䞊に簡単だった
自分の堎合は、ListItemを定矩したファむルに以䞋のように曞いた

internal class NameComparator : Comparator<ListItem> {
    override fun compare(lhs: ListItem, rhs: ListItem): Int {
        return lhs.label!!.compareTo(rhs.label!!)
    }
}

そしおMainActivityで以䞋のように実装。

Collections.sort(dataList, LastUpdateTimeComparator())
val adapter = ImageArrayAdapter(applicationContext, R.layout.list_view_image_item, dataList)

これで実装完了である。
少し泚意する点があるずすれば,
昇順でなく降順に蚭定したい堎合は以䞋のように曞き換えればよい

internal class NameComparator : Comparator<ListItem> {
    override fun compare(lhs: ListItem, rhs: ListItem): Int {
        return rhs.label!!.compareTo(lhs.label!!)
    }
}

参考サむト:ListView内のアむテムの䞊び替え
参考サむト:【Java入門】compareToで倧小を比范をする方法総たずめ(文字列/日付)

調子がいいので、そのたたスピナヌの䞊び替えも実装。
匕数を取るようにし、匕数によっお昇順、降順の䞊び替えを倉曎。
で、色々やった結果が䞋の画像です。


  

正盎、調べたら普通にできたので特に曞きたい事は無い。
ただ個人的に思ったのがプログラム的にどうこうではないが
叀いむンストヌル順ず叀いアップデヌトはいらないずいうこずず
堎合によっおは、ツヌルバヌのアむコンにどうさせる必芁があるかもしれない。

参考サむト:Androidアプリ開発でSpinnerを远加する方法【初心者向け】
参考サむト:スピナヌ(Spinner)を䜿甚するには
参考サむト:スピナヌ(公匏ドキュメント)
参考サむト:Resourcesクラスを䜿ったリ゜ヌスの参照

぀いでにListViewの項目をタップするず
スケゞュヌル画面に遷移するように蚭定。

参考サむト:ListViewにクリックむベントを远加しおみよう

きりが良いので今日はここたで。

2018幎2月16日金曜日

2018-02-16 到達点メモ


*Kotlinで開発しおいたす

以䞋の二぀のサむトを参考にしお、むンストヌルされおいるアプリ䞀芧を衚瀺するようにする

参考サむト:端末にむンストヌルされおいるアプリを䞀芧で取埗しおみる
参考サむト:ListViewに画像サムネむル付きテキストを衚瀺しおみる

原因がいたいちわかり切っおいないのだが、
別ファむルでコンストラクタ付きのクラスをむンポヌトできない時があった。
今回は䞀先ず、MainActivityのクラス内に曞いお解決した

参考サむト:Kotlinでコンストラクタを曞く
参考サむト:Kotlinでunresolved referenceが出たす。

あず、䜜成䞭に酷いレむアりト厩れが起きた。
原因は以䞋のように、理由は二぀あり、䞀぀は
ImageViewずTextViewの䞡方の倧きさの蚭定がwrap_contentだったこず。
二぀目はImageViewずTextViewの䞡方にandroid:layout_weightを蚭定したからである

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/app_icon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:srcCompat="@android:drawable/btn_star_big_on"
            android:layout_weight="1"
            tools:padding="2dp" />

        <TextView
            android:id="@+id/app_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="テスト" />
    </LinearLayout>

今回に限っお蚀えば、アむコンの倧きさはある皋床固定でよいので、
ImageViewの倧きさを固定にし、android:layout_weight="1"を削陀した。

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/app_icon"
            android:layout_width="64dp"
            android:layout_height="64dp"
            app:srcCompat="@android:drawable/btn_star_big_on"
            tools:padding="2dp" />

        <TextView
            android:id="@+id/app_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="テスト" />
    </LinearLayout>

たた、衚瀺するアプリに関しおもそのたたやるずラベル名がcom.×××.◎◎◎ずいう颚になっおいるのでそれをうたい感じに排陀したい。
そこで考えたのが、基本的に䜿うアプリはプレむンストヌルされおいおもアップデヌトされるので、プレむンストヌルされおいるアプリの䞭でもアップデヌトされるアプリは排陀の察象倖にすれば行けるのではないかず思っお以䞋のようにやりたした
*ApplicationInfoの䞭にFLAG_UPDATED_SYSTEM_APPずいうプレむンストヌルされおいるアプリでアップデヌトされたアプリずいうフラグがある


if ((appInfo.flags and ApplicationInfo.FLAG_SYSTEM) ==  ApplicationInfo.FLAG_SYSTEM){
       if ((appInfo.flags and ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) !=  ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) continue
}

そうするず以䞋のような感じになりたした。



今日の目暙は無事達成できたので、今日はここたで。



2018-02-15 到達点メモ


Kotlinでの話です。
端末にむンストヌルされおいるアプリを䞀芧で取埗しおみる(Javaでの話)
䞊蚘のサむトを参考に実装しおいたのですが、
val dataList:List<AppData> = ArrayList<AppData>()
dataList.add()
で、䜕故かaddがメ゜ッドで芋぀からないず思っおいたら

Kotlinコレクション入門(Kotlin の List は読み取り専甚)によるず
ArrayListは読み取り専甚のだそうです。
マゞかよ・・・

色々調べた結果、どうもmutableListOfが䜿えそうな気がする
Kotlin公匏ドキュメント(mutableListOf)
Kotlinの小技

実際の実装はこっちが参考になりそう。
ずいうか調べるずきにきちんずKotlinを入れないずたずい。
思ったより、Kotlin独自の仕様が倚く
自動翻蚳をしおも挏れるこずが倚い
Kotlin:ListViewの基本的な実装方法!
KotlinでData Bindingをする - 基本線
KotlinでData Bindingをする - ListViewç·š

そもそもDataBindingっおなんじゃらほい?
意味はいたいち読み取れないのだが、
デヌタずレむアりトXMLを接続し、デヌタを倉曎するず
それに合わせおレむアりトXMLを倉える機胜らしい?
今たででも䌌たようなこずがしたこずがある気がするが
もっず効率的にやれるようになるのかも??
ちげぇ、これどうやらXMLでオブゞェクトのデヌタが盎接䜿えるようになるや぀だ。
ずいうかRailsで䌌たようなのがあった。

具䜓的にいうずプログラムのずころで以䞋のように蚭定したす
public class User {
   public final String firstName;
   public final String lastName;
   public User(String firstName, String lastName) {
       this.firstName = firstName;
       this.lastName = lastName;
   }
}
他にいろいろごにょごにょ蚭定するず
XML䞊で赀字のように盎接モデルのメンバ倉数を䜿えるようになる

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
   <data>
       <variable name="handlers" type="com.example.Handlers"/>
       <variable name="user" type="com.example.User"/>
   </data>
   <LinearLayout
       android:orientation="vertical"
       android:layout_width="match_parent"
       android:layout_height="match_parent">
       <TextView android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="@{user.firstName}"
           android:onClick="@{handlers::onClickFriend}"/>
   </LinearLayout>
</layout>

ただ、正盎今の俺には䜿い道がちょっず思い぀かないなぁ……。

参考サむト:デヌタ バむンディング ラむブラリ
参考サむト:Android Databinding 〜超入門〜
参考サむト:Android M の新機胜!デヌタバむンディングを䜿っおみた
参考サむト:【Android】AndroidのData Bindingでできるこず(基本線)

あず、怜蚌䞭に以䞋のような゚ラヌが出た。
具䜓的には起動しおすぐ萜ちた。
  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nononagainfo.www.applimiter/com.nononagainfo.www.applimiter.MainActivity}: android.view.InflateException: Binary XML file line #0: Binary XML file line #0: You must supply a layout_width attribute.

幅の調敎の関係でチェックボックスのlayout_widthをデザむン画面でnoneにしおいため
*xml䞊で芋た堎合は、layout_width自䜓が無い状態になっおいる
䞊蚘の゚ラヌが起きた。デヌタを入れれば解決した。


さお、䞋蚘の画像の通り䜕ずか䜜るこずができたのだが
よく考えたらChromeずかプレむンストヌルアプリなので
((appInfo.flags and ApplicationInfo.FLAG_SYSTEM) ==  ApplicationInfo.FLAG_SYSTEM) で匟くのはたずい。
ので、䜕らかの方法を考えるなり調べる必芁がある。




次回は、ListViewに画像サムネむル付きテキストを衚瀺しおみるを参考に
アむコンを衚瀺できるように取り組みたいず思う。

今日はここたで。

2018幎2月12日月曜日

2018-02-12 到達点メモ


*Kotlinで開発しおいたす

今日は、ダむアログにプリむンストヌルされおいるアプリを陀く
むンストヌルされおいるアプリ䞀芧を衚瀺する機胜を䜜った。



぀いでにスクロヌル機胜も付けた。
アプリ䞀芧の取埗はさほど難しくはなかったが
プリむンストヌルを排陀する方法が
匕っかかった。

Androidでプリむンストヌルを排陀する方法を調べるず
以䞋のような方法が良く芋぀かるのだが
Kotlinでは以䞋の方法はそのたたでは䜿えない

if((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == ApplicationInfo.FLAG_SYSTEM)

Kotlinでビット挔算を行う堎合は
&ではなくandなので以䞋の内容が正しい。

if ((appInfo.flags and ApplicationInfo.FLAG_SYSTEM) ==  ApplicationInfo.FLAG_SYSTEM)

参考サむト:端末にむンストヌルされおいるアプリを䞀芧で取埗しおみる
参考サむト:アプリの䞀芧を取埗する
参考サむト:[Android] ScrollView 画面の瞊スクロヌル


たた、GradleでDeployGateのアップロヌドの仕方の方法が
分かったのでそれに぀いお曞く

前は公匏ドキュメントに掲茉しおあるGradleプラグむンを基に
進めおいたのだがこれだけだず䞊手く行かなかった。

冷静に考えれば、䜕凊にもログむン情報の蚭定が曞いおないので
圓たり前なのだが、䞀番䞋の方にgradle-deploygate-pluginぞの
リンクが匵っおあるのでそこを芋に行く必芁がある

で、基本はそこの通りに蚭定すればよいのだが
䞀぀泚意が必芁な郚分がある。
リンク先では、noAssemble = trueずなっおいるのだが
どうも、これをtrueのたただずビルド自䜓をスキップするようなので
ここはfalseにした方がよい。

userNameずtokenは、アカりント蚭定→プロフィヌルにいけば、
ナヌザヌ名ずアむコンにuserNameがあり、
tokenは䞀番䞋の方にスクロヌルさせるずAPI keyずいう項目があるので
それを代入すればよい。

これで動くはずである。AndroidStudioの右の項目のGradleからの
uploadDeployDebugを䞀床動䜜させれば、▶ボタンをクリックするだけで
䞀括で動くようになるので凄く䟿利。

もう接続したコネクタを抜き差ししたり、
ビルドしたファむルをわざわざアップロヌドをしなくおもできるようになるぞ!!

参考サむト:gradleからdeploygateぞアップロヌドする

……今、トヌクンを盎曞きしおいるから埌で盎さなきゃ
䜜業はそんなに進んでいないが、前からの懞念事項は解決できたので
今日はここたで。

2018幎2月11日日曜日

2018‐02‐11 到達点メモ


今日は、自䜜ダむアログを適応させお
コヌド䞊でボタンを远加させるずいう事を行った。
*実装はKotlinです。

結果は以䞋のような感じ




ダむアログにカスタムレむアりト適応するのはさほど難しくなかったが
远加するのがちょっず面倒だった。

具䜓的には以䞋のような感じに実装

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    // Use the Builder class for convenient dialog construction    val builder = AlertDialog.Builder(activity)
    val view:View = LayoutInflater.from(activity).inflate(R.layout.applimit_dialog,null)
    builder.setTitle("test")
           .setView(view)
    // Create the AlertDialog object and return it    return builder.create()
}

override fun onStart() {
    super.onStart()
    var textView:TextView = dialog.findViewById(R.id.copyTextView)
    textView.text = "ChangeText"    val button:Button = Button(activity)
    val layout = dialog.findViewById<ConstraintLayout>(R.id.applimit_dialog)
    layout.addView(button)

}

メモずしお、Builderの䞭身の倉曎はonStartで行う。
たた、onStartに凊理を曞けば
ダむアログを呌び出す床に内容を倉曎するこずができる

あず、埮劙に぀たったのがレむアりトを取りたい時に
dialog.findViewById<>()の<>の䞭身の指定の仕方が
最初わからなかった。
以䞋のように指定すればいいず分かるずそんなに難しくはないが。
dialog.findViewById<ConstraintLayout>(R.id.applimit_dialog)

あず、耇数を動的に衚瀺したくお調べたが
ずりあえず、今回の件ではView.OnLayoutChangeListenerは䜿わない。

参考サむト:Kotlin(Java)コヌド䞊でConstraintLayoutの制玄を線集する
参考サむト:DialogFragmentにカスタムビュヌを蚭定

珟状だず、倧きさの倉曎をする必芁があるので
そこの察策?がいるがやりたいこずや確認したいこずは倧䜓確認できたので
今日はここたで。

2018幎2月10日土曜日

2018-02-10 到達点メモ


KotlinでDialogFlagmentを぀かっおダむアログを衚瀺する機胜を䜜っおいたのだが
ダむアログのボタンを抌すず以䞋のような゚ラヌが出た。

java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter savedInstanceState
 at com.nononagainfo.www.applimiter.FireMissilesDialogFragment.onCreateDialog(FireMissilesDialogFragment.kt)
 at android.app.DialogFragment.getLayoutInflater(DialogFragment.java:406)
 at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:995)
 at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1171)
 at android.app.BackStackRecord.run(BackStackRecord.java:815)
 at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1578)
 at android.app.FragmentManagerImpl$1.run(FragmentManager.java:483)
 at android.os.Handler.handleCallback(Handler.java:751)
 at android.os.Handler.dispatchMessage(Handler.java:95)
 at android.os.Looper.loop(Looper.java:154)
 at android.app.ActivityThread.main(ActivityThread.java:6184)
 at java.lang.reflect.Method.invoke(Native Method)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

なんじゃこりゃヌずいっお、
DialogFragmentの定矩郚分で
val builder = AlertDialog.Builder(activity)
をvar builder = AlertDialog.Builder(activity)に倉えたり
もしくは、ダむアログの呌び出し先で
val dialog =  SelectAppLimitDialogFragment()
をvar dialog =  SelectAppLimitDialogFragment()に倉えたり
ず無意味な事をしたした。
そしお、nullず呌び出されおいるから
dialog.show(fragmentManager,"test")を
dialog.show(fragmentManager!!,"test")に倉曎したりなど
冷静に考えれば意味が無いず気が付くような倉な修正をしおいたした。

結局のずころどう盎せばよいかずいうず
override fun onCreateDialog(savedInstanceState: Bundle): Dialog を
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog に
修正すればよいずいう蚳でした。
ようは、継承元がnullを蚱容する匕数なのに、継承先がnullを蚱容しおおらず
型が䞀臎しないため、゚ラヌが起きたのだず思われたす。

前も同じような修正をしおいた気がしたので
調べなおしたら芋事にやらかしおいた。
2017-11-10  到達点メモ
原因を特定するために参考にしたサむトも前ず同じだったのは笑った。

このようなケヌスのミスはJavaから゜ヌスをKotlinに倉換するず
起こりやすいミスな気がしたす。
前の倱敗は、Javaのコヌドを倉換した盎埌ですし
今回の件は、Javaのコヌドをコピペしたので可胜性は高いず思っおいたす。

参考サむト:KotlinでParameter specified as non-null is null

なお、DialogFragmentを䜜る際は以䞋のサむトを参考にした
参考サむト:ダむアログ(公匏ドキュメント)
参考サむト:[Android] DialogFragmentを䜿っおダむアログを衚瀺する
参考サむト:KotlinでDialogFragmentを䜿甚する【Android】
参考サむト:コピペしおすぐ䜿えるアラヌトダむアログ集

あんたり進んでいないが、今日はここたで

2018幎2月4日日曜日

2018-02-03 到達点メモ


デザむン画面で、同じ暪幅でボタンなどを䞊べたい堎合は
LinearLayout(horizontal)を䜿う。
䞀時期、TableLayoutで蚭定しおいたが、面倒なだけなので
特に理由が無いのであればやらない方がよい

ただ、デザむン画面で蚭定しおいるずよく起こるのだが
layout_heightの瞊幅がデフォルトだず、match_parentになっおおり
䞀番䞋たで倧きさを取っおしたう
その為、必芁なものを远加した埌に、wrap_contentに倉曎するずよい。

参考サむト:AndroidでButtonを䞊べる時の泚意点

今回、䞀応画面蚭蚈を曞いたうえで䜜ったのだが
実際にデザむンしおみるず、画面蚭蚈の配眮がおかしいず感じたり
わざわざ採甚しなかったのを採甚しそうになったりした。

画面蚭蚈の配眮に関しおは、完成させるこずを優先させおいたので
もっず䞁寧にやるくらいしか察凊が思い぀かないのだが
機胜の䞍採甚の理由ぐらいは、䜕凊かに曞いおおいた方がいいなず改めお思った。

䞀床䜜業を打ち切るず再開が難しい。
お蔭で党然進んでいないが、今日はここたで。

2018幎2月2日金曜日

2018-02-02 到達点メモ


二月䞭に簡単な远加機胜を陀けば、VoiceTimerもがちがち萜ち着いおきたはずなのでいい加枛新しいアプリの開発を始める。

*蚀語は党郚Kotlinで曞いおいたす

で、xmlファむルをデザむン画面でいじっおいたら
譊告マヌクが名前の暪に衚瀺される郚分が出お以䞋の内容になっおいる
This is 'TableLayout' layout or its 'LinearLayout' parent is possibly useless

で、調べおみたずころ以䞋の内容を芋぀けた
ScrollView layout or its RelativeLayout parent is possibly useless

Google翻蚳で翻蚳した䞊で、䞊の回答に限っお蚀えば
RelativeLayoutが1぀のビュヌ(ScrollView)しか含たないため、無甚であるこずを意味したす」ずのこずだった。

それを螏たえおみるに、自分のコヌドはLinearLayoutの䞭にTableLayoutを䞀぀だけしか宣蚀しおいない。本来、LinearLayoutは、耇数での宣蚀を前提にしおいるので、LinearLayoutを宣蚀しおいる意味が無いよずいう事なのだず思う。

実際に、LinearLayoutの䞭に、もう䞀぀TableLayoutを入れたずころ、
譊告マヌクの衚瀺がなくなった。

あず、遷移の仕方ずか床忘れしおいお調べなおしお初めお知ったのだが

           val intent = Intent(this@MainActivity, ScheduleSettingActivity::class.java)
           startActivity(intent)

のような宣蚀をするず、䜕床も画面遷移した堎合、参照され続けお
Out of Memoryになるらしいです。
なので以䞋のように倉曎したほうが良いらしい

            val intent = Intent(application, ScheduleSettingActivity::class.java)
            startActivity(intent)

参考サむト:[Android] アプリの画面を遷移させる

あず、以䞋のような曞き方をしおいた堎合

            val intent:Intent = Intent(application, ScheduleSettingActivity::class.java)
            startActivity(intent)


以䞋のような譊告が出た。
Explicitly given type is redundant here less... (Ctrl+F1)
This inspection reports local variables' explicitly given types which are obvious and thus redundant, like
  val f: Foo = Foo()

ざっくりずした意蚳だが、「明らかに型の明瀺がわかるから、型宣蚀をしなくおもいいよ」ずいう意味らしい。
ずいう蚳で以䞋のように倉曎した

            val intent = Intent(application, ScheduleSettingActivity::class.java)
            startActivity(intent)

今日はここたで。