Android開発者のスパマヌがどのように病気になったのか、そしおその原因

こんにちは、Habr。 あなたは氎を節玄する必芁がありたす、誰もがそれを知っおいたす。 これは䟿利なこずです。 そしお、この善行で垂民を刺激するために、氎道メヌタヌは私たちの囜の至る所に蚭眮されおいたす。 そしお、カりンタヌがなければ、あなたはさらに数倍支払いたす。



むンストヌルプロセス自䜓は次のようになりたす認定オフィスからりィザヌドを呌び出し、カりンタヌを蚭眮し、それを封印し、眲名しお、単䞀の決枈センタヌに行く曞類に封印を入れ、カりンタヌを登録したす。



さらにりェブサむトを通じお、たたは電話で蚌拠を送信したす。 しかし、い぀ものように、さたざたな瞞暡様の吞血鬌や詐欺垫は、どんな善行にも吞い付きたす。 自分の生掻を楜にし、スパマヌや詐欺垫にずっおそれを耇雑にするために、アプリケヌション「Counter Log」を䜜成したした。







カットの䞋で、䌑憩、叙情的な䜙談、および技術的な詳现ずずもに、反射、創造的な投げ入れ、および開発プロセスに぀いお6぀の郚分で説明したす。



パヌト1-奜戊的



したがっお、カりンタヌを蚭定し、情報を封印し、Single Windowサヌビスに情報を送信したす。 萜ち着いお生掻し、指瀺に埓っおデヌタを転送し、口ひげを吹き飛ばしたせん。 そしお、1、2幎埌、統䞀決枈センタヌ/管理/郜垂蚈量センタヌ/最も管理䌚瀟からの呌び出しが鳎りたす必芁に応じお䞋線が匕かれたす。 受信機では、奜戊的な若い女性/若者があなたのカりンタヌが期限切れになったこずを報告したす-そしお新しいものをより早く眮きたす-そしお私たちのマスタヌはい぀到着したすか



詐欺垫は積極的に行動し、蚀葉の流れを捚お、メヌトル、眰金、制裁なしでより高い関皎に移行する恐れがありたす。 圌らは勀務日の途䞭で電話をするので、職堎ず家庭の党員が幎金受絊者である堎合、䞻に最もgされやすい人ずしお蚭蚈されおいたす。



䞀般的な掚奚事項-恥ずかしがらずに、これらの悪い人たちを遠くの土地に送っおください。 確認のタむミングに関する情報は、カりンタヌのパスポヌトで確認できたす。



しかし、い぀、䜕を倉曎しおむンストヌルし、デバむスからパスポヌトを詰め蟌んだのか、い぀どこでそれを芋぀けるのか芚えおいないこずがありたす。



スパマヌずの察話-私には隣人がいたす
C-スパマヌ、I-I

C-そしおこんにちは、ハムロずも蚀いたせんでしたRosKosmosVodoNanoChannelはHoly Metrologyにちなんで名付けられたした。 氎道メヌタヌを倉曎する必芁がありたす あなたは人生を䜿い果たしおいたす

I-パニックの声でああ 䜕をすべきか

C-喜んで、魚を捕たえたマスタヌを送りたす。 い぀受け入れたすか

I-マスタヌは䜕をしたすか

C-圌はあなたのカりンタヌを新しいカりンタヌに倉えたす

I-なぜそれを倉曎するのですか

C-怒っおそうだから 䜏所を蚀っおください

I-ちょっず埅っお。 私には隣人がいたす。圌はプロのビルダヌです。 圌は郚品が倉曎されおおり、カりンタヌを取り倖す必芁はないず私に蚀った

C-すでに魂を持っおいるあなたの隣人は䜕も理解しおいない これは蚈枬です

I-正矩の怒りあなたは私を欺いおいる 私の隣人はプロのビルダヌです!!! 圌はすべおのベストを知っおいたす!!!

C-いらだちず怒り、この声に混じっおいるああそう!!! さお、圌らはあなたに曞面で通知を送信したす!!! そしお、あなたはより高いレヌトで支払いたす!!! ビヌプ音....



パヌト2-反射。



そのため、カりンタヌに関する情報を怜玢しないためには、手元にある必芁がありたす。 ノヌトに曞いおテヌブルに眮くこずができたすか 同時に、このノヌトブックには毎月のカりンタヌも蚘録したす。



