要让一个app唤起另一个app,首先要做的是要知道被唤起app的包名,一般在手机的 文件管理->Android->data就能看到已安装的app的包名了。 这里是先用getPackageManager()获取设备应用信息,再用getLaunchIntentForPackage(packname)唤起传入包名packname相对应的app。 再使用AppUtils类从AlarmReceiver用包名唤起对应app 这里要用到的是TextView的点击事件,所以给每个要唤起的app都定义一个TextView TextView的点击事件会先检测手机中是否有安装对应的app,没有安装的话如下图所示 这里是用模拟器运行的,模拟器上只安装了QQ,所以如果点击其他两个TextView会提示“设备没有安装微信/微博” 上面的TextView是在选择不同应用的闹钟,文字会发生改变的标题; 这里我们点击第一个TextView,启动QQ闹钟,会跳转到设置闹钟的界面。可以调时钟设置时间,也可以直接输入时间的数值。 闹钟选用的是Android Studio自带的TimePicker组件,这在很多app上都有使用,比如这里知乎设置自动切换夜间模式的时间节点的地方。 这里安卓手机模拟器的时间是下午3:44,把闹钟时间定为一分钟后——3:45 作者:赵昊阳做一个能定时唤起其他APP的闹钟程序
一、准备工作:
比如这里的com.baidu.BaiduMap和com.baidu.netdisk对应的就是“百度地图”和“百度网盘”这两个app。
本次博客我将用QQ、微信和新浪微博这三个app作为闹钟唤起的例子,想用闹钟唤起其他app,只需要把程序里的包名和相关位置的描述性文字进行修改,就能实现了。
QQapp的包名:com.tencent.mobileqq
微信app的包名:com.tencent.mm
微博app的包名:com.sina.weibo二、从一个app唤起其他app功能的核心代码:
package com.clock.app; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; public class AppUtils { public static void startApp(Context context, String packname) { PackageManager packageManager = context.getPackageManager();//获取设备应用信息 Intent intent = packageManager.getLaunchIntentForPackage(packname);//唤起app context.startActivity(intent); } // 检查包名是否存在 public static boolean checkPackInfo(Context context, String packname) { PackageInfo packageInfo = null; try { packageInfo = context.getPackageManager().getPackageInfo(packname, 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return packageInfo != null; } }
package com.clock.app; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class AlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int type = intent.getIntExtra("type",1); if(type == 1){ AppUtils.startApp(context,"com.tencent.mobileqq"); }else if(type == 2){ AppUtils.startApp(context,"com.sina.weibo"); }else if(type == 3){ AppUtils.startApp(context,"com.tencent.mm"); } } }
三、主页面:
(1)XML布局代码
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <TextView android:layout_width="match_parent" android:layout_height="50dp" android:background="#ff0000" android:text="主页" android:textSize="16sp" android:gravity="center" android:textColor="#ffffff" /> <TextView android:id="@+id/qq_tv" android:layout_width="match_parent" android:layout_height="50dp" android:text="启动QQ闹钟" android:textSize="16sp" android:gravity="center" android:textColor="#000000" /> <View android:layout_width="match_parent" android:layout_height="0.5dp" android:background="#ff00ff" /> <TextView android:id="@+id/weibo_tv" android:layout_width="match_parent" android:layout_height="50dp" android:text="启动微博闹钟" android:textSize="16sp" android:gravity="center" android:textColor="#000000" /> <View android:layout_width="match_parent" android:layout_height="0.5dp" android:background="#ff00ff" /> <TextView android:id="@+id/wechat_tv" android:layout_width="match_parent" android:layout_height="50dp" android:text="启动微信闹钟" android:textSize="16sp" android:gravity="center" android:textColor="#000000" /> <View android:layout_width="match_parent" android:layout_height="0.5dp" android:background="#ff00ff" /> </LinearLayout>
(2)界面截图
(3)后台Java代码
package com.clock.app; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView QQTv = findViewById(R.id.qq_tv); TextView weiboTv = findViewById(R.id.weibo_tv); TextView wechatTv = findViewById(R.id.wechat_tv); QQTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(AppUtils.checkPackInfo(MainActivity.this,"com.tencent.mobileqq")) { Intent intent = new Intent(MainActivity.this, ClockActivity.class); intent.putExtra("type", 1); startActivity(intent); }else { Toast.makeText(MainActivity.this,"设备没有安装QQ",Toast.LENGTH_SHORT).show(); } } }); weiboTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(AppUtils.checkPackInfo(MainActivity.this,"com.sina.weibo")) { Intent intent = new Intent(MainActivity.this, ClockActivity.class); intent.putExtra("type", 2); startActivity(intent); }else { Toast.makeText(MainActivity.this,"设备没有安装微博",Toast.LENGTH_SHORT).show(); } } }); wechatTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(AppUtils.checkPackInfo(MainActivity.this,"com.tencent.mm")) { Intent intent = new Intent(MainActivity.this, ClockActivity.class); intent.putExtra("type", 3); startActivity(intent); }else { Toast.makeText(MainActivity.this,"设备没有安装微信",Toast.LENGTH_SHORT).show(); } } }); } }
四、闹钟界面:
(1)XML布局代码
下面的TextView是在设置好闹钟后,显示闹钟唤起功能启动的时间。<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <RelativeLayout android:layout_width="match_parent" android:layout_height="50dp" android:background="#ff0000" android:orientation="horizontal" > <TextView android:id="@+id/title_tv" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="闹钟定时" android:textColor="#FFFFFFFF" android:textSize="18sp" android:textStyle="bold" /> </RelativeLayout> <TextView android:id="@+id/content_tv" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="闹钟定时" android:lineSpacingExtra="8dp" android:textColor="#000000" android:textSize="18sp" android:textStyle="bold" /> </LinearLayout>
(2)界面截图
(3)后台Java代码
TimePicker组件需要说明的地方已在代码中写下注释
代码:package com.clock.app; import android.app.Activity; import android.app.AlarmManager; import android.app.Dialog; import android.app.PendingIntent; import android.app.TimePickerDialog; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import android.widget.TimePicker; import java.text.SimpleDateFormat; import java.util.Calendar; public class ClockActivity extends Activity { AlarmManager alarmManager = null; Calendar calendar = Calendar.getInstance(); TextView title_tv,timeTv; private int type = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_clock); title_tv = findViewById(R.id.title_tv); timeTv = findViewById(R.id.content_tv); type = getIntent().getIntExtra("type",1); if(type == 1){ title_tv.setText("拉起QQ闹钟"); }else if(type == 2){ title_tv.setText("拉起微博闹钟"); }else if(type == 3){ title_tv.setText("拉起微信闹钟"); } alarmManager=(AlarmManager)getSystemService(Context.ALARM_SERVICE); setClock(); } private void setClock(){ Dialog dialog = new TimePickerDialog(ClockActivity.this,new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { // TODO Auto-generated method stub Calendar c=Calendar.getInstance(); //获取日期对象 c.setTimeInMillis(System.currentTimeMillis()); //设置Calendar对象 c.set(Calendar.HOUR_OF_DAY, hourOfDay); //设置闹钟小时数 c.set(Calendar.MINUTE, minute); //设置闹钟的分钟数 c.set(Calendar.SECOND, 0); //设置闹钟的秒数 c.set(Calendar.MILLISECOND, 0); //设置闹钟的毫秒数 String realTime = new SimpleDateFormat("HH:mm").format(c.getTime()); timeTv.setText(realTime); Intent intent = new Intent(ClockActivity.this, AlarmReceiver.class); intent.putExtra("type", type); // intent.setFlags(Integer.parseInt(id));//作为取消时候的标识 PendingIntent pi = PendingIntent.getBroadcast(ClockActivity.this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); //创建PendingIntent //设置一次性闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟执行时间,第三个参数表示闹钟响应动作。 if(c.getTimeInMillis() < System.currentTimeMillis()){ Log.i("clock", "设置时间要推迟24小时,不然立刻会响"); alarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis()+24*60*60*1000, pi); }else{ alarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi); //设置闹钟,当前时间就唤醒 } } },calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), false); dialog.show(); } }
五、运行测试:
(1)打开闹钟app,点击启动QQ闹钟
(2)设置闹钟时间
(3)闹钟设置成功,等待到达指定时间
(4)QQ成功按时被唤起
(5)把Android工程导出成apk在自己手机上安装成功运行
原文地址:https://blog.csdn.net/joe337347889/article/details/106594221
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算