精华内容
下载资源
问答
  • Android-Bootstrap 安卓前台构建框架,提供bootstrap样式的android控件
  • 安卓前台渲染

    2013-08-14 22:28:50
    安卓前台开发界面的修饰以及布局的协调有利于开发人员使用
  • Android前台渲染

    2014-06-05 15:56:01
    关于Android游戏开发的前台渲染的基础
  • 代码是关于安卓前台服务Service启动停止绑定解绑操作的示例,有代码解释。
  • 安卓 前台服务 通知

    2021-06-16 14:08:11
    前台服务 通知遇到的问题 大家好,我这复习Service时候,看到了 前台服务,于是写了一下,首先新建一个 服务: public class QianService extends Service { @Nullable @Override public IBinder onBind(Intent...

    前台服务 通知遇到的问题

    大家好,我这复习Service时候,看到了 前台服务,于是写了一下,首先新建一个 服务:

    public class QianService extends Service {
    
    
        @Nullable
        @Override
        public IBinder onBind(Intent intent) {
            Log.d("info","前台服务  onBind");
            return null;
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
            Log.d("info","前台服务  onCreate");
    
            // 初始化
            NotificationManager messageNotificatioManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    
    //
            NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
            builder.setSmallIcon(R.mipmap.ic_launcher);
            builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
            builder.setContentTitle("服务标题");
            builder.setContentText("哈哈哈哈 测试服务");
            builder.setWhen(System.currentTimeMillis());
            builder.setChannelId("5996773");
    
            Intent notificationIntent = new Intent(this, MainActivity2.class);
            PendingIntent pt = PendingIntent.getActivity(this, 0, notificationIntent, 0);
            builder.setContentIntent(pt);
            Notification notification = builder.build();
    
            startForeground(1, notification);
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            Log.d("info","前台服务  onStartCommand");
            return super.onStartCommand(intent, flags, startId);
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            Log.d("info","前台服务  onDestroy");
        }
    
    }
    

    第二步 ,在AndroidMainfest.xml注册:

    <!--        前台服务-->
            <service android:name=".service.QianService"
                android:enabled="true"
                android:exported="true"></service>
    

    第三步 ,然后运行,开启 服务:

    //前台服务 通知栏提示
        Intent intent = new Intent(this,QianService.class);
        startService(intent);
    

    就这样,然后我发现,打开服务后,闪退了,额 思考一下, 哦 我似乎没有开启权限;
    如下是我的 开启通知权限方法:

    public class UtilsNew {
    
        //监测通知权限
        public static boolean isPermissionOpen(Context context) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                return NotificationManagerCompat.from(context).getImportance() != NotificationManager.IMPORTANCE_NONE;
            }
            return NotificationManagerCompat.from(context).areNotificationsEnabled();
        }
    
        public static void openPermissionSetting(Context context) {
            try {
                Intent localIntent = new Intent();
                localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                //直接跳转到应用通知设置的代码:
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    localIntent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
                    localIntent.putExtra(Settings.EXTRA_APP_PACKAGE, context.getPackageName());
                    context.startActivity(localIntent);
                    return;
                }
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    localIntent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
                    localIntent.putExtra("app_package", context.getPackageName());
                    localIntent.putExtra("app_uid", context.getApplicationInfo().uid);
                    context.startActivity(localIntent);
                    return;
                }
                if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
                    localIntent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                    localIntent.addCategory(Intent.CATEGORY_DEFAULT);
                    localIntent.setData(Uri.parse("package:" + context.getPackageName()));
                    context.startActivity(localIntent);
                    return;
                }
    
                //4.4以下没有从app跳转到应用通知设置页面的Action,可考虑跳转到应用详情页面,
    
                if (Build.VERSION.SDK_INT >= 9) {
                    localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
                    localIntent.setData(Uri.fromParts("package", context.getPackageName(), null));
                    context.startActivity(localIntent);
                    return;
                }
    
                localIntent.setAction(Intent.ACTION_VIEW);
                localIntent.setClassName("com.android.settings", "com.android.setting.InstalledAppDetails");
                localIntent.putExtra("com.android.settings.ApplicationPkgName", context.getPackageName());
    
    
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println(" cxx   pushPermission 有问题");
            }
        }
    
    }
    

    然后呢,我再试测试,发现 哦 不行啊,提示错误:

    Permission Denial: startForeground from pid=27589, uid=10168 requires android.permission.FOREGROUND_。。。。
    

    于是乎 搜了一下,哦 ,需要在 AndroidManifest.xml添加权限:

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

    测试之后 发现,额 为何还是 闪退,哈哈哈哈 好吧, 最后一次了:
    如下 添加一个 channel即可:

       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel("5996773", "安卓10a", NotificationManager.IMPORTANCE_DEFAULT);
            channel.enableLights(true);//是否在桌面icon右上角展示小红点
            channel.setLightColor(Color.GREEN);//小红点颜色
            channel.setShowBadge(false); //是否在久按桌面图标时显示此渠道的通知
            messageNotificatioManager.createNotificationChannel(channel);
        }
    

    下面我再 贴上 服务类的完整代码吧:

    package com.example.androidstudy.service;
    
    import android.app.Notification;
    import android.app.NotificationChannel;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.app.Service;
    import android.content.Context;
    import android.content.Intent;
    import android.graphics.BitmapFactory;
    import android.graphics.Color;
    import android.os.Build;
    import android.os.IBinder;
    import android.util.Log;
    
    import com.example.androidstudy.R;
    
    import androidx.annotation.Nullable;
    import androidx.core.app.NotificationCompat;
    
    public class QianService extends Service {
    
    
        @Nullable
        @Override
        public IBinder onBind(Intent intent) {
            Log.d("info","前台服务  onBind");
            return null;
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
            Log.d("info","前台服务  onCreate");
    
            // 初始化
            NotificationManager messageNotificatioManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                NotificationChannel channel = new NotificationChannel("5996773", "安卓10a", NotificationManager.IMPORTANCE_DEFAULT);
                channel.enableLights(true);//是否在桌面icon右上角展示小红点
                channel.setLightColor(Color.GREEN);//小红点颜色
                channel.setShowBadge(false); //是否在久按桌面图标时显示此渠道的通知
                messageNotificatioManager.createNotificationChannel(channel);
            }
    
    //
            NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
            builder.setSmallIcon(R.mipmap.ic_launcher);
            builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
            builder.setContentTitle("服务标题");
            builder.setContentText("哈哈哈哈 测试服务");
            builder.setWhen(System.currentTimeMillis());
            builder.setChannelId("5996773");
    
            Intent notificationIntent = new Intent(this, MainActivity2.class);
            PendingIntent pt = PendingIntent.getActivity(this, 0, notificationIntent, 0);
            builder.setContentIntent(pt);
            Notification notification = builder.build();
    
            startForeground(1, notification);
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            Log.d("info","前台服务  onStartCommand");
            return super.onStartCommand(intent, flags, startId);
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            Log.d("info","前台服务  onDestroy");
        }
    
    }
    

    希望能给大家带来 作用,因为这个小问题吧, 困扰了我好一会儿,

    展开全文
  • android前台服务

    2019-02-18 09:11:12
    公司的业务中有一个长时间后台定位并且上传定位的功能,在android 6.0之后用双进程保活的这些黑科技是行不通了,只有用谷歌官方的方法,用前台服务来实现,类似于QQ音乐这种。 首先要来验证一下这个方案能不能长时间...

    公司的业务中有一个长时间后台定位并且上传定位的功能,在android 6.0之后用双进程保活的这些黑科技是行不通了,只有用谷歌官方的方法,用前台服务来实现,类似于QQ音乐这种。
    首先要来验证一下这个方案能不能长时间使应用在后台保活,下来用两台手机,方别打开前台服务和一些其他app,全部退到后台,放置周末两天后,再来查看结果。
    首先,在锁屏界面,前台的图标都还存在,下面看看app是否还活着。
    华为:android版本 6.0
    谷歌pixel:android版本7.1.1

    app 华为 谷歌pixel
    我们的前台服务
    手机淘宝 -

    前面验证来了进程还活着,在我们前台服务里,我做了一个间隔记录时间到本地文件的功能,来模仿后台定位的功能,下面看看我们期望的功能是不是正常在运行。
    华为:

    2019-02-15 14:21:08
    2019-02-15 14:21:33
    2019-02-15 14:21:45
    // ..........省略2万多条.........
    2019-02-18 08:52:22
    2019-02-18 08:52:32
    2019-02-18 08:52:41
    

    谷歌pixel:

    2019-02-15 14:30:42
    2019-02-15 14:30:52
    2019-02-15 14:31:02
    // ..........省略2万多条.........
    2019-02-18 09:02:13
    2019-02-18 09:02:23
    2019-02-18 09:02:33
    

    通过我们的输出文件可以看出,前台服务在后台时,一直不间断的运行,说明可以实现我们长时间连续后台定位的功能。

    展开全文
  • Android 前台服务

    2019-04-28 11:09:14
    普通的Service容易被系统回收,而前台服务系统优先级更高,不易被回收。下面介绍下前台服务的几种实现方法。 1. 提高Service的优先级: ... android:priority="1000" 2.把service写成系统服务,将不会被回收: ...

    普通的Service容易被系统回收,而前台服务系统优先级更高,不易被回收。下面介绍下前台服务的几种实现方法。


    1. 提高Service的优先级:
    <!-- 为防止Service被系统回收,可以尝试通过提高服务的优先级解决,1000是最高优先级,数字越小,优先级越低 -->

      android:priority="1000"


    2.把service写成系统服务,将不会被回收:
    在Manifest.xml文件中设置persistent属性为true,则可使该服务免受out-of-memory killer的影响。但是这种做法一定要谨慎,系统服务太多将严重影响系统的整体运行效率。


    3.将服务改成前台服务foreground service:
    重写onStartCommand方法,使用StartForeground(int,Notification)方法来启动service。  
    注:一般前台服务会在状态栏显示一个通知,最典型的应用就是音乐播放器,只要在播放状态下,就算休眠也不会被杀,如果不想显示通知,只要把参数里的int设为0即可。
    同时,对于通过startForeground启动的service,onDestory方法中需要通过stopForeground(true)来取消前台运行状态。
    这个方案也是本文目前准备详细介绍的。


    4.利用Android的系统广播
    利用ANDROID的系统广播检查Service的运行状态,如果被杀掉,就再起来,系统广播是Intent.ACTION_TIME_TICK,这个广播每分钟发送一次,我们可以每分钟检查一次Service的运行状态,如果已经被结束了,就重新启动Service。

    这里介绍下第3种方法

    在Service的onStartCommand中添加如下代码:

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {  
        Log.d(TAG, "onStartCommand()");  
        // 在API11之后构建Notification的方式  
        Notification.Builder builder = new Notification.Builder(this.getApplicationContext()); //获取一个Notification构造器
    
      Intent nfIntent = new Intent(this, MainActivity.class);
      builder.setContentIntent(PendingIntent.getActivity(this, 0, nfIntent, 0)) // 设置PendingIntent
    
        .setLargeIcon(BitmapFactory.decodeResource(this.getResources(),R.mipmap.ic_large)) // 设置下拉列表中的图标(大图标)
        .setContentTitle("下拉列表中的Title") // 设置下拉列表里的标题
        .setSmallIcon(R.mipmap.ic_launcher) // 设置状态栏内的小图标
    
        .setContentText("要显示的内容") // 设置上下文内容
        .setWhen(System.currentTimeMillis()); // 设置该通知发生的时间
        Notification notification = builder.build(); // 获取构建好的Notification 
       notification.defaults = Notification.DEFAULT_SOUND; //设置为默认的声音
    }



    在完成Notification通知消息的构建后,在Service的onStartCommand中可以使用startForeground方法来让Android服务运行在前台。

    // 参数一:唯一的通知标识;参数二:通知消息。startForeground(0, notification);// 开始前台服务

    如果需要停止前台服务,可以使用stopForeground来停止正在运行的前台服务。
     

    @Overridepublic void onDestroy() {
      Log.d(TAG, "onDestroy()");
      stopForeground(true);// 停止前台服务--参数:表示是否移除之前的通知
      super.onDestroy();
    }


     

    展开全文
  • Android前台Service

    2016-10-28 11:48:10
    前台Service标签(空格分隔): Service androidService默认是运行在后台的,在内存比较紧缺的时候,容易被回收。所以可以将Service设置为前台Service。下面是具体实现。public class WeatherService extends ...

    前台Service

    标签(空格分隔): Service android


    Service默认是运行在后台的,在内存比较紧缺的时候,容易被回收。所以可以将Service设置为前台Service。下面是具体实现。

    public class WeatherService extends Service {
        @Override
        public void onCreate() {
            super.onCreate();
            showNotification();
        }
    
    
        @Nullable
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    
    
        private void showNotification() {
            NotificationCompat.Builder mBuilder =
                    (NotificationCompat.Builder) new NotificationCompat.Builder(this)
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentTitle("不要直接用字符串")
                    .setContentText("这里作为演示而已");
            // 创建通知被点击时触发的Intent
            Intent resultIntent = new Intent(this, MainActivity.class);
    
            // 创建任务栈Builder
            TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
            stackBuilder.addParentStack(MainActivity.class);
            stackBuilder.addNextIntent(resultIntent);
            PendingIntent resultPendingIntent =
                    stackBuilder.getPendingIntent(
                            0, PendingIntent.FLAG_UPDATE_CURRENT);
            mBuilder.setContentIntent(resultPendingIntent);
    
            NotificationManager mNotifyMgr =
                    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            // 构建通知
            final Notification notification = mBuilder.build();
            // 显示通知
            mNotifyMgr.notify(123, notification);
            // 启动为前台服务
            startForeground(123, notification);
        }
    }
    展开全文
  • 现状由于各种App后台常驻,互相唤醒的泛滥,google越来越严格的限制了App在后台长时间活动。在高版本android中,几乎没有任何手段可以100%保证app后台...前台保活目前各大厂商android版本已经更新到android8.0也就是a...
  • 代码在我的服务的Oncreate里面 Intent intent = new Intent(this,MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,0); Notification notification = new ...
  • 前台服务的优先级是比较高的,android系统极少会主动杀死前台服务。类似音乐播放器后台播放功能,就是需要启动一个前台服务。下面的代码显示了如何启动一个前台服务。 String songName; // assign the song ...
  • Android 前台Service实现

    2014-10-28 15:06:35
    写个Service的小分支,前台Service的实现
  • //MainActivity.java package ... import androidx.appcompat.app.AppCompatActivity; import android.content.ComponentName; import android.content.Intent; import android.content.Serv...
  • Android前台调用安装

    2016-12-13 00:01:10
    /** * 安装APK文件 */ private void installApk (String filePath) { File apkfile = new File(filePath); if ..."application/vnd.android.package-archive" ); startActivity(i); }
  • 作者 / Keith Smyth本文为 Android 电量管理系列连载的第四篇,希望可以为各位开发者提供设备续航方面的战略洞见和实践指南。Android 进程管理机制作...
  • Unity Android 前台后台切换判断

    千次阅读 2018-08-10 16:13:37
    Unity 有自带的有一个回调函数叫OnApplicationPause使用该函数即可! private void OnApplicationPause(bool focus) ... if (focus) //进入程序状态更改为前台 { } else { //离开程序进入到后台状态 } ...
  • 什么是前台服务前台服务是那些被认为用户知道(用户认可所认可)且在系统内存不足的时候不允许系统杀死的服务。前台服务必须给状态栏提供一个通知,它被放到正在运行(Ongoing)标题之下——这就意味着通知只有在这个...
  • 使用adb命令查看,如下: adb shell am monitor 输入“q”,再按回车,退出
  • 比较坑,兼容新的系统Android9 Android10 。startForeground(NOTIFICATION_ID, notification)需要在AndroidManifest.xml中加入以下普通权限,不然在9.0系统中通知没法显示或者直接报错。webview找不网页解决方法:在...
  • 安卓用真机测试 用Eclipse+Tomcat 搭建后台 记录一下前后台连接要注意的问题   出现过的错误:   java.net.ConnectException: Failed to connect to /192.168.0.201:8081   java.net.SocketTimeoutException: ...
  • 本资源纯代码,实现新闻的数据列表展示,新闻数据全来源于后台。重点在怎么发请求,并解析。
  • 有两个页面,一个需要定位,一个页面根据前一个页面定位的信息刷新出要展示的信息,安卓前台怎么给后台传递参数???该怎么做
  • 安卓前台服务和后台服务的区别

    千次阅读 2014-04-17 09:37:57
    前台服务 会在通知一栏显示 ONGOING 的 Notification, 当服务被终止的时候,通知一栏的 Notification 也会消失,这样对于用户有一定的通知作用。常见的如音乐播放服务。 后台服务 ...
  • Android 前台Service保证APP不被杀死

    千次阅读 2016-03-21 11:15:46
    * 否则调用反射取得的 sdk level 5(对应Android 2.0)以下才有的旧方法setForeground设置前台运行 */ if (VERSION. SDK_INT >= 5) { startForeground(id, notification); } else { // Fall back on the old ...
  • 有一个数组,想把里面的数据定时在前台一个文本框显示,每次显示一个。代码要怎么弄啊??新手刚开始学安卓开发。求大神不要嫌弃。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 57,050
精华内容 22,820
关键字:

安卓前台