Android app中调用启动其他应用(系统应用和第三方应用)2016.10.25新增android 6.0打电话api

来源:互联网 发布:在阿里云搭建网站 编辑:程序博客网 时间:2024/05/21 21:48

一、打开第三方应用

方法一

    Intent intent=new Intent();      //包名 包名+类名(全路径)      intent.setClassName("com.linxcool", "com.linxcool.PlaneActivity");      startActivity(intent);  

方法二

    Intent intent = new Intent();      ComponentName comp = new ComponentName("com.linxcool","com.linxcool.PlaneActivity");      intent.setComponent(comp);      intent.setAction("android.intent.action.MAIN");      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);      startActivity(intent);

方法三

出自storm的博客。
这段代码会检测app是否安装,没安装的话会指向商店下载。

    public static final String APP_PACKAGE_NAME = "com.*.*";//包名    /**     * 启动薄荷App     * @param context     */    public static void launchapp(Context context) {        // 判断是否安装过App,否则去市场下载        if (isAppInstalled(context, APP_PACKAGE_NAME)) {            context.startActivity(context.getPackageManager().getLaunchIntentForPackage(APP_PACKAGE_NAME));        } else {            goToMarket(context, APP_PACKAGE_NAME);        }    }    /**     * 检测某个应用是否安装     *      * @param context     * @param packageName     * @return     */    public static boolean isAppInstalled(Context context, String packageName) {        try {            context.getPackageManager().getPackageInfo(packageName, 0);            return true;        } catch (NameNotFoundException e) {            return false;        }    }    /**     * 去市场下载页面     */    public static void goToMarket(Context context, String packageName) {        Uri uri = Uri.parse("market://details?id=" + packageName);        Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);        try {            context.startActivity(goToMarket);        } catch (ActivityNotFoundException e) {        }    }

调用第三方应用的关键在于获得第三方应用的包名入口Activity类名

获得获得第三方应用的包名入口Activity类名

  • 使用aapt 
    //aapt是sdk自带的一个工具,在sdk\builds-tools\目录下
    1.以ES文件浏览器为例,命令行中切换到aapt.exe目录执行:aapt dump badging E:\apk\es3.apk
    2.运行后的结果中以下两行分别是应用包名package和入口activity名称
    package: name=’com.estrongs.android.pop’//在输出比较靠前的位置
    launchable-activity: name=’com.estrongs.android.pop.view.FileExplorerActivity’
    注:在android sdk目录搜索可以找到aapt.exe,如果没有可以下载apktool。

  • 查看AndroidManifest.xml
    1.使用apktool反编译app:apktool.bat d es3.apk E:\apk\es
    2.打开AndroidManifest.xml
    manifest节点的package属性值是应用的包名:
    查找android.intent.action.MAIN和android.intent.category.LAUNCHER对应的activity,该activity对应的android:name属性既是入口activity名称,如下:

        <activity android:theme=”@android:tyle/Theme.NoTitleBar”         android:label=”@string/app_name” android:name=”com.estrongs.android.pop.view.FileExplorerActivity”>        <intent-filter>        <action android:name=”android.intent.action.MAIN” />        <category android:name=”android.intent.category.LAUNCHER” />        </intent-filter>        </activity>

android.intent.action.MAIN决定应用程序最先启动的Activity,android.intent.category.LAUNCHER决定应用程序是否显示在
程序列表里。

顺便分享几个应用的包名和入口Activity(用aapt获得的):

apppackagelauncher微博com.sina.weibocom.sina.weibo.SplashActivity知乎com.zhihu.androidcom.zhihu.android.ui.activity.GuideActivity薄荷com.app.onecom.app.one.ui.SplashActivity

二、系统应用

1.从google搜索内容

    Intent intent = new Intent();      intent.setAction(Intent.ACTION_WEB_SEARCH);      intent.putExtra(SearchManager.QUERY,"搜索内容")      startActivity(intent);  

2.浏览网页

    Uri uri =Uri.parse("http://www.google.com");      Intent it = new Intent(Intent.ACTION_VIEW,uri);      startActivity(it);  

3.显示地图

    Uri uri = Uri.parse("geo:38.899533,-77.036476");      Intent it = newIntent(Intent.Action_VIEW,uri);      startActivity(it);  

4.路径规划

    Uri uri =Uri.parse("http://maps.google.com/maps?f=dsaddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");      Intent it = newIntent(Intent.ACTION_VIEW,URI);      startActivity(it);  

5.拨打电话

    Uri uri =Uri.parse("tel:xxxxxx");      Intent it = new Intent(Intent.ACTION_DIAL,uri);        startActivity(it);  