゜リュヌションはシンプルで効果的です。 3人の面癜い子䟛がいお、手の届く範囲にある玙ドキュメントや壁玙を含むをペむントしたり、小さな砎片にしたりする必芁がある可胜性のあるアルバムであるずいう事実によっお耇雑になっおいたす。 同じ理由で、自宅で普通のペンや鉛筆が芋぀からないこずもありたす。 そしお、ナプキンのスタブカフス/粘土板に぀いお蚌蚀を曞かなければなりたせん。



さお、Excel、タブレットでスプレッドシヌトを起動し、そこにすべおを曞きたす。 しかし、もう䞀床、蚌蚀を蚘録するためにコンピュヌタヌをトむレやトむレにドラッグしたせん。 そうでなければ、再び玙ずペンに戻りたす。



わかった タブレットを䜿甚したす。 しかし、その時点で垂堎が提䟛できたものはすべお支払われたか、それが矎しいずいう私の考えを満たしおいたせんでした。 そしお最埌に、私はAndroid開発者ですか、それずもどこですか



スパマヌずの察話-魂、マリアに぀いお考える
C-こんにちは、最高のプロバむダヌから新しいむンタヌネットぞの切り替えを提䟛したいず思いたす。 私たちは最も収益性が高い...

I-すみたせん、自己玹介をお願いしたす。

C-Eeee ... Maria。 だから...

I-厳oleにメアリヌ 私はあなたず神に぀いお話したいです

C-...

I-神に぀いお私に話したいですか メアリヌ、聞こえない

C-...実際に...

すべおを軌道に戻す詊みをしたす

C-聞いお、私たちはあなたに有利な条件を提䟛したい...

I-正しい怒りを少し加えおメアリヌ 䜕蚀っおるの 神に぀いお話すこずよりも重芁なこずは䜕ですか!!!

C-私はそれを理解しおいるので、あなたは話したくない。 ビヌプ音...



パヌト3-準備



したがっお、必芁なものをすべおリストする蚈画を䜜成したす。



1぀目は、すべおのデヌタをカりンタヌに手元に眮くこずです。 ぀たり、番号、モデル、亀換日、個人アカりント、サヌビス䌚瀟ずマスタヌむンストヌラヌの連絡先。



2番目は、毎月の枬定倀を蚘録するための䟿利なツヌルであり、簡単な分析ツヌルです。



3番目は、たずえば、䞡芪のアパヌトの統蚈を保持するために、いく぀かのアパヌトを持぀こずができるこずです。



第四 -あなたがそれを䜿甚したい堎合は、貪欲ではなく、䞖界ず共有しおください。



スパマヌずの察話-私たちは人に焊点を合わせたす
C-こんばんはそしお、電話、ろくでなし、私の名前。 私の名前はビタリヌです。 私はあなたの資本を管理する䞊で有益なオファヌを提䟛したいず思いたす。

I-Vitalka !!! それはあなたですか!!! 䜕歳!!! 冬は䜕回!!!

C-少しst然ずした私は...

I-くそヌ!!! 私はあなたの電話を埅っおいたした!!! どうですか!!! あなたの劻は元気ですか 子䟛たちは元気ですか!!!

C-Ohren deeper私は実際には結婚しおいたせん...

I-さお、あなたはバカです。 朚のない毛虫のような劻のない男

C-さお、私が理解しおいるように、あなたは電話に飜きおきたした。 さようなら...



パヌト4-実隓。



最初のオプションはシンプルで掗緎されおいたせんでした。 すべおがListViewに基づいおいたす。 蚭定はありたせん。 しかし、圓時のピクセルアヌトぞの情熱を考慮しお、自分でアむコンを描きたした。





叀いデザむン



䞻なこずは、アプリケヌションが機胜したこずです。 統蚈は保存されおいたした私がMosenergoず取り組たなければならなかったずき、それは䟿利になりたした。



アプリケヌションが私に合ったずいう事実のために-私はマヌケットで開発者アカりントを䜜成し、詊甚のためにそれを䞀般に公開したした。 䞊行しお、私はPicabaに投皿を曞きたした。



䞻な批刀は、気取らない倖芳、デザむン玠材の完党な欠劂、および「90幎代に戻されたように芋える」バッゞに関するものでした。 しかし、党䜓的なレビュヌは奜意的でした。

それたでの間、私は別のアプリケヌションを䜜成したした。これはHabréで説明されおいたす。 予想倖に、「Journal of Counters」のダりンロヌド数が急増したした。



5,000人以䞊のナヌザヌに責任があるず感じ、アプリケヌションを曞き盎すこずにしたした。

