android 监听安装页面取消按钮点击事件

ps:安装成功是有广播的,这里只介绍安装界面关闭的监听,曲线可以监听取消按钮(不通过 startActivityForResult())        

      大家都知道通过startActivityForResult()方法唤起系统的安装页面,通过 onActivityResult方法收到安装页面的取消事件。

      但有些场景并不希望通过startActivityForResult()方式来唤起安装页面,例如想在service中唤起,并在service中收到事件的结果。

      例如:要安装A.apk,唤起系统安装界面的时候启动一个计时器,每隔1或者2秒 查询一次 当前App是否在前台,是的话意味着结束了安装界面,再判断本地的packageinfo中是否包含A.apk的相关信息,如果没有就可以认为 是用户取消了安装。

 代码

           

     /**
      * 关于唤起系统安装界面的代码就不贴。。
      * 唤起系统安装界面的同时调用这个方法 启动计时器
      * 回到前台,也就是安装页面消失后发送msg
      */
     private void startInstallTimer(final TaskInfo info) {
         mInstallTimer = new Timer();
         TimerTask timerTask = new TimerTask() {
             @Override
             public void run() {
                 if (isForeground()) {
                     Message message = Message.obtain();
                     message.obj = info;
                     message.what = MSG_WHAT_CANCEL_NOTIFYCATION;  // 結束了安裝,發送到主線程做自己的逻辑  例如判断 本地packageinfo是否有要安装的apk信息,有的话 安装成功,没有就是用户取消了安装或者直接关闭了安装界面
                     mHandler.sendMessage(message);
                 }
             }
         };
         mInstallTimer.schedule(timerTask, 1000, 1000);//
     }
 
     // 停止定时器
     private void stopInstallTimer() {
         if (mInstallTimer != null) {
             mInstallTimer.cancel();
             mInstallTimer = null;
         }
     }
 
     private boolean isForeground() {
         ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
         ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
         String currentPackageName = cn.getPackageName();
         if (!TextUtils.isEmpty(currentPackageName) && currentPackageName.equals(getPackageName())) {
             return true;
         }
         return false;
     }

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我来给您讲解一下如何用 Android Studio 实现一个登录页面。 首先,我们需要创建一个新的 Android Studio 项目。在创建项目时,选择 "Empty Activity",然后在下一步中给项目起一个名字,比如 "LoginDemo"。 接下来,在 app/res/layout 目录下创建一个新的布局文件,比如 "activity_login.xml"。在这个布局文件中,我们可以自定义一个登录页面的界面布局,包括用户名和密码输入框、登录按钮、注册按钮取消按钮等。下面是一个简单的示例代码: ``` <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/login_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp" tools:context=".MainActivity"> <TextView android:id="@+id/login_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="登录" android:textSize="24sp" android:textStyle="bold" android:layout_centerHorizontal="true" android:layout_marginTop="32dp"/> <EditText android:id="@+id/username_input" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/login_title" android:layout_marginTop="32dp" android:hint="请输入用户名"/> <EditText android:id="@+id/password_input" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/username_input" android:layout_marginTop="16dp" android:inputType="textPassword" android:hint="请输入密码"/> <Button android:id="@+id/login_button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="登录" android:layout_below="@id/password_input" android:layout_marginTop="32dp"/> <Button android:id="@+id/register_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="注册" android:layout_below="@id/login_button" android:layout_marginTop="16dp" android:layout_alignParentLeft="true"/> <Button android:id="@+id/cancel_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="取消" android:layout_below="@id/login_button" android:layout_marginTop="16dp" android:layout_alignParentRight="true"/> </RelativeLayout> ``` 这个布局文件中,我们采用了 RelativeLayout 布局,设置了一个登录页面的标题、用户名输入框、密码输入框、登录按钮、注册按钮取消按钮。在输入框和按钮中,我们使用了 hint 属性来给用户提供输入提示。 接下来,在 MainActivity.java 文件中,我们可以编写相关的代码来实现登录功能。具体来说,我们需要对登录按钮、注册按钮取消按钮进行监听,根据用户的操作来执行对应的逻辑处理。下面是一个简单的示例代码: ``` public class MainActivity extends AppCompatActivity { EditText usernameInput; EditText passwordInput; Button loginButton; Button registerButton; Button cancelButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); // 获取界面控件 usernameInput = findViewById(R.id.username_input); passwordInput = findViewById(R.id.password_input); loginButton = findViewById(R.id.login_button); registerButton = findViewById(R.id.register_button); cancelButton = findViewById(R.id.cancel_button); // 设置登录按钮监听器 loginButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String username = usernameInput.getText().toString(); String password = passwordInput.getText().toString(); // 判断用户名和密码是否为空 if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) { Toast.makeText(MainActivity.this, "请输入用户名和密码", Toast.LENGTH_SHORT).show(); return; } // TODO: 根据用户名和密码查询数据库,判断是否匹配 // 如果用户名和密码匹配,则跳转到欢迎页面 Intent intent = new Intent(MainActivity.this, WelcomeActivity.class); startActivity(intent); } }); // 设置注册按钮监听器 registerButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 跳转到注册页面 Intent intent = new Intent(MainActivity.this, RegisterActivity.class); startActivity(intent); } }); // 设置取消按钮监听器 cancelButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 清空用户名和密码输入框 usernameInput.setText(""); passwordInput.setText(""); } }); } } ``` 在这个代码中,我们首先获取了界面中的各个控件,并给登录按钮、注册按钮取消按钮分别设置了监听器。在登录按钮监听器中,我们首先获取了用户名和密码的输入内容,然后判断它们是否为空。如果为空,则弹出一个 Toast 提示用户输入用户名和密码;如果不为空,则可以根据用户名和密码查询数据库,判断用户输入的账号密码是否正确。如果正确,则跳转到欢迎页面。 对于注册按钮监听器,我们直接跳转到注册页面。对于取消按钮监听器,我们则清空了用户名和密码输入框的内容。 最后,我们需要创建一个欢迎页面的 Activity。在这个页面中,我们可以展示一些欢迎信息,并给用户提供一些操作按钮,比如退出登录等。由于这个页面的实现和登录页面并没有太大关系,这里就不再赘述了。 至此,一个简单的登录页面就完成了。当然,这只是一个非常基础的实现,实际应用中还需要考虑很多其他的问题,比如数据加密、网络通信、用户体验等。但是这个示例足以让您了解如何使用 Android Studio 实现一个简单的登录页面了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值