日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android仿淘宝口令复制弹出框功能

發(fā)布時(shí)間:2024/1/1 Android 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android仿淘宝口令复制弹出框功能 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.我要做什么

應(yīng)用場景:

我的朋友使用微信給我發(fā)一個(gè)淘寶鏈接的口令,我復(fù)制口令,進(jìn)入我的淘寶,彈框,顯示口令的詳情,點(diǎn)擊詳情,進(jìn)入商品頁面。

存在的問題:

但這存在一個(gè)問題,我的淘寶并不總是關(guān)閉狀態(tài),比如我正在修改淘寶收貨地址,此時(shí)我的朋友給我發(fā)送一條口令,我復(fù)制了口令。回到淘寶,這個(gè)時(shí)候,app并不會進(jìn)入首頁,會進(jìn)入我修改的頁面,那么如何觸發(fā)這個(gè)口令呢??

實(shí)現(xiàn)步驟:

首先監(jiān)聽?wèi)?yīng)用在前臺還是后臺

然后根據(jù)狀態(tài)彈框,為此我花費(fèi)了一個(gè)上午,實(shí)現(xiàn)了此需求。

結(jié)論:

我復(fù)制了口令,重新進(jìn)入app,需要給我彈框,然后彈框顯示的內(nèi)容,應(yīng)該是從我的剪切板讀取數(shù)據(jù)。我不放效果圖,因?yàn)楸纠涌隙ㄊ强梢酝昝肋\(yùn)行的,代碼已經(jīng)給全,需要的,請自行復(fù)制。

具體方法:

2.添加依賴

implementation "android.arch.lifecycle:extensions:1.1.1"

3.清單文件

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.mepositry"><applicationandroid:name=".CourserApplication"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="Mepository"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name=".FirstActivity"/></application></manifest>

4.公共activity

package com.example.mepositry;import android.support.v7.app.AppCompatActivity; import android.util.Log;public class MyBaseActivity extends AppCompatActivity {@Overrideprotected void onStart() {super.onStart();CourserApplication.getContext().setOnVisibilityChangeListener(new CourserApplication.ValueChangeListener() {@Overridepublic void onChanged(Boolean isAppInBackground) {Log.e("TAG", "YoungerHu:\t" + isAppInBackground);if (isAppInBackground) {//顯示viewAboutDialogFragment aboutDialog = new AboutDialogFragment();aboutDialog.show(getFragmentManager(), "AboutDialogFragment");}}});} }

5.公共application

package com.example.mepositry;import android.app.Application; import android.arch.lifecycle.Lifecycle; import android.arch.lifecycle.LifecycleObserver; import android.arch.lifecycle.OnLifecycleEvent; import android.arch.lifecycle.ProcessLifecycleOwner; import android.util.Log;public class CourserApplication extends Application implements LifecycleObserver {private static CourserApplication mContext;@Overridepublic void onCreate() {super.onCreate();mContext = this;ProcessLifecycleOwner.get().getLifecycle().addObserver(this);}public static CourserApplication getContext() {return mContext;}@OnLifecycleEvent(Lifecycle.Event.ON_START)void onForeground() {Log.e("LifecycleObserver", "應(yīng)用回到前臺");isAppInBackground(true);}@OnLifecycleEvent(Lifecycle.Event.ON_STOP)void onBackground() {Log.e("LifecycleObserver", "應(yīng)用退到後臺");isAppInBackground(false);}public interface ValueChangeListener {void onChanged(Boolean value);}private ValueChangeListener visibilityChangeListener;public void setOnVisibilityChangeListener(ValueChangeListener listener) {this.visibilityChangeListener = listener;}private void isAppInBackground(Boolean isBackground) {if (null != visibilityChangeListener) {visibilityChangeListener.onChanged(isBackground);}}}

6.模擬頁面A:

package com.example.mepositry;import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText;import android.widget.CheckBox; import android.widget.EditText; import android.widget.RadioButton; import android.widget.Toast; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.CheckBox; import android.widget.EditText; import android.widget.RadioButton; import android.widget.Toast;public class MainActivity extends MyBaseActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.test);Button button = findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(getApplicationContext(), FirstActivity.class);startActivity(intent);}});} }

7.模擬頁面B:

package com.example.mepositry;import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.widget.TextView;public class FirstActivity extends MyBaseActivity {private TextView textview;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_first);textview = findViewById(R.id.textView2);} }