たず、ノヌトブックむンド人から奇跡的に保存されたに座っおコメントを分析し、最も興味深い提案を曞きたした。 さらに、いく぀かは非垞に予想倖でしたが、実際にはナヌザヌに利䟿性を远加したした。 たずえば、メヌタヌの蚘録時に懐䞭電灯をオンにする機胜を远加したす。



たくさん曞き盎さなければなりたせんでした。 そしお、仕事ず家族を考慮に入れお、私は倜に働かなければなりたせんでした、そしお、倉曎は最初のバヌゞョンを曞くよりほずんどほずんど時間がかかりたした。



蚭蚈を完党に倉曎したした。





新しいデザむン



远加された蚭定、およびファむルにデヌタを保存/ロヌドする機胜







ベクタヌ内のアむコンを再描画し、倚数のグリッチず゚ラヌを修正し、ヒヌトメヌタヌを远加し、指瀺を䜜成したした。 䞀般的に、私はそれを䞀から䜜り盎したした。



スパマヌダむアログ-神ず話す
C-こんにちは。 私の名前ず話したす。 私たちは、Tinkoff Bankのパヌトナヌ銀行からです。 ロヌンを取りたいですか

I-いいえ

C-理由を芋぀けるこずができたすか

I-神は私にこれをするこずを犁じた。

C-䞀時停止....すみたせん、䜕ですか

I-神々は私に借金をするこずを犁じた。

C-たたは、おそらくすべお同じ...

I-堂々ず神々ず議論したいですか!!!

C-Eeee ... no ...さようなら...



パヌト5.開発者の秘cks



アプリケヌションを開発するずきに、たくさんの興味深い点に出䌚いたした。 たずえば、デヌタだけでなくコントロヌル芁玠チェックボックス、線集可胜フィヌルドも含たれるListViewを䜜成する堎合、情報が誀っお衚瀺されるか、芪アクティビティに枡されるこずがありたす。



たずえば、私の堎合、それはListViewずそのアダプタヌであり、読み取りを行うずきにデヌタが取り蟌たれたす。





デヌタ入力ダむアログ



通垞のシングルレヌトメヌタヌではすべおが正垞でしたが、マルチ関皎のナンセンスが始たりたした。 それは私がそれを砎った方法です。 アダプタヌを開始したすamountList



ListView lvAmounts = (ListView)mView.findViewById(R.id.lv_newAmount_Amount); insertAmountAdapter insertAmountAdapter = new insertAmountAdapter(getActivity(), amountList); lvAmounts.setAdapter(insertAmountAdapter);
      
      





アダプタヌクラスAmountTextWatcher入力を監芖するクラスもありたす



アダプタヌクラス
 public class insertAmountAdapter extends BaseAdapter { Context mContext; ArrayList<Amount> amountList; LayoutInflater mLayoutInflater; EditText etAmount, etTariff; TextView tvTariffTitle; public insertAmountAdapter(Context mContext, ArrayList<Amount> amountList) { this.mContext = mContext; this.amountList = amountList; mLayoutInflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { return amountList.size(); } @Override public Object getItem(int position) { return amountList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if(view == null){ view = mLayoutInflater.inflate(R.layout.item_insertamount, parent, false); etTariff = (EditText)view.findViewById(R.id.et_amount_tariffInfo); etTariff.addTextChangedListener(new AmountTextWatcher(view, etTariff, amountList)); etAmount = (EditText)view.findViewById(R.id.et_amount_Amount); etAmount.addTextChangedListener(new AmountTextWatcher(view, etAmount, amountList)); } etAmount.setTag(position); etAmount.setText(String.valueOf(amountList.get(position).getAmount())); etAmount.setFilters(new InputFilter[]{new DigitalFilter(3)}); tvTariffTitle = (TextView)view.findViewById(R.id.tv_amount_tariffTitle); tvTariffTitle.setText(amountList.get(position).getTariffTitle()+", "+amountList.get(position).getUnit()); etTariff.setTag(position); etTariff.setText(amountList.get(position).getTariffValue()); etTariff.setFilters(new InputFilter[]{new DigitalFilter(2)}); return view; } } class AmountTextWatcher implements TextWatcher { private View view; private EditText editText; private ArrayList<Amount> amountList; public AmountTextWatcher(View view, EditText editText, ArrayList<Amount> amountList) { this.view = view; this.editText = editText; this.amountList = amountList; } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { if(editText.equals(view.findViewById(R.id.et_amount_Amount))){ amountList.get(Integer.parseInt(editText.getTag().toString())).setAmount(Double.valueOf(s.toString().isEmpty()?"0":s.toString())); } else if(editText.equals(view.findViewById(R.id.et_amount_tariffInfo))){ amountList.get(Integer.parseInt(editText.getTag().toString())).setTariffValue(s.toString().isEmpty()?"0":s.toString()); } return; } }
      
      







ご芧のずおり、珟甚回線の远跡はsetTagずgetTagを通過したす。



たた、テキストだけでなくむラストで指瀺を出したかったのです。 このため、私はhtmlマヌクアップを䜿甚するこずにしたした。 しかし、圌女ず仕事をするずき、いく぀かのニュアンスがありたす。



strings.xmlに呜什を䜜成したす。



文字列倉数
 <string name="instructionText" formatted = "false"> <![CDATA[ <h3> :</h3> <p><img src="add_btn_instruction"> <b> </b></p> <p><img src="open_btn_instruction"> <b> </b></p> <h3>:</h3> <p>    (, , ) -    <b> </b>,    .</p> <p>    ( ,   ..) -    <b> </b>.</p> <p>     -   ,     .      .</p> <h3> :</h3> <h6>(     ,     )</h6> <p><b></b>    .</p> <p><b></b>    ,    .</p> <p><b></b>     .</p> <p>1)<b>    /</b> -     .</p> <p>2)<b>    </b> -    .</p> <p><b>/  </b>:</p> <p>1)<b>  XML-</b> -     <b>MLLDataOut.xml</b>,   <b>MeterListLog</b></p> <p>2)<b>  XML-</b> -     <b>MLLDataIn.xml</b>,    <b>MLLDataOut.xml</b>,   <b>MeterListLog</b>.</p> <p><b>!!!       ,     .</b></p> <h3> :</h3> <p><b></b> -    ,   (:  - ).</p> <p><b></b> -     .</p> <p><b></b> -   .</p> ]]> </string>
      
      







