20_Android中apk安装器,通过WebView来load进一个页面,Android通知,程序退出自动杀死进程,通过输入包名的方式杀死进程

简介: 场景:实现安装一个apk应用程序的过程。界面如下:编写如下应用,应用结构如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android

  1. 场景:实现安装一个apk应用程序的过程。界面如下:

  1. 编写如下应用,应用结构如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity" >

   

    <EditText

        android:hint="请输入安装apk文件的路径"

         android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:id="@+id/et_path"/>

   

    <Button

        android:onClick="click"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_centerHorizontal="true"

        android:layout_centerVertical="true"

        android:text="安装"/>

   

</RelativeLayout>

  1. MainActivity的内容如下:

package com.itheima.apkinstaller;

 

import java.io.File;

 

import android.app.Activity;

import android.content.Intent;

import android.net.Uri;

import android.os.Bundle;

import android.view.View;

import android.widget.EditText;

 

public class MainActivity extends Activity {

    private EditText et_path;

   

    @Override

    protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

       et_path = (EditText) findViewById(R.id.et_path);

    }

 

    public void click(View view) {

       String path = et_path.getText().toString().trim();

//      <intent-filter>

//      <action android:name="android.intent.action.VIEW" />

//      <category android:name="android.intent.category.DEFAULT" />

//      <data android:scheme="content" />

//      <data android:scheme="file" />

//      <data android:mimeType="application/vnd.android.package-archive" />

//      </intent-filter>

      

       Intent intent = new Intent();

       intent.setAction("android.intent.action.VIEW");

       intent.addCategory("android.intent.category.DEFAULT");

       intent.setDataAndType(Uri.fromFile(new File(path)), "application/vnd.android.package-archive");

       startActivity(intent);

    }

}

  1. Android清单文件内容如下:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.itheima.apkinstaller"

    android:versionCode="1"

    android:versionName="1.0" >

 

    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="19" />

 

    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name="com.itheima.apkinstaller.MainActivity"

            android:label="@string/app_name" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

 

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>

 

</manifest>

 

1 场景:通过WebView加载一个页面,程序运行后的界面如下(注意:下面的页面是通过WebView通过load的方式加载进去的):

程序案例结构如下:

2  编写activity_main.xml布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity" >

 

    <!-- 嵌入的浏览器 -->

    <WebView

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:id="@+id/wv"/>

   

</RelativeLayout>

3 Android的清单文件:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.itheima.htmlui"

    android:versionCode="1"

    android:versionName="1.0" >

 

    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="19" />

<uses-permission android:name="android.permission.INTERNET"/>

   

    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name="com.itheima.htmlui.MainActivity"

            android:label="@string/app_name" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

 

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>

 

</manifest>

 

1 Android通知,界面效果:

点击点击显示通知,发现上方出现了一个红色小人的通知

点击新版点击显示通知,将通知滑动显示查看,效果如下:

程序案例结构如下:

2 编写布局文件:activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity" >

 

    <Button

        android:onClick="click"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_centerHorizontal="true"

        android:layout_centerVertical="true"

        android:text="点击显示通知" />

    <Button

        android:onClick="click2"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_centerHorizontal="true"

        android:text="新版点击显示通知" />

   

</RelativeLayout>

3 编写MainActivity,代码如下:

package com.itheima.notification;

 

import android.annotation.SuppressLint;

import android.app.Notification;

import android.app.NotificationManager;

import android.app.PendingIntent;

import android.content.Intent;

import android.graphics.BitmapFactory;

import android.net.Uri;

import android.os.Bundle;

import android.support.v7.app.ActionBarActivity;

import android.view.View;

 

public class MainActivity extends ActionBarActivity {

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

    }

 

    public void click(View view){

       NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

       Notification notification = new Notification(R.drawable.notification,

           "我是一个通知", System.currentTimeMillis());

       notification.flags = Notification.FLAG_AUTO_CANCEL;

       Intent intent = new Intent();

       intent.setAction(Intent.ACTION_CALL);

       intent.setData(Uri.parse("tel:10086"));

       //延期的意图

       PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);

       //设置点击事件的类型

       notification.setLatestEventInfo(this, "我是标题", "我是内容", contentIntent);

       nm.notify(0, notification);

    }

   

    /**

     * 新版本的notification

     * @param view

     */

    @SuppressLint("NewApi")

    public void click2(View view){

        Notification noti = new Notification.Builder(this)

         .setContentTitle("我是标题")  //这些都是Android版本11版本开始的

         .setContentText("我是内容")

         .setSmallIcon(R.drawable.notification)

         .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher))

         .build();

        NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        nm.notify(0, noti);

    }

}

Android清单文件:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.itheima.notification"

    android:versionCode="1"

    android:versionName="1.0" >

 

    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="19" />

    <uses-permission android:name="android.permission.CALL_PHONE"/>

   

    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name="com.itheima.notification.MainActivity"

            android:label="@string/app_name" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

 

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>

 

</manifest>

=============================================================================

1        自杀代码:杀死进程的代码如下:

package com.itheima.exit;

 

import android.app.Activity;

import android.app.AlertDialog;

import android.app.AlertDialog.Builder;

import android.content.DialogInterface;

import android.content.DialogInterface.OnClickListener;

import android.os.Bundle;

 

public class MainActivity extends Activity {

   

    protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

    }

   

    @Override

    public void onBackPressed() {

       AlertDialog.Builder builder = new Builder(this);

       builder.setTitle("提醒");

       builder.setMessage("确定退出当前应用程序吗?");

       builder.setPositiveButton("立刻退出", new OnClickListener() {

          

           public void onClick(DialogInterface dialog, int which) {

              finish();//关闭当前的activity

              //把自己的进程杀死

              //自杀的方法

               android.os.Process.killProcess(android.os.Process.myPid());

           }

       });

       builder.setNegativeButton("取消", null);

       builder.show();

    }

}

程序退出先的效果(在Devices中的效果):

退出后:

 

 

1 杀死进程,场景:杀死空进程,后台进程,他杀(也就是说杀不死自己),界面效果:

程序案例代码结构如下:

2 编写activity_main.xml布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity" >

   

    <EditText

        android:hint="请输入要杀死的进程包名"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:id="@+id/et_packname"/>

   

    <Button

        android:onClick="click"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_centerHorizontal="true"

        android:layout_centerVertical="true"

        android:text="杀死进程"/>

</RelativeLayout>

3 MainActivity的代码如下:

package com.itheima.killother;

 

import android.app.Activity;

import android.app.ActivityManager;

import android.os.Bundle;

import android.view.View;

import android.widget.EditText;

 

public class MainActivity extends Activity {

    private ActivityManager am;//相当于进程管理器

    private EditText et_packname;

 

    protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

      

       //所有程序的开启都是由ActivityActivityManager来管理的

       am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);

        et_packname = (EditText) findViewById(R.id.et_packname);

    }

   

    public void click(View view) {

       String packname = et_packname.getText().toString().trim();

       //注意要杀死别的进程需要加上权限

       //<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>

       //这里中方式只是杀死别人,注意:手机里面有些进程是杀死不掉的,比如电话进程

       am.killBackgroundProcesses(packname);

    }

}

程序运行结果:

注意:如果有时候提示要重启adb,可以通过下面的方式:

下面以杀死上面的com.android.music为例:

点击杀死进程前:

点击杀死进程之后的效果:

 

 

 

 

目录
相关文章
|
4月前
|
网络协议 Linux
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
704 2
|
4月前
|
Linux Python
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
72 2
|
3月前
|
存储 Linux Docker
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
关于如何在CentOS 7.6上安装Docker、介绍Docker存储引擎以及服务进程关系的实战案例。
169 3
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
|
2月前
|
安全 API C#
C# 如何让程序后台进程不被Windows任务管理器强制结束
C# 如何让程序后台进程不被Windows任务管理器强制结束
69 0
|
3月前
|
Python
惊!Python进程间通信IPC,让你的程序秒变社交达人,信息畅通无阻
【9月更文挑战第13天】在编程的世界中,进程间通信(IPC)如同一场精彩的社交舞会,每个进程通过优雅的IPC机制交换信息,协同工作。本文将带你探索Python中的IPC奥秘,了解它是如何让程序实现无缝信息交流的。IPC如同隐形桥梁,连接各进程,使其跨越边界自由沟通。Python提供了多种IPC机制,如管道、队列、共享内存及套接字,适用于不同场景。通过一个简单的队列示例,我们将展示如何使用`multiprocessing.Queue`实现进程间通信,使程序如同社交达人般高效互动。掌握IPC,让你的程序在编程舞台上大放异彩。
29 3
|
4月前
|
数据采集 监控 API
如何监控一个程序的运行情况,然后视情况将进程杀死并重启
这篇文章介绍了如何使用Python的psutil和subprocess库监控程序运行情况,并在程序异常时自动重启,包括多进程通信和使用日志文件进行断点重续的方法。
|
4月前
|
Python
惊!Python进程间通信IPC,让你的程序秒变社交达人,信息畅通无阻
【8月更文挑战第1天】在编程世界中,进程间通信(IPC)犹如一场社交舞会,各进程通过IPC机制优雅地交换信息,共同完成复杂任务。IPC就像隐形桥梁,连接并行运行的进程,使它们能跨越边界自由沟通。Python提供了多种IPC机制,如管道、队列、共享内存和套接字等,适应不同需求。例如,使用`multiprocessing.Queue`实现进程间通信,生产者向队列添加数据,消费者取出并处理数据,两者虽独立却能有效协作。IPC打破了进程界限,使得程序能像社交达人般自由交流,构建出高效、灵活的应用。掌握IPC,让程序信息畅通无阻。
26 1
|
4月前
|
Android开发
【Azure 环境】移动应用 SSO 登录AAD, MSAL的配置为Webview模式时登录页面无法加载
【Azure 环境】移动应用 SSO 登录AAD, MSAL的配置为Webview模式时登录页面无法加载
|
4月前
|
并行计算 开发者 Python
解锁Python多进程编程的超能力:并行计算的魔法与奇迹,探索处理器核心的秘密,让程序性能飞跃!
【8月更文挑战第12天】在Python编程领域,多进程编程是一项关键技能,能有效提升程序效率。本文通过理论与实践结合,深入浅出地介绍了Python中的多进程编程。首先解释了多进程的概念:即操作系统中能够并发执行的多个独立单元,进而提高整体性能。接着重点介绍了`multiprocessing`模块,演示了如何创建和启动进程,以及进程间的通信方式,如队列等。此外,还提到了更高级的功能,例如进程池管理和同步原语等。通过这些实例,读者能更好地理解如何在实际项目中利用多核处理器的优势,同时注意进程间通信和同步等问题,确保程序稳定高效运行。
44 0
|
5月前
|
Java 调度 Windows
Java面试之程序、进程、线程、管程和并发、并行的概念
Java面试之程序、进程、线程、管程和并发、并行的概念
29 0

相关实验场景

更多