精华内容
下载资源
问答
  • 问题场景用小米手机使用小米推送一条消息,然后点击通知栏中的消息启动应用,然后进入会话的Activity。应用启动后,如果当前界面不是会话界面,那么新消息会在通知栏显示消息提醒,然后点击会话消息后却进不了会话的...

    前言

    最近遇到一个很奇葩的问题,终于解决了,所以想着记录一下,方便大家或者自己以后有需要的时候可以参考学习。

    问题场景

    用小米手机使用小米推送一条消息,然后点击通知栏中的消息启动应用,然后进入会话的Activity。应用启动后,如果当前界面不是会话界面,那么新消息会在通知栏显示消息提醒,然后点击会话消息后却进不了会话的Activity,即点击了通知栏通知后,系统都没有启动指定Activity的意思,没有看到系统启动Activity的Log,到是会看到系统处理这个Activity的影子。

    这个指定的Activity不是会话的Activity,而是在AndroidManifest.xml文件中指定android.intent.category.LAUNCHER的Activity A。也就是说有会话消息都是先从这个A开始,然后把数据往后面的Activity传。

    这里显示通知有两种方式,一种是由手机系统在通知栏弹出,比如小米手机上使用小米推送,华为手机上使用华为推送,另外一种是由应用的远程进程弹出。

    启动应用的第一个Activity A也有两种方式,一种是直接通过new来构造一个Intent,然后传入Activity A的class;另外一种是通过context.getPackageManager().getLaunchIntentForPackage(context.getPackageName())来获取启动的Activity A的Intent。然后调用PendingIntent.getActivity()方法,将得到的intent传入。

    那么问题来了,如果是点击系统弹出的通知栏或者远程进程弹出的通知栏,如果只是使用其中一种启动方式启动应用,那么在应用启动后,点击通知栏中由后台远程进程弹出的新消息通知,这个时候就不能进入会话的Activity。从系统的日志来看,没有启动Activity,只是对Activity做了处理。

    可能有人会想到是不是要加一个Intent.FLAG_ACTIVITY_NEW_TASK标识,因为在getLaunchIntentForPackage()方法中加了这个标识。

    最后测试发现,只要应用没有被启动,不管是点击系统弹出的通知栏还是远程进程弹出的通知栏,如果再收到新消息通知,再点击通知栏,就能进入会话Activity了。那只要判断应用中是否有Activity被启动就OK了,貌似问题可以解决了。

    问题解决

    于是用了下面的逻辑来判断是否有前台Activity在运行。

    /**

    * 判断UI进程是否正在运行

    * @return 返回true表示正在运行,否则没有运行

    */

    public static boolean isForegroundRunning() {

    ActivityManager am = (ActivityManager) EimCloud.getContext().getSystemService(Context.ACTIVITY_SERVICE);

    List list = am.getRunningAppProcesses();

    if (list != null) {

    for (ActivityManager.RunningAppProcessInfo info : list) {

    if (info.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND

    && EimCloud.getContext().getPackageName().equals(info.processName)) {

    return true;

    }

    }

    }

    return false;

    }

    拓展

    但是上面的方法在小米手机上凑效了,但在华为手机上还是有问题,即使同样的场景。华为又坑爹了!

    于是开始从上面的ActivityManager.RunningAppProcessInfo类中的importance变量的状态入手,然后测试各种场景可能出现的变量值,结果发现效果不尽人意,有些场景问题依旧。

    最后,又换种思路:不从Activity A开始启动应用,换个Activity B,也就是在调用PendingIntent.getActivity()方法传入Intent对象使用B的class。启动B会发现应用没有被初始化,则跳转到A执行初始化,然后再走正常流程。

    再针对各种场景以及各种机型测试,发现问题解决。从上面可以看出,虽然不懂背后原理,但解决问题的思路一定要广,特别是在急着发版本的时候,不要在一棵树上吊死。

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

    声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#nhooo.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

    展开全文
  • Android 点击通知栏 跳转

    千次阅读 2015-11-27 09:24:50
    项目中使用的是google的gcm推播服务,当从服务端发送消息给手机客户端时,通知栏会收到一条信息,如果此时用户停留在软件的界面上,应该是点击了通知栏,还是显示在原来的界面上,当用户退出了软件,点击通知栏,...

        项目中使用的是google的gcm推播服务,当从服务端发送消息给手机客户端时,通知栏会收到一条信息,如果此时用户停留在软件的界面上,应该是点击了通知栏,还是显示在原来的界面上,当用户退出了软件,点击通知栏,应该是回到软件的登陆界面,关键点其实是:

    转自:http://www.cnblogs.com/newcj/archive/2011/03/15/1984371.html,感谢这位前辈:

    因为不管是在什么时候按Home,再次从程序列表启动时,总能返回到Task的栈顶Activity。起初我想过一个办法,便是重载Activity写一个类实现当onResume的时候更新Notification,然后我的所有Activity类都直接从该类继承,使得当按Home 之后总能让Notification记住Task的栈顶Activity,就像QQ一样,但这种方法当然有点牵强,于是我开始看SDK 中 有关Home的Simple,终于发现了如果使用如下的Intent,便不会调用对应的Activity,而是调用Task中的栈顶Activity
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);
    intent.setClass(this, Main.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
      除了 setClass 可以换成使用 setClassName 绑定,FLAG_ACTIVITY_RESET_TASK_IF_NEEDED可以不设,其他的选项都缺一不可。设置ACTION_MAIN与CATEGORY_LAUNCHER是把该Intent发给了系统对应创建程序的模块,然后系统该模块根据设定的包与类信息还有flags进行处理。当然所有的Intent工作原理都是这样,只是对 ACTION_MAIN - CATEGORY_LAUNCHAR 的处理较为特殊,使得总是显示Task栈顶的Activity而不是setClass设定的Activity类。

          重点如下代码,接收通知并处理的函数:

    	@SuppressWarnings("deprecation")
    	private static void generateNotification(Context context, String message) {
    		int icon = R.drawable.ic_launcher;
    		long when = System.currentTimeMillis();
    		NotificationManager notificationManager = (NotificationManager) context
    				.getSystemService(Context.NOTIFICATION_SERVICE);
    		Notification notification = new Notification(icon, message, when);
    		String title = context.getString(R.string.app_name);
    		Intent notificationIntent = new Intent(Intent.ACTION_MAIN);
    		notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    		notificationIntent.setClass(context, LoginActivity.class);
    		notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
    				| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
    		PendingIntent intent = PendingIntent.getActivity(context, 0,
    				notificationIntent, 0);
    		notification.setLatestEventInfo(context, title, message, intent);
    		notification.flags |= Notification.FLAG_AUTO_CANCEL;
    		notificationManager.notify(0, notification);
    	}

           有兴趣的同学可以参考如下链接:

          1.http://www.cnblogs.com/newcj/archive/2011/03/15/1984371.html

          2.http://blog.csdn.net/jason0539/article/details/11946967

          有很多不懂的,希望大牛指导。

    展开全文
  • 手机通知栏不见了怎么办手机通知栏不见了的情况大多出现在安卓的设备中,手机通知栏不见了的情况出现时,大家不要急于刷机操作,或许很多人以刷机来一答了之,其实手机通知栏不见了的问题很好解决,有其他方式重启...

    手机通知栏不见了怎么办

    手机通知栏不见了的情况大多出现在安卓的设备中,手机通知栏不见了的情况出现时,大家不要急于刷机操作,或许很多人以刷机来一答了之,其实手机通知栏不见了的问题很好解决,有其他方式重启通知栏,当然刷机也是一种不错的方法。

    a6a20123edc8f3d088d7ed1d8b202a73.png

    方法/步骤

    步骤一:恢复出厂设置,首先若您的手机有恢复出厂设置的入口您可以点击“恢复出厂设置”功能将手机恢复到出厂设置的默认设置,若没有则要进入recovery模式wipe数据即可。

    a6a20123edc8f3d088d7ed1d8b202a73.png

    步骤二:重启通知栏,有的手机中可以打开或关闭通知栏,如go桌面就有这个功能,你可以尝试用go桌面重新打开通知栏,然后查看是否成功。

    a6a20123edc8f3d088d7ed1d8b202a73.png

    步骤三:一些防护软件,如360手机卫士、腾讯手机管家等,可以利用一键清理等功能结束通知栏程序进程,进入管家查看是否您的通知栏程序被加入了一键清理项,只需加入忽略名单即可。

    a6a20123edc8f3d088d7ed1d8b202a73.png

    步骤四:系统因为某种原因会出现通知栏问题,此时你只能恢复出厂设置或者重新刷机得以解决。刷机操作可以根据不同的手机在各大论坛查找刷机包以及教程进行刷机。

    a6a20123edc8f3d088d7ed1d8b202a73.png

    步骤五:若您的手机已经root,或许你可以通过替换通知栏程序文件的方式解决此问题。通知栏文件可以在刷机rom包中解压找到,直接替换手机中的系统通知栏文件即可。

    关于手机通知栏不见了怎么办的问题,不知道你是否已经解决了?如果你还有其他的方法,也与大家分享。

    展开全文
  • Android点击通知栏,打开应用跳转到相应的Activity在开发Android app的过程中,遇到这样一个需求:app中启动一个Service,该Service在独立进程中运行,与服务器保持长连接,将服务器推送过来的消息在通知栏中显示,...

    Android点击通知栏,打开应用跳转到相应的Activity

    在开发Android app的过程中,遇到这样一个需求:app中启动一个Service,该Service在独立进程中运行,与服务器保持长连接,将服务器推送过来的消息在通知栏中显示,并设置点击动作,点击后跳转到app中对应的Activity。目前遇到的问题是Service以独立进程运行,在收到消息并弹出通知后,app本身的进程有两种情况:

    1.app正在运行
    2.app已退出

    对于第一种情况,处理就非常简单了,直接将参数传入Intent并打开对应的Activity即可。

    但第二种情况比较复杂,因为app已经退出,而要打开的Activity中的某些操作是需要依赖app的初始化的,这些初始化操作是在app启动过程中进行的。举个例子,一个购物应用推送了某个新商品的消息,用户点击通知后进入商品详情的Activity,而该Activity中有个订购Button,点击该Button后就会从本地中获取用户的Id等信息并发一条消息给服务器,告诉服务器某用户订购了该商品。这些用户信息是在app启动时与服务器进行一系列交互后取得的。如果app退出后直接进入详情Activity并点击购买,就会因为获取不到用户信息而出错。

    所以目前要解决的问题时,在Notification中设置点击动作,如果app本身正在运行,直接跳转到目标Activity;如果app已经退出,先启动app完成初始化,再跳转到目标Activity。

    方案和思路
    我们假设目前有三个Activity:

    1.SplashActivity 用于显示app大图,同时进行用户登录等操作,服务器返回数据后跳转到MainActivity。
    2.MainActivity app的主Activity。
    3.DetailActivity MainActivity中点击Button进入的Activity,用于显示某件商品详情。
    而弹出通知的Service在另外一个进程中。

    我们要达到的目的是:

    1.点击通知栏通知,假如app正在运行,则直接跳转到DetailActivity显示具体内容,在DetailActivity中按Back键返回MainActivity
    2.点击通知栏通知,假如app已经退出,先从SplashActivity进入,显示app启动界面,初始化操作完成后进入MainActivity再跳转到DetailActivity显示具体内容,在DetailActivity中按Back键返回MainActivity。

    初步的思路是先判断app进程是否存在,如果存在的话,就利用startActivities启动MainActivity和DetailActivity。为什么还要启动MainActivity而不直接只启动DetailActivity?因为有如下情况,进程中的所有Activity都已经退出了,但进程还没有被系统回收,这时判断进程是否存在返回true,然后只启动DetailActivity的话,按Back键任务栈就直接到底,返回桌面了。而我们要的效果是按Back键返回上一级Activity,也就是MainActivity。

    如果app进程已经退出,不存在了,此时就用一个Intent启动应用,该Intent中包含一个Bundle, Bundle中存有启动DetailActivity所需的参数,这个Intent传入SplashActivity后,再由SplashActivity传给MainActivity,在MainActivity中加入判断,如果有该参数,则表示应用是从通知栏启动的,要进行跳转到DetailActivity的操作,否则就是常规启动。

    代码实现
    有了大概的实现思路后,大家来个demo实际操作一下。
    首先,我们的demo有简单的组件:

    1.PushService,在新进程中启动的Service,负责监听服务器,收到服务器的信息后将消息广播出去,在本demo中,为了简化,只是简单的广播一个消息
    2.ShowNotificationReceiver,在新进程中注册的BroadcastReceiver,收到PushService发的消息后,会在通知栏弹出通知
    3.NotificationReceiver, 在新进程中注册的BroadcastReceiver,用来设置点击通知栏通知的动作,打开app中的某个Activity
    4.SplashActivity, app启动页面,先是启动图片,3s后进入MainActivity
    5.MainActivity,app的主Activity
    6.DetailActivity,app中显示详情的Activity

    PushService.java
    首先是PushService,要在新进程中启动,要在AndroidManifest.xml中加入以下注册Service的代码

    <service android:name=".PushService"
                     android:process=":push"/>

    PushService的工作很简单,启动后发一个广播在通知栏显示通知,然后常驻在后台

    public class PushService extends Service{
        @Nullable
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
            Log.i("PushService", "PushService onCreate");
            //用AlarmManager定时发送广播
            AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    
            Intent intent = new Intent(this, ShowNotificationReceiver.class);
    
            PendingIntent pendingIntent =
                    PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    
            am.set(AlarmManager.ELAPSED_REALTIME, SystemClock.currentThreadTimeMillis(), pendingIntent);
    
        }
    
    }

    ShowNotificationReceiver.java
    这个广播类用来在通知栏弹出通知

    public class ShowNotificationReceiver extends BroadcastReceiver{
        private static final String TAG = "RepeatReceiver";
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d(TAG, "ShowNotificationReceiver onReceive");
            //设置点击通知栏的动作为启动另外一个广播
            Intent broadcastIntent = new Intent(context, NotificationReceiver.class);
            PendingIntent pendingIntent = PendingIntent.
                    getBroadcast(context, 0, broadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    
            NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
            builder.setContentTitle("这就是通知的头")
                    .setTicker("这是通知的ticker")
                    .setContentIntent(pendingIntent)
                    .setSmallIcon(android.R.drawable.ic_lock_idle_charging);
    
            Log.i("repeat", "showNotification");
            NotificationManager manager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
            manager.notify(2, builder.build());
        }
    }

    NotificationReceiver.java
    点击通知栏后,会发送一个广播,NotificationReceiver收到该广播后,就会判断,app进程是否仍然存活,根据app进程的不同状态,定义不同的app启动方式

    public class NotificationReceiver extends BroadcastReceiver{
    
        @Override
        public void onReceive(Context context, Intent intent) {
            //判断app进程是否存活
            if(SystemUtils.isAppAlive(context, "com.liangzili.notificationlaunch")){
                //如果存活的话,就直接启动DetailActivity,但要考虑一种情况,就是app的进程虽然仍然在
                //但Task栈已经空了,比如用户点击Back键退出应用,但进程还没有被系统回收,如果直接启动
                //DetailActivity,再按Back键就不会返回MainActivity了。所以在启动
                //DetailActivity前,要先启动MainActivity。
                Log.i("NotificationReceiver", "the app process is alive");
                Intent mainIntent = new Intent(context, MainActivity.class);
                //将MainAtivity的launchMode设置成SingleTask, 或者在下面flag中加上Intent.FLAG_CLEAR_TOP,
                //如果Task栈中有MainActivity的实例,就会把它移到栈顶,把在它之上的Activity都清理出栈,
                //如果Task栈不存在MainActivity实例,则在栈顶创建
                mainIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    
                Intent detailIntent = new Intent(context, DetailActivity.class);
                detailIntent.putExtra("name", "电饭锅");
                detailIntent.putExtra("price", "58元");
                detailIntent.putExtra("detail", "这是一个好锅, 这是app进程存在,直接启动Activity的");
    
                Intent[] intents = {mainIntent, detailIntent};
    
                context.startActivities(intents);
            }else {
                //如果app进程已经被杀死,先重新启动app,将DetailActivity的启动参数传入Intent中,参数经过
                //SplashActivity传入MainActivity,此时app的初始化已经完成,在MainActivity中就可以根据传入             //参数跳转到DetailActivity中去了
                Log.i("NotificationReceiver", "the app process is dead");
                Intent launchIntent = context.getPackageManager().
                        getLaunchIntentForPackage("com.liangzili.notificationlaunch");
                launchIntent.setFlags(
                        Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
                Bundle args = new Bundle();
                args.putString("name", "电饭锅");
                args.putString("price", "58元");
                args.putString("detail", "这是一个好锅, 这是app进程不存在,先启动应用再启动Activity的");
                launchIntent.putExtra(Constants.EXTRA_BUNDLE, args);
                context.startActivity(launchIntent);
            }
        }
    }

    SplashActivity.java
    SplashActivity.java先是app启动的图片,3s后进入MainActivity, 如果启动SplashActivity的Intent中带有参数,就将参数取出,放入启动MainActivity的Intent中

    public class SplashActivity extends AppCompatActivity{
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_splash);
            //隐藏ActionBar
            getSupportActionBar().hide();
            //使用handler倒数3秒后进入MainActivity
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    Intent intent = new Intent(SplashActivity.this, MainActivity.class);
                    //如果启动app的Intent中带有额外的参数,表明app是从点击通知栏的动作中启动的
                    //将参数取出,传递到MainActivity中
                    if(getIntent().getBundleExtra(Constants.EXTRA_BUNDLE) != null){
                        intent.putExtra(Constants.EXTRA_BUNDLE,
                                getIntent().getBundleExtra(Constants.EXTRA_BUNDLE));
                    }
                    startActivity(intent);
                    finish();
                }
            }, 3000);
        }
    }

    MainActivity.java
    MainActivity中,如果有参数传入,就在初始化结束后,根据参数启动DetailActivity,如果没有参数传入,就此结束自己的任务

    public class MainActivity extends AppCompatActivity {
        private static final String TAG = "MainActivity";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Intent intent = new Intent(this, PushService.class);
            startService(intent);
            setTitle("MainActivity");
            Bundle bundle = getIntent().getBundleExtra(Constants.EXTRA_BUNDLE);
            if(bundle != null){
                //如果bundle存在,取出其中的参数,启动DetailActivity
                String name = bundle.getString("name");
                String price = bundle.getString("price");
                String detail = bundle.getString("detail");
                SystemUtils.startDetailActivity(this, name, price, detail);
                Log.i(TAG, "launchParam exists, redirect to DetailActivity");
            }
        }
    
        @Override
        protected void onResume() {
            super.onResume();
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
    
            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    }

    DetailActivity.java
    比较简单,显示传入的参数即可:-D

    public class DetailActivity extends AppCompatActivity{
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_detail);
            getSupportActionBar().setTitle("DetailActivity");
            String name = getIntent().getStringExtra("name");
            String price = getIntent().getStringExtra("price");
            String detail = getIntent().getStringExtra("detail");
    
            ((TextView)findViewById(R.id.name)).setText(name);
            ((TextView)findViewById(R.id.price)).setText(price);
            ((TextView)findViewById(R.id.detail)).setText(detail);
        }
    }

    android通知栏demo

    展开全文
  • Android点击通知栏 ,移除通知

    千次阅读 2020-06-05 16:52:00
    通过点击系统通知栏移除 通知只需要一个方法 Notification notification = new Notification(); notification.setAutoCancel(true);
  • android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序 在应用里使用了后台服务,并且在通知栏推送了消息,希望点击这个消息回到activity, 结果总是存在好几个同样的activity,就算要返回...
  • 之前写过一篇博文,但是实现的效果是通知来了,点击通知栏消息之后,返回当前位于栈顶的activity或者fragment界面,现在的需求是:当用户按了home键,程序进入后台之后,这时候有通知进来,需要跳转到指定的消息中心...
  • Android 点击通知栏跳转到应用程序

    千次阅读 2016-04-28 10:44:48
    开发
  • android通知栏消息点击事件如果是打开一个activity时,我们要考虑两种情况: &amp;amp;amp;gt; 应用正在前台运行。&amp;amp;amp;gt; &amp;amp;amp;gt; 应用已退出。&amp;amp;amp;gt; 如果是...
  • Android 点击通知栏中的通知启动应用

    千次阅读 2015-05-15 11:18:56
    今天再做项目中遇到一个问题: "点击通知时, 应用不能启动", 源码如下:  Context application = getApplicationContext(); Intent resultIntent = new Intent(application, MainActivity.class); resultIntent....
  • 其实不是原创,是问郭神问来的.... activity已经存在,从通知栏点进去不希望这个activity重新创建,只是希望拿到intent带过来的数据的话, 重要的是添加的那一系列flag. Intent intent = new Intent(NOTIFIER_NAME);...
  • 创建通知栏NotificationManager notificationManager(NotificationManager) this.getSystemService(android.content.Context.NOTIFICATION_SERVICE);NotificationCompat.Builder mBuilder = new Notification
  • 项目集成了极光推送,要求点击通知消息,跳转到MainActivity中的第二个Fragment --- MessageFragment,而且还需要当用户按了home键,程序进入后台之后,这时候有通知进来,需要跳转到指定的消息中心fragment界面,之前...
  • private static int App_Notification_ID_BASE = 911;  private static PendingIntent appDIndent;  private static NotificationManager appMange;  private static Notification...android:launchMode要是标准模式
  • 在应用里使用了后台服务,并且在通知栏推送了消息,希望点击这个消息回到activity... 而不能像qq之类的点击通知栏消息回到之前存在的activity,如果存在就不再新建一个activity  说的有点绕,如果是遇到此类问题的肯定能
  • android通知栏消息点击事件如果是打开一个activity时,我们要考虑两种情况: 应用正在前台运行。 应用已退出。 如果是第一种情况那么就好处理了,直接为Intent设置flag为FLAG_ACTIVITY_NEW_TASK,然后调用context...
  • Intent msgIntent = context.getPackageManager().getLaunchIntentForPackage(packageName);//获取启动ActivityPendingIntent pendingIntent = PendingIntent.getActivity( context,
  • 设置通知消息 myNoti.setLatestEventInfo(EmulatorActivity. this , emulator.getCurMrpFile().getAppName(), getString(R.string.hint_click_to_back), appIntent); // 发送出消息 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,683
精华内容 10,273
关键字:

安卓点击通知栏