这个用法有一定的局限性,就是startActivity()一定要在主线程/UI线程,下面介绍另一种方法:
在Android M 即android 6.0上新增一个打电话的接口 placeCall(Uri address, Bundle extras),下面是说明,格式我就不整理了

    * Requires permission: {@link android.Manifest.permission#CALL_PHONE}//申请权限    *    * Usage example:    * <pre>    * Uri uri = Uri.fromParts("tel", "12345", null);//Uri 主要是号码    * Bundle extras = new Bundle();    * extras.putBoolean(TelecomManager.EXTRA_START_CALL_WITH_SPEAKERPHONE, true);//默认开扬声器    * telecomManager.placeCall(uri, extras);

6.发短信

    //方法1:      Intent it = newIntent(Intent.ACTION_VIEW);         it.putExtra("sms_body", "TheSMS text");         it.setType("vnd.android-dir/mms-sms");         startActivity(it);      //方法2:      Uri uri =Uri.parse("smsto:0800000123");         Intent it = newIntent(Intent.ACTION_SENDTO, uri);         it.putExtra("sms_body", "TheSMS text");         startActivity(it);      //方法三:      String body="this is sms demo";      Intent mmsintent = newIntent(Intent.ACTION_SENDTO, Uri.fromParts("smsto", number, null));      mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_BODY,body);      mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_COMPOSE_MODE,true);      mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_EXIT_ON_SENT,true);      startActivity(mmsintent);  

7.发送彩信

    Uri uri =Uri.parse("content://media/external/images/media/23");         Intent it = newIntent(Intent.ACTION_SEND);         it.putExtra("sms_body","some text");         it.putExtra(Intent.EXTRA_STREAM, uri);         it.setType("image/png");         startActivity(it);      StringBuilder sb = new StringBuilder();      sb.append("file://");      sb.append(fd.getAbsoluteFile());      Intent intent = newIntent(Intent.ACTION_SENDTO, Uri.fromParts("mmsto", number, null));      // Below extra datas are all optional.      intent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_SUBJECT,subject);      intent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_BODY,body);      intent.putExtra(Messaging.KEY_ACTION_SENDTO_CONTENT_URI,sb.toString());      intent.putExtra(Messaging.KEY_ACTION_SENDTO_COMPOSE_MODE,composeMode);      intent.putExtra(Messaging.KEY_ACTION_SENDTO_EXIT_ON_SENT,exitOnSent);      startActivity(intent);  

8.发送Email

    Uri uri =Uri.parse("mailto:xxx@abc.com");      Intent it = newIntent(Intent.ACTION_SENDTO, uri);      startActivity(it);      Intent it = new Intent(Intent.ACTION_SEND);         it.putExtra(Intent.EXTRA_EMAIL,"me@abc.com");         it.putExtra(Intent.EXTRA_TEXT, "Theemail body text");         it.setType("text/plain");         startActivity(Intent.createChooser(it,"Choose Email Client"));      Intent it=new Intent(Intent.ACTION_SEND);           String[] tos={"me@abc.com"};           String[]ccs={"you@abc.com"};           it.putExtra(Intent.EXTRA_EMAIL, tos);           it.putExtra(Intent.EXTRA_CC, ccs);           it.putExtra(Intent.EXTRA_TEXT, "Theemail body text");           it.putExtra(Intent.EXTRA_SUBJECT, "Theemail subject text");           it.setType("message/rfc822");           startActivity(Intent.createChooser(it,"Choose Email Client"));         Intent it = newIntent(Intent.ACTION_SEND);         it.putExtra(Intent.EXTRA_SUBJECT, "Theemail subject text");          it.putExtra(Intent.EXTRA_STREAM,"file:///sdcard/mysong.mp3");         sendIntent.setType("audio/mp3");         startActivity(Intent.createChooser(it,"Choose Email Client"));

9.播放多媒体

    Intent it = new Intent(Intent.ACTION_VIEW);      Uri uri =Uri.parse("file:///sdcard/song.mp3");      it.setDataAndType(uri,"audio/mp3");      startActivity(it);      Uri uri =Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI,"1");         Intent it = new Intent(Intent.ACTION_VIEW,uri);         startActivity(it);  

10.卸载 apk

    Uri uri =Uri.fromParts("package", strPackageName, null);         Intent it = newIntent(Intent.ACTION_DELETE, uri);         startActivity(it);  

11.安装 apk

    Uri installUri = Uri.fromParts("package","xxx", null);      returnIt = newIntent(Intent.ACTION_PACKAGE_ADDED, installUri);      Intent intent = new Intent(Intent.ACTION_VIEW);      intent.setDataAndType(Uri.parse("file://" + filepath),"application/vnd.android.package-archive");      startActivity(intent);// 安装 

