ねこったぁの開発について

2018/10/16 10:24:04
どもNoranekoです。

自分がやり始めた頃のTwitterは、

140文字(画像リンク含む)で、改行もできなくてくだらない発言の雨あられ。

それをTweetDeck上で使ってた頃はとても面白かった。

当時アメリカではTwitterよりもFacebook全盛期で、日本でもTwitterは少数派だった。


それが今では動画を投稿したり、画像の中に長文を入れたりが当たり前になって、

更に便所の書き込みに言論統制的なことも言い出してもういいかなと。


なのでアカウントをクローズしました。


クローズしたことによって、今後アプリが使えないと思います。

一応使ってたので、どんなものかとアプリを作成したりしましたが、

当時(今でも)のAPIは結構ボロボロでシステム的にもどうなの?

という感じなのでプログラマの人は別に触らなくても問題なしです。




~こんなアプリ出してます~

authored by Noraneko | Comment(0) | Android

Android Studio 2.3

2017/03/10 12:48:32
お昼休みはウキウキウォッチ!


Noranekoです。



ということで、先日『Android Studio 2.3』に乗り換えたんですけど、


その諸注意みたいな物を。



自分環境は、Windows 10上にEclipseとAndroid開発環境が


整っている状況からの移行だったので、


それ以外でインスコする方はもう一回ググって検索するといいよ!


まずリンク先から、



Windowsの上から2番目のAndroid SDKなしを選択します。


ダウンロードしたexeを実行します。


途中でSDKをインスコするか聞かれるので、いりませんと答えて、


SDKのパスを現在インストールされてる場所を指定します。


これだけです。


スクリーンショットはめんどくさいので撮ってません!



自分の場合は、Eclipse上でgmsがエラーを起こしてリリースコンパイルできなくて、


いろいろ調べたところ、現在、Eclipseでは最新の『google-play-services_lib』のjarがなく、


『aar』ファイルとしてのみ提供されてるみたいです。




『aar』ってなんなんだ・・・




もうこの時点で、Eclipseの限界を感じて移行に踏み切りました。


『aar』っていうのはマーヴィンゲイがどーのこーのって書いてあるので、


各自ググって勉強しておくように!


Android SDKがインスコしてあれば、今まで使ってたAVDも問題なく使えますし、


当然Eclipseも今まで通り動きます。


同じSDKを使うので、『debug.keystore』も今まで通りのを使います。


プロジェクトに関しては、ディレクトリ構成が大幅に変わってるので、


同名の新規プロジェクトを作成して、ソースとresをコピペするのが一番無難です。


無理に現存フォルダを上書きして使うわないほうが良いでしょう。


以上です。(超手抜き^^)


Enjoy compile!!




~こんなアプリ出してます~

authored by Noraneko | Comment(0) | Android

Android 6.0.1

2017/01/23 13:17:56
ピーヤ!



Noranekoです。




私はプログラマであり、自作PC経験もあるので安定して動いてるシステムには


むやみやたらとアップデートは入れない主義なのですよ。


Windowsでも、OSとソフトはアップデートの通知のみで、手動でアップデートする感じにしてます。


ですがここ最近、Androidのアプリを立ち上げようとして、


『アプリのアップデートが必要です』


とのことで、アプリをアップデートしたのですが、


インストールでこけ、挙句の果てにAndroid自体再起動しやがったぜ!


何回もこの状況だったので、最終手段のAndroid OS自体のアップデートを試みました。


『6.0.1』にしたところ、無事インストールが終了しました。





で、本題の『6.0.1』について。


1.6の頃から開発してますが、Androidには元から内部SD部分と外部SD部分があり、


4.4.2では、


内部SDパス:/mnt/sdcard/


外部SDパス:/Removable/MicroSD/


となっています。


※上記のパスは、機種によって全く異なります。


このパスがAndroidで統一されてないのは、最悪の一言ですね。


外部SDのパスを取得するには、


Environment.getExternalStorageDirectory().getPath()


を用いて、パスを取得しましょう。



手元にあるZenFone 2 Laserを6.0.1をアップデートしたところ、


問題なく外部ストレージとしてSDカードを認識して終了しました。


さて、内部に移したやつをSDカードに移すか。













