`

Service

阅读更多
public class MainActivity extends Activity implements OnClickListener {
/** Called when the activity is first created. */ 
    private Button startService,redirectButton;
   
    public static MainActivity mainActivity;
    @Override 
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        startService=(Button)findViewById(R.id.startButton); 
        redirectButton=(Button)findViewById(R.id.redirectId);
      Log.e("Main", "onCreate======================>") ;
      startService(new Intent("com.test.android.SERVICE"));
     
    }
   
   
    public void onAttachedToWindow () {
        System.out.println("Page01 -->onAttachedToWindow");
        this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
        super.onAttachedToWindow();
    }

   
   
   
   
   
   
    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
   
    switch(v.getId())
    {
    case R.id.redirectId:
    break;
    }
    }
   
   
   
 

    @Override
    protected void onStart()
    {
   
   
    super.onStart();
    mainActivity=this;
    Log.e("Main", "onStart======================>") ;
    }
   

    @Override
    protected void onStop() {
    // TODO Auto-generated method stub
    super.onStop();
    Log.e("Main", "onStop======================>") ;
    }
   
   
    @Override
    protected void onResume() {
    // TODO Auto-generated method stub

   
    super.onResume();
    Log.e("Main", "onResume======================>") ;
    if(!SipService.isOnForeground)
    this.onStop();
    }
   
   
 
 
}








======

public class SecondActivity extends Activity implements OnClickListener{

private Button closeButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.second); 
closeButton=(Button)findViewById(R.id.closeId);
closeButton.setOnClickListener(this);
}


@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.closeId:
finish();
if(!SipService.isOnForeground)
{
Log.e("SecondActivity", "begin to close Main");

Log.e("mainActivity", "mainActivity="+MainActivity.mainActivity.isFinishing());
MainActivity.mainActivity.onStop();
}

break;
    default:break;
}

}


}




==================
public class SipService extends Service{

private ActivityManager activityManager;
    private String packageName;
   
    //应用是否运行在前端
    public static boolean isOnForeground=true;
   
   private static Handler handler;
  
  
   
   
    //休眠唤醒锁
    private static PowerManager.WakeLock mWakeLock = null;
   
   
    //唤醒加锁
    public static void acquireWakeLock(Context context)
    {
        if (mWakeLock ==  null)
        {
            Log.i("", "Acquiring wake lock");          
            PowerManager powerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
            mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP,
                    context.getClass().getCanonicalName());
            mWakeLock.acquire();
        }      
    }
   

@Override
    public void onCreate()
    {
        super.onCreate();
        Log.e("SipService", "------------->service---onCreate!!!");
       
        //acquireWakeLock(this.getApplicationContext());
        acceptHandler();
       
        Timer timer=new Timer();
        timer.schedule(task,5000,60000);
       
//         audioManager = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);
//         audioManager.setMode(AudioManager.MODE_IN_CALL);
//         Log.e("SipService", "onCreate ----------> AudioManager.setMode(AudioManager.MODE_IN_CALL)");
//         SystemUtil.setMicrophoneMute(false);
//         SystemUtil.getSpeakerphoneVolume();
    }



TimerTask task=new TimerTask() {

@Override
public void run() {
// TODO Auto-generated method stub
Message message=new Message();
message.what=1;
SipService.handler.sendMessage(message);
}
};



    @Override
    public void onDestroy()
    {
        super.onDestroy();
        Log.e("sipService", "------------->service---onDestroy!!!");
        //releaseWakeLock();
//         audioManager.setMode(AudioManager.MODE_NORMAL);
//         Log.e("SipService", "onStop ----------> AudioManager.setMode(AudioManager.MODE_NORMAL)");
    }

    @Override
    public void onStart(Intent intent, int startId)
    {
        super.onStart(intent, startId);
    }
   
      
   
   
    //释放唤醒锁
    public static void releaseWakeLock()
    {
        if (mWakeLock != null && mWakeLock.isHeld())
        {
            Log.i("", "release wake lock");
            mWakeLock.release();
            mWakeLock = null;          
        }
    }
   
   

   
    //判断 应用是否运行在前端
    private boolean isAppOnForeground() {  
        // Returns a list of application processes that are running on the device  
        List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();  
        if (appProcesses == null) return false;  
        for (RunningAppProcessInfo appProcess : appProcesses) {  
            if (appProcess.processName.equals(packageName)  
                    && appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {  
                return true;  
            }  
        }  
        return false;  
    }


@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
   
private void acceptHandler(){
  Handler accHandler= new Handler()
    {
        @Override
        public void handleMessage(Message msg)
        {
            super.handleMessage(msg);
            switch (msg.what)
            {
            
                case 1:
                {
                activityManager = (ActivityManager)SipService.this.getSystemService(Context.ACTIVITY_SERVICE);  
                packageName =SipService.this.getPackageName();
                   
                //应用是否运行在前端
                    isOnForeground=isAppOnForeground();
                        Log.e("SipService", "isOnForeground="+isOnForeground);
                       
                        //如果在前台运行
                        if(!isOnForeground)
                        {
                        Bundle bundle = new Bundle();
                        Intent intent = new Intent();
                        intent.putExtras(bundle);
                        //intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        intent.addCategory(Intent.CATEGORY_LAUNCHER);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 
                        intent.setClass(getApplicationContext(),SecondActivity.class);
                        startActivity(intent);
                    }
                    break;
                }
            }
        }
    };
   
    SipService.handler=accHandler;
}
   

   
   
}



============
public class SipServiceManager extends BroadcastReceiver{

@Override
public void onReceive(Context arg0, Intent arg1) {
Log.e("","-------BroadcastReceiver--> " + arg1.getAction());

//开机
  if(arg1.getAction().toString().equals(Intent.ACTION_BOOT_COMPLETED)){
  arg0.startService(new Intent("cn.zte.sip.SERVICE"));
  }
//关机 
  else if(arg1.getAction().toString().equals(Intent.ACTION_SHUTDOWN)){
  arg0.stopService(new Intent("cn.zte.sip.SERVICE"));
  }
}
}



============
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    >  
    <Button  
        android:text="启动Service" 
        android:id="@+id/startButton" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
    />  
       
   
      <Button  
        android:text="转向按钮" 
        android:id="@+id/redirectId" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
      />
     
        
</LinearLayout> 


==================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    >  
   
   
      <Button  
        android:text="转向Main界面" 
        android:id="@+id/redirectId2" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
      />
     
     
      <Button  
        android:text="关闭本界面" 
        android:id="@+id/closeId" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
      />
        
</LinearLayout> 

======

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.test.android"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
       
        <service android:name="com.test.android.SipService"> 
        <intent-filter>
            <action android:name="com.test.android.SERVICE" />       
        </intent-filter>
    </service>
    
    <receiver android:name="com.test.android.SipServiceManager" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.ACTION_SHUTDOWN" />
        </intent-filter>
    </receiver>
   
        <activity android:name=".MainActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
         <activity android:name=".SecondActivity" android:screenOrientation="landscape" />

    </application>


</manifest>
分享到:
评论

相关推荐

    不被杀死 service

    在安卓开发中,Service是一种用于在后台长时间运行的组件,它可以独立于用户界面执行任务,例如播放音乐、网络通信等。"不被杀死的 Service"指的是通过特定技术手段实现的Service,它能够在设备清理内存或者用户关闭...

    android service 简单实例源代码

    在Android开发中,Service是四大组件之一,它在后台运行,不与用户界面直接交互,常用于执行长时间的任务,如播放音乐、网络通信等。本篇文章将深入解析"android service 简单实例源代码",帮助你理解如何在Android...

    Service 启动与停止

    Service是Android系统中的一个重要组件,它负责在后台执行长时间运行的操作,不依赖于用户界面。在Android应用开发中,理解Service的启动与停止机制对于创建高效、稳定的后台服务至关重要。 一、Service概述 ...

    Activity绑定Service(Kotlin)

    在Android应用开发中,Service是用于执行长时间运行操作的一个组件,而Activity是用户与应用交互的界面。将Activity与Service绑定是一种常见的通信方式,尤其在需要在后台运行任务且需要与用户界面保持交互时。本...

    oracle service_name参数

    ### Oracle Service_Name 参数详解 #### 一、概述 在Oracle数据库管理中,`service_name`是一个重要的参数,它用于标识数据库实例所提供的服务名称。通过设置正确的`service_name`,可以确保客户端应用程序能够...

    通过Service播放音频的代码

    在Android开发中,Service是一种可以在后台长时间运行的组件,它不具有用户界面,但可以执行各种后台任务,如播放音乐。本示例的"通过Service播放音频的代码"旨在教你如何利用Service组件来实现音乐播放功能,使得...

    Java Service Wrapper使用总结

    Java Service Wrapper 使用总结 Java Service Wrapper 是一种可以将 Java 应用程序发布为可安装的服务的解决方案,它提供了一种简单的方式来将 Java 应用程序打包成一个独立的服务。下面是 Java Service Wrapper ...

    android 录音机 service 例子

    在这个"android 录音机 service 例子"中,我们将深入探讨如何结合Service和MediaRecorder来创建一个能够后台录制音频的应用。 1. **Service基础** Service组件是Android应用开发中的关键部分,它可以在没有用户...

    Service向Activity传值(kotlin)

    在Android应用开发中,Service和Activity是两个非常重要的组件。Service用于在后台执行长时间运行的任务,而Activity则负责用户界面交互。在某些场景下,我们可能需要Service与Activity之间进行数据传递,例如本例中...

    Android防止service多次执行startCommand

    在Android应用开发中,Service是四大组件之一,用于在后台长时间运行操作,比如播放音乐、网络通信等。然而,如果不加以控制,用户或者系统可能会多次启动同一个Service,导致不必要的资源消耗和服务的异常行为。本...

    ServiceNow 基础手册

    ServiceNow是当今流行的企业服务管理平台,它提供了一个集成的系统,允许用户在一个统一的界面中管理和自动化企业内部的各种工作流程。ServiceNow平台的基础手册涵盖了该平台的基本使用方法,包括如何导航、管理记录...

    Android-Service与Activity传值

    在Android应用开发中,`Service`和`Activity`是两个重要的组件。`Service`用于在后台执行长时间运行的任务,而`Activity`则负责用户界面交互。在某些场景下,我们可能需要在`Service`和`Activity`之间传递数据,比如...

    android多个activity和一个service通信

    在Android应用开发中,Activity和Service是两个关键组件。Activity代表用户界面,而Service则用于在后台执行长时间运行的任务,不直接与用户交互。在实际项目中,常常需要多个Activity与一个Service进行通信,比如本...

    【Android】开机自启动Service

    在Android系统中,Service是一种可以在后台长时间运行的组件,它不提供用户界面,但可以执行各种任务,如播放音乐、网络通信等。当设备启动时,我们有时希望某些Service能够自动启动,以便立即开始执行预定的任务,...

    用SQL语句解决Service Broker未启动的问题

    "解决 Service Broker 未启动的问题" Service Broker 是 SQL Server 中的一个组件,用于实现异步消息传递。它允许数据库管理员创建可靠的、可扩展的消息应用程序。但是,有时可能会遇到 Service Broker 未启动的...

    Android 多个service的action 相同冲突 验证demo

    在Android开发中,Service是应用程序组件之一,用于在后台执行长时间运行的操作,即使用户与应用程序交互界面不直接关联。在某些情况下,我们可能需要启动多个Service来执行不同的任务,但问题在于,如果这些Service...

    JavaService-2.0.10 32位,64位

    JavaService-2.0.10 是一个针对Java应用程序的服务包装工具,它允许开发者将Java应用程序作为Windows服务来运行。这个版本提供了32位和64位两种版本,以适应不同操作系统环境的需求。 在Windows系统中,服务是一种...

    Android之Service实现比较大小

    在Android开发中,Service是应用程序组件之一,用于在后台执行长时间运行的操作,即使用户与应用程序交互的界面已关闭。本篇文章将深入探讨Android中的Service,分析不同类型的Service及其特性,并对比它们之间的...

    Android系统在新进程中启动自定义服务过程(startService)的原理

    "Android系统在新进程中启动自定义服务过程(startService)的原理" 在 Android 系统中,startService 函数是一个非常重要的函数,它允许开发者在新进程中启动自定义服务。这项技术可以将一些计算型逻辑从主进程中...

    基于Service的简易音乐播放器

    在Android开发中,创建一个基于Service的简易音乐播放器是一个常见的练习,可以帮助开发者理解服务(Service)的概念以及如何处理多媒体播放。在这个项目中,我们关注的是Android 4.1.2版本,它提供了对基本多媒体...

Global site tag (gtag.js) - Google Analytics