12.打开照相机

    //1      Intent intent = new Intent("android.media.action.STILL_IMAGE_CAMERA"); //调用照相机      startActivity(intent);      //2      Intent i = new Intent(Intent.ACTION_CAMERA_BUTTON, null);      this.sendBroadcast(i);      //3      long dateTaken = System.currentTimeMillis();      String name = createName(dateTaken) + ".jpg";      fileName = folder + name;      ContentValues values = new ContentValues();      values.put(Images.Media.TITLE, fileName);      values.put("_data", fileName);      values.put(Images.Media.PICASA_ID, fileName);      values.put(Images.Media.DISPLAY_NAME, fileName);      values.put(Images.Media.DESCRIPTION, fileName);      values.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, fileName);      Uri photoUri = getContentResolver().insert(      MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values);      Intent inttPhoto = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);      inttPhoto.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);      startActivityForResult(inttPhoto, 10);  

13.从gallery选取图片

    Intent i = new Intent();      i.setType("image/*");      i.setAction(Intent.ACTION_GET_CONTENT);      startActivityForResult(i, 11);  

14.打开录音机

    Intent mi = new Intent(Media.RECORD_SOUND_ACTION);      startActivity(mi);  

15.显示应用详细列表

    Uri uri =Uri.parse("market://details?id=app_id");              Intent it = new Intent(Intent.ACTION_VIEW,uri);              startActivity(it);              //where app_id is the application ID, findthe ID               //by clicking on your application on Markethome               //page, and notice the ID from the addressbar      //发现用package name也可以      //Uri uri =Uri.parse("market://details?id=<packagename>");  

16.寻找应用

    Uri uri =Uri.parse("market://search?q=pname:pkg_name");              Intent it = new Intent(Intent.ACTION_VIEW,uri);              startActivity(it);      //where pkg_name is the full package pathfor an application    

17.打开联系人列表

    //1                 Intent i = new Intent();      i.setAction(Intent.ACTION_GET_CONTENT);      i.setType("vnd.android.cursor.item/phone");      startActivityForResult(i, REQUEST_TEXT);      //2      Uri uri = Uri.parse("content://contacts/people");      Intent it = new Intent(Intent.ACTION_PICK, uri);      startActivityForResult(it, REQUEST_TEXT);  

18.调用系统编辑添加联系人

    Intent intent = newIntent(Intent.ACTION_INSERT_OR_EDIT);      intent.setType(People.CONTENT_ITEM_TYPE);      intent.putExtra(Contacts.Intents.Insert.NAME, "My Name");      intent.putExtra(Contacts.Intents.Insert.PHONE, "+1234567890");      intent.putExtra(Contacts.Intents.Insert.PHONE_TYPE,Contacts.PhonesColumns.TYPE_MOBILE);      intent.putExtra(Contacts.Intents.Insert.EMAIL, "com@com.com");      intent.putExtra(Contacts.Intents.Insert.EMAIL_TYPE, Contacts.ContactMethodsColumns.TYPE_WORK);      startActivity(intent);  

参考:

  1. 查看Android应用包名package和入口activity名称
  2. Android之调用其他程序
  3. Android打开第三方Application的Launch Activity
3 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝店卖假货怎么办 工商对淘宝卖假包怎么办 在天猫买到假美的净水器怎么办 淘宝被恶意投诉怎么办 淘宝被别人举报怎么办 支付宝暂时关闭怎么办 支付宝被投诉怎么办 微店订单退款怎么办 支付宝被骗红包怎么办 顾客退款不退货怎么办 欠供应商的货款怎么办 运营被当作客服怎么办 微信赌球被骗怎么办 微信被骗3000怎么办 手机换屏幕被骗怎么办 考驾照被骗怎么办呀 学车被骗了怎么办 银行卖保险被骗怎么办 卖家违规怎么办扣分 淘宝很久没发货怎么办 淘宝很久不发货怎么办 买家下单就不给发货怎么办 淘宝商家不退货怎么办 退货了不退款怎么办 淘宝客户不退货怎么办 淘宝退款不退怎么办 qq密码记不着了怎么办 退货填错地址怎么办 淘宝店主出门发货怎么办 化妆品囤货太多怎么办 查分网页崩溃怎么办 记事本回车键不能换行怎么办 网页xml 载入失效怎么办 网页没有搜索栏怎么办 咖喱调料打开了怎么办 煮咖喱水放多了怎么办 营业执照4年没用怎么办 刷赞网站打不开怎么办 网页界面变大了怎么办 照片在易企秀放不完整怎么办 易企秀审核未通过怎么办