あれ?






あれれ?











移せなくない?







何これ?










そうなのです。


6.0.1では多くの端末がSDカード移行の機能を切っているらしく、


adbコマンドを打たないと移せないらしいとの書き込みをみました。


最悪やん。。。


しかも、外部SDカードを内部のSDカードとして認識させることらしい。


もうね意味がわからんよこれ。


てことで、自分みたいに開発環境がある人は簡単にできるんですが、


それ以外の人は泣き寝入り状況でございます。


開発環境があるかたは、コマンドプロンプトにて、


C:\Users\Donald John Trump>adb shell⏎


shell@Z00A_1:/ $ sm list-disks⏎


disk:179,64


shell@Z00A_1:/ $ sm partition disk:179,64 private⏎


上記コマンドにより、SDカードが初期化され内部のSDカードとなります。


機種によって、diskの値が異なるようです。


内部のSDカード化が成功すると、アプリをSDカードに移せるようになります。


しかし、アプリによっては



SDカードへ移すと起動しない!



SDカードへ移すことができない!



等の状況を確認しました。


『dマガジン』が後者で、今までSDカードに入れることができたのに、これはひどい。。。


SDカードに移すことができる権限はソフト側にあるので、


dマガジンの開発の方は6.0以降もSDに移行できるように権限を許可してもらいたいと思います。


というわけで、6.0にはしないほうが良いです。


まじ辛い体験を味わうことになります。

ファイナルファンタジー XV 初回生産特典 武器「正宗/FINAL FANTASY XVオリジナルモデル」アイテムコード同梱 - PS4

新品価格
¥4,100から
(2017/1/18 17:04時点)






~こんなアプリ出してます~

authored by Noraneko | Comment(0) | Android

ねこトラッカー3.0.0

2015/04/26 22:32:38
選挙行ってきた。


Noranekoです。



そんで、ねこトラッカーを更新しました。


トラッキング中にバックグラウンドにして、ナビとか重い処理のアプリを動かしたりして、


テストしましたが大丈夫そうです。


Activityが死んでも復旧ロジックを入れてあるので、


ちゃんとトラッキングの開始から現在のトラッキングまで見れるようになっています。


実はデバッグでちゃんと動いてても、リリース用コンパイルで動かなくて困ってました。


いやほんと社畜やってた時もこの本番でしか出ないバグって言うのは、


想定外すぎて当たりがつけづらく、ログから辿るしかないですね。


ということで、なんとかゴールデンウィークに間に合いました。






去年やる予定だったんですけどね!








大昔に書いたかもしれませんが、圏外でもトラッキングは可能なので、


旅行に行った際に『肉球アイコン』を押して、『バックグラウンド』するだけで


行った場所を記録できます。


※建物とかトンネルなどのGPSが届かないところは記録できません。




てことで来月くらいに現在のトラッキングを共有できる機能を


アップデートしたいと思っております!




サーバ死ぬかな・・・




~こんなアプリ出してます~

authored by Noraneko | Comment(0) | Android

AndroidのServiceについて

2015/04/25 23:50:32
タコベルで行列とか本国でみたことない・・・


Noranekoです。



『これから英語は必要だ!』とか、


『これからは国際社会、海外に目を向けろ!』とか言う人に限って、


海外滞在とか全くなくて、パスポートすら持ってないのが現実だょ^ω^





でファストフードマスターの私に言わせれば、




IN-N-OUTしか認めません!





今秋に『Carl's Jr.』も来るみたいだけど、また行列するんだろうな・・・


でもCarl's Jr.はメニューが多くて、LAで滞在してた近くにあったので、


しょっちゅう行ってました^ω^






一応タバコと比較してます。




ということで、アメリカのファストフードとかのお話はまた今度にしましょう。


前回のお話の続きになります。


バックグラウンドで常駐させたい



いつのまにか死んでる



Serviceにすればいいよ!


と、ここまで理解してて、その後サンプルソースから大改造してみました。




できました。


重要なところをまとめてみます。


①Activity等からServiceを起動させる為にAIDLを作成する。


②Serviceからの戻り値をBroadcastReceiverで取得する。


③BroadcastReceiverからさらにActivityへ値を戻す。