8.彈框dialogfragment

package com.example.mepositry;import android.app.DialogFragment;import android.app.FragmentManager;import android.content.DialogInterface;import android.os.Bundle;import android.support.annotation.Nullable;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.TextView;import com.example.mepositry.R;public class AboutDialogFragment extends DialogFragment implements DialogInterface.OnCancelListener, DialogInterface.OnDismissListener {private TextView TV_MCU_Version_Menu, TV_SoftVersion_Menu, TV_CopyRight_Menu, TV_DeviceMac;//TV_DeviceVersionprivate Button AboutSure;private SetOnClickDialogListener mSetOnClickListener;public void onSetClickDialogListener(SetOnClickDialogListener listener) {this.mSetOnClickListener = listener;}//這個(gè)接口 如果是在項(xiàng)目中,請新建文件 統(tǒng)一管理public interface SetOnClickDialogListener {void onClickDoalogListener(int type, boolean boolClick);}@Nullable@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = inflater.inflate(R.layout.chs_about_dialog, container, false);initView(view);return view;}private void initView(View V_AboutDialog) {AboutSure = (Button) V_AboutDialog.findViewById(R.id.id_b_about_ok);TV_MCU_Version_Menu = (TextView) V_AboutDialog.findViewById(R.id.id_tv_device_version);TV_SoftVersion_Menu = (TextView) V_AboutDialog.findViewById(R.id.id_tv_soft_version);TV_CopyRight_Menu = (TextView) V_AboutDialog.findViewById(R.id.id_tv_copyright);TV_DeviceMac = (TextView) V_AboutDialog.findViewById(R.id.id_tv_device_mac);TV_MCU_Version_Menu.setText(getResources().getString(R.string.app_name) + "MacCfg.DeviceVerString");TV_SoftVersion_Menu.setText(getResources().getString(R.string.app_name) + "MacCfg.App_versions");TV_CopyRight_Menu.setText("MacCfg.Copyright");TV_DeviceMac.setText(getResources().getString(R.string.app_name) + "MacCfg.Mac");AboutSure.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {getDialog().cancel();Log.e("TAG", "onCance_AboutSure:");if (mSetOnClickListener != null) {mSetOnClickListener.onClickDoalogListener(0, true);}}});}// This method will be invoked when the dialog is canceled. 取消對話框時(shí)將調(diào)用此方法。@Overridepublic void onCancel(DialogInterface dialog) {super.onCancel(dialog);Log.e("TAG", "onCancel:");}//This method will be invoked when the dialog is dismissed.@Overridepublic void onDismiss(DialogInterface dialog) {super.onDismiss(dialog);Log.e("TAG", "onDismiss:");}}

9.彈框布局:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/id_llyout_about_dialog"android:layout_width="360dp"android:layout_height="300dp"android:background="@color/colorPrimary"android:orientation="vertical"><LinearLayoutandroid:layout_width="300dp"android:layout_height="wrap_content"android:layout_marginLeft="20dp"android:layout_marginStart="20dp"android:layout_marginTop="20dp"android:orientation="vertical"><TextViewandroid:id="@+id/id_tv_device_mac"android:layout_width="wrap_content"android:layout_height="30dp"android:maxLines="1"android:text="@string/app_name"android:textSize="15sp" /><TextViewandroid:id="@+id/id_tv_device_version"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginTop="10dp"android:maxLines="1"android:text="@string/app_name"android:textSize="15sp" /><TextViewandroid:id="@+id/id_tv_soft_version"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginTop="10dp"android:maxLines="1"android:text="@string/app_name"android:textSize="15sp" /><TextViewandroid:id="@+id/id_tv_copyright"android:layout_width="wrap_content"android:layout_height="50dp"android:layout_marginTop="10dp"android:maxLines="2"android:text="@string/app_name"android:textSize="15sp" /></LinearLayout><Buttonandroid:id="@+id/id_b_about_ok"android:layout_width="80dp"android:layout_height="35dp"android:layout_gravity="center"android:layout_marginTop="20dp"android:gravity="center"android:text="@string/app_name"android:textAllCaps="false"android:textSize="12sp" /></LinearLayout>

end

總結(jié)

以上是生活随笔為你收集整理的Android仿淘宝口令复制弹出框功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。