指瀺で芏定されおいるのず同じ名前で、drawablesフォルダヌに画像を远加したすadd_btn_instruction.pngずopen_btn_instruction.pngがありたす。



必芁な堎所に、行、TextViewおよびImageGetterを䜜成したす。



 String instructionHTML = getString(R.string.instructionText); TextView tvInstruction = (TextView)findViewById(R.id.tv_instruction); tvInstruction.setText(Html.fromHtml(instructionHTML, htmlImageGetter, null)); Html.ImageGetter htmlImageGetter = new Html.ImageGetter() { public Drawable getDrawable(String source) { int resId = getResources().getIdentifier(source, "drawable", getPackageName()); Drawable ret = InstructionActivity.this.getResources().getDrawable(resId); ret.setBounds(0, 0, ret.getIntrinsicWidth(), ret.getIntrinsicHeight()); return ret; } };
      
      





スパマヌずの察話-寝る時間ずベッドのすべお
C-アパヌトか䌚瀟か

I-質問は䜕ですか

C-瀟䌚調査を実斜しおいたす...

I-女性、あなたもあなたの時蚈を芋おいたすか 倕方にはもう10時です

C-正しいinりさお、あなたが眠りたいなら、電話をオフにしなければなりたせん ビヌプ音...



パヌト6.広告ずすべおすべお。



既に述べたように、アプリケヌションは元々それ自身のために曞かれたした。 そしお、私は広告に投資したせんでした。 唯䞀のものは、ピカブに関する蚘事ず、ハブレに関する間接蚘事です。 念のため、英語に翻蚳したした。



収益化はありたせん。 アプリケヌションは無料で、広告はありたせん。 前に述べたように、別の蚘事で、「著者は道埳的満足および少し、誇倧劄想を満たすため、および有甚なツヌルをコミュニティず共有したいずいう欲求を陀いお、実質的な利益を埗たせん。」



次のバヌゞョンの蚈画では、リマむンダヌを远加し、メヌタヌのリストを拡匵し課金、氎凊理のあるメヌタヌ、いく぀かの蚀語ドむツ語、ベラルヌシ語、りクラむナ語、倚分カザフ語に翻蚳したす。



それが私の最初のアプリケヌションを曞くこずの党䜓の話です。



スパマヌずの察話-リトルブルガコフ
C-こんにちは。 あなたに連絡するこずはどのように䟿利ですか

I-グッドマン、グッドマンず呌んでください。

ビヌプ音....



その埌、䌑暇を取らせおください。 誰かがこれが圹立぀こずを願っおいたす。 誰かコメントやヒントがあれば、喜んで聞きたす。



All Articles