①について、前回ほんのり書いてますが、


ActivityからServiceを独立させて呼び出す為に、AIDLファイルという物を作って


そこからServiceを呼びます。


下準備として、
public class MainService extends Service{

}
MainService.java


interface IService {
}
IService.aidl



 
  
 

AndroidManifest.xml


自分の目的では、Activityが死んでもServiceを継続させたい為、


『onStartCommand』を使います。


直接使えないので、下記のようにします。
public class Hoge extends Activity{
 public void test(){
  // Serviceを実行
  Intent intent = new Intent(IService.class.getName());
  startService(intent);
 }
}



もう一つのやり方は、


『ServiceConnection』を用いて、『bindService』を使うやり方です。
public class Hoge extends Activity{
 private IService service = null;
 
 private ServiceConnection con = new ServiceConnection() {
  public void onServiceConnected(ComponentName className, IBinder service) {
   mService = IService.Stub.asInterface(service);
  }
  public void onServiceDisconnected(ComponentName className) {
  }
 };

 public void test(){
  // サービス実行
  Intent intent = new Intent(IService.class.getName());
  // バインド
  bindService(intent, con, Service.BIND_AUTO_CREATE);
 }



後者は、Activityが死ぬとServiceも死んでしまいます。


ただ、サービスのいろいろなメソッドにアクセスできるので、


前者とは異なる使い方が可能です。


多分ここまでで???の方も多いと思いますが、


実行したいサービス(MainService.java)





実行したいサービスを起動するためのインターフェイス(IService.aidl)


があって、Activityから2パターンの呼び出しが可能で、


呼び出し方によりできることとできないことに分かれます。



うむ。


これは難しい。


とりあえず先に進もう。


②について、これは①の後者を選択してバインドした人には


あまり意味がないのかもしれません。
public class MainReceiver extends BroadcastReceiver{
}
MainReceiver.java


 
AndroidManifest.xml


例によってこれを前提とします。


先程の①の前者を
public class Hoge extends Activity{

 private MainReceiver receiver = null;

 public void test(){
  // Serviceを実行
  Intent intent = new Intent(IService.class.getName());
  startService(intent);
  // レシーバ―登録
  IntentFilter filter = new IntentFilter("hoge");
  receiver = new MainReceiver();
  registerReceiver(receiver, filter);
 }

}



これだけです。


次に、MainServiceの何かを返すメソッドに
 public void payBack(){
  Intent intent = new Intent("hoge"); 
  intent.putExtra("test", "test");
  intent.putExtra("suji", 99);     
  sendBroadcast(intent); 
 }



最後にMainReceiverに
public class MainReceiver extends BroadcastReceiver{

 public void onReceive(Context context, Intent intent){
  // 値を取得   	
  String s = intent.getStringExtra("test")
  int i = intent.getIntExtra("suji", 0)
  System.out.println("this is broadcast @" + s + "@" + String.valueOf(i));
 }

}



比較的わかりやすいですね。


③ここで悩みました。みんな②でToastで表示して終了が多いです!


ではなくて、私みたいにActivityに返したい人の方が多いはずです!


で、どっかのブログがひっかかり、無事、事なきを得ました。


先程のMainReceiverを改造します。
public class MainReceiver extends BroadcastReceiver{

 public void onReceive(Context context, Intent intent){
  // コンテキストを取得
  HogeActivity activity = (HogeActivity) context;
  // メソッドに渡す
  activity.getValue(
   intent.getStringExtra("test"),
   intent.getIntExtra("suji", 0)
  )
 }

}



なるほど。


流れを掴めば理解できると思いますが、やりたいこと以外の情報が多すぎるのと、


その先の情報がぶちぶち切れてて、結構時間がかかりました。


またServiceは生きたままでActivityが死んで、


再度アプリを立ち上げた際のロジックも考えて作らないと、


データに不整合が出る可能性もあるので、


結構頭を使います。



てことでちょっとテストしてみて、大丈夫ならGW中に更新したいと思っております!




~こんなアプリ出してます~

authored by Noraneko | Comment(0) | Android
1 2 3 4 5 6 
BLOG内検索
<< 2018/11 >>
Sun Mon Tue Wed Thu Fri Sat
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30