android 在service 启动activity

我想我们一般在Service里想启动Activity一定会这样写: 

Java代码   收藏代码
  1. Intent intentv = new Intent(Intent.ACTION_VIEW);  
  2.             intentv.setData(uri);  
  3.             intentv.putExtra("keepTitle"true);  
  4.             startActivity(intentv);  


这样写就会报错的: 

03-11 02:37:09.737: ERROR/AndroidRuntime(7881): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 

提示要加上FLAG_ACTIVITY_NEW_TASK,所以加上 intentv.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);这一行就可以了。 

但若看的源码够的话,还会发现有另外一种方法在Service里面启动Activity的另外一种方法:通过PendingIntent,下面就以Tag中TagView(Activity)和TagService为例子: 

TagView里启动TagService并且把待会在TagService里面启动的Activity用Pending将其封装好并且传给TagService: 

Java代码   收藏代码
  1. TagService.saveMessages(this, msgs, false, getPendingIntent());private PendingIntent getPendingIntent() {  
  2.         Intent callback = new Intent();  
  3.         callback.setClass(this, TagViewer.class);  
  4.         callback.setAction(Intent.ACTION_VIEW);  
  5.         callback.setFlags(Intent. FLAG_ACTIVITY_CLEAR_TOP);  
  6.         callback.putExtra(EXTRA_KEEP_TITLE, true);  
  7.   
  8.         return PendingIntent.getActivity(this0, callback, PendingIntent.FLAG_CANCEL_CURRENT);  
  9.     }  



Java代码   收藏代码
  1. public static void saveMessages(Context context, NdefMessage[] msgs, boolean starred,  
  2.             PendingIntent pending) {  
  3.         Intent intent = new Intent(context, TagService.class);  
  4.         intent.putExtra(TagService.EXTRA_SAVE_MSGS, msgs);  
  5.         intent.putExtra(TagService.EXTRA_STARRED, starred);  
  6.         intent.putExtra(TagService.EXTRA_PENDING_INTENT, pending);  
  7.         context.startService(intent);  
  8.     }  

 

Java代码   收藏代码
  1. @Override  
  2.     public void onHandleIntent(Intent intent) {  
  3.         if (intent.hasExtra(EXTRA_SAVE_MSGS)) {  
  4.             Parcelable[] msgs = intent.getParcelableArrayExtra(EXTRA_SAVE_MSGS);  
  5.             NdefMessage msg = (NdefMessage) msgs[0];  
  6.   
  7.             ContentValues values = NdefMessages.toValues(this, msg, false, System.currentTimeMillis());  
  8.             Uri uri = getContentResolver().insert(NdefMessages.CONTENT_URI, values);  
  9.             if (intent.hasExtra(EXTRA_PENDING_INTENT)) {  
  10.                 Intent result = new Intent();  
  11.                 result.setData(uri);  
  12.   
  13.                 PendingIntent pending = (PendingIntent) intent.getParcelableExtra(EXTRA_PENDING_INTENT);  
  14.                
  15.                 try {  
  16.                     pending.send(this0, result);  
  17.                 } catch (CanceledException e) {  
  18.                     if (DEBUG) Log.d(TAG, "Pending intent was canceled.");  
  19.                 }  
  20.             }  
  21.   
  22.             return;  
  23.         }  
  24. .....  
  25. }  



通过pending.send(this, 0, result);启动了对应的Activity. 

这里也是PendingIntent的用法之一。 
我不太明白这两种启动Activity的方法有什么不同之处虽然效果都是一样的,对开销会怎样,希望知道的朋友能和我分享。呵呵..

 

转载于:https://www.cnblogs.com/shenbin/archive/2013/04/09/3011374.html

Android am命令启动ServiceActivity,BroadcastReceiver m命令启动ServiceActivity,BroadcastReceiver,在frameworks\base\cmds\am\src\com\android\commands\am 一.am命令启动Activity am start -n package name/.Activity name 例: 其AndroidManifest.xml中显示:其package=“com.example” am start -n com.example/ com.example.MainActivity am sta 阅读详情

相关推荐

Android Service启动Activity

Android Service启动ActivityService启动Activity基本可以分为两类: 1.从自己应用的Service启动自己应用的Activity,即显式意图; 2.从自己应用的Service启动到其他应用的Activity,或者从别的应用的Service启动到自己应用的Activity,即隐式意图; 1.显式意图启动下面为示例写法: Intent intent

「程序员飞飞」的博客 3564

Android中通过Service启动Activity遇到的问题及解决方案

最近在做毕业设计是有关Android方向的,有需要再后台运行的service中,等待用户指令打开Activity的情景,遇到一些坑,在这里分享一下,希望对大家有帮助。 一、没有添加flag 会报如下错误: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this real

LiePy的博客 3632

Service启动 Activity

转自:http://blog.csdn.net/comeoverjava/article/details/7454315 在 Service启动 Activity,有很多方式,比如隐式启动、显式启动等。 隐式启动 Activity,需要在manifest.xml 中为该 Activity 配置 ,如下所示:

yueguanyun的专栏 2073

Android-Service里面如何启动Activity?为什么要这么做?

目录1. 一个应用中有多少个Context,它们之间的区别是什么?2. Service/广播中是否可以启动Activity?为什么? 1. 一个应用中有多少个Context,它们之间的区别是什么? Context数量=Activity数量+Service数量+Application 从图中我们知道: Context其实是一个抽象类,它有两个子类:ContextImpl、ContextWrapper,ContextImpl是context的功能具体实现类,而ContextWrapper则是一个包装类,主要

吴唐人的博客 7439

Android 接收开机广播启动service/activity

Android 接收开机广播启动service/activity 前言: 此文章针对于普通手机APP,在没有限制之前直接可以通过接收开机广播,然后通过intent即可实现开机启动service/activity。 Intent intent = new Intent(context,XXXXX.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent);//启动activity context.s

qq_43540406的博客 9832

Android Notification、PendingIntent与后台启动ServiceActivity浅析

通知借助PendingIntent启动Service 可以模拟这样一个场景,发送一个通知,然后将APP杀死,之后在通知栏通过PendingIntent启动Service,看看是否会出现禁止后台启动Service的场景。 void notify() { NotificationCompat.Builder builder = new NotificationCompat.Builder...

weixin_45365889的博客 3454

android 启动其他app的activity,Android在一个app中启动其他app中的service或者Activity

前言:启动另一个app的activityservice其实是一样的,区别在于startActivity(intent)还是startService(intent)而已;所以下面案例以启动另一个app的服务为例;第一种方式:通过app包名和全路径类名Intent intent = new Intent(Intent.ACTION_VIEW);String packageName = "com.an...

weixin_39611275的博客 1684

android 广播启动服务,安卓不启动Activity可以用广播启动service吗?

我想利用广播监测网络变化,然后利用广播启动一个Service,但是发现不把程序运行到后台的话,service不会被启动,请问是什么原因?public class NetReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-gen...

weixin_35650041的博客 362

Android 启动其他应用的ActivityService失败解决

本文仅针对Android11,如果你的模拟器或设备是Android11的话,请继续看下去。 一、提出问题 最近在使用一个应用绑定另外一个应用的Service时,无论如何都绑定不上,现象是Service的onCreate()和onStartCommand()回调都没有执行。说明应用之间的通信出现了问题。 二、调查过程 了解到我们现在使用的模拟器使用的是Android11,所以抱着试一试的态度去看了一下Android11的新特性。发现在Android11中新增了一项“包可见性”。 作者:pc_Li

pc_LI 5560

android 启动 广播吗,安卓不启动Activity可以用广播启动service吗?

我想利用广播监测网络变化,然后利用广播启动一个Service,但是发现不把程序运行到后台的话,service不会被启动,请问是什么原因?public class NetReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-gen...

weixin_42508785的博客 163

AndroidService启动Activity的大坑

一    Context的继承关系图 二    异常如何产生 三    解决这个异常后会出现问题 四    ActivitystartActivity为什么不出现这个异常呢 五    Android 为什么要这么设计 六 样例代码 Service 启动 Dialog 使用 WindowManager 实现 使用 Activity 实现 在Activity中其中startActivity这个大家应该是

姚佳伟 2万+

android 在不同Activity启动和关闭Service

我整理的一些关于【Java】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/bLN8S1Android中不同Activity启动和关闭Service的实现指南 在Android开发中,Service是一种在后台长时间运行的组件,能用于进行后台操作。为了在不同的Activity...

weixin_41535723的博客 167

android service java_AndroidService启动Activity的大坑

Activity中其中startActivity这个大家应该是非常熟悉的;那么从service里面调用startActivity话,会怎么样呢?会出现下面的异常:android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_A...

weixin_31951365的博客 607

Android 后台限制启动ServiceActivity与Notification、PendingIntent浅析

Android O之后,很多后台启动的行为都开始受限,比如O的时候,不能后台启动Service,而在Android10之后,连Activity也加到了后台限制中。在Android O 后台startService限制简析中,层分析Android O之后,后台限制启动Service的场景,一般而言,APP退到后台(比如按Home键),1分钟之后变为后台APP,虽然进程存活,但是已经不能通过start...

happylishang的专栏 5576

androidservice启动/打开activity

后面这个thread位于一个service类的内部,也算是从service启动activity了。

饭松闹钟app,从现在开始放松 301

AndroidService里面启动Activity

AndroidService里面启动Activity

qq_27494201的博客 702

Android开机启动Activity或者Service方法

本文出自 “Bill_Hoo专栏” 博客,请务必保留此出处http://billhoo.blog.51cto.com/2337751/761230 这段时间在做Android的基础开发,现在有一需求是开机启动,按照网上某些博文教程做了下,始终不成功,一开机总是提示所启动的应用程序意外终止,于是参考了Android SDK doc,终于解决问题,下面把自己的经验分享给大家。 Andro...

aaa654654654的博客 148
上一篇: 淘宝客--淘宝开放平台--要UTF编码才能获取数据
下一篇: jquery html函数的一个问题
aa20201
博客等级 码龄12年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值