2014-01-13 49 views
2

我正在制作一个跟踪用户位置的应用程序,到目前为止,我已经能够成功接收其位置更改的坐标,但是如果他重新启动手机比我无法启动我的服务而无需用户再次打开应用程序。如何在Android设备重启时启动我的应用程序进程?

这是我Servicesstart.java代码

public IBinder onBind(Intent arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 
@Override 
public void onCreate() { 
    // TODO Auto-generated method stub 
    Log.i("service started", "start"); 

     userFunctions = new UserFunctions(); 
     final LocationManager locMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     if(userFunctions.isUserLoggedIn(getApplicationContext())){ 

     TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
     imei=telephonyManager.getDeviceId(); 
      Toast.makeText(getApplicationContext(), imei, 5000).show(); 


    if(Broadcast.check==false) 
    { 



     final UserFunctions userFunction = new UserFunctions(); 

     LocationListener locatioListner = new LocationListener() { 


      public void onStatusChanged(String provider, int status, Bundle extras) { 
       // TODO Auto-generated method stub 

      } 

      public void onProviderEnabled(String provider) { 
       // TODO Auto-generated method stub 

      } 

      public void onProviderDisabled(String provider) { 
       // TODO Auto-generated method stub 
       get(); 
      } 

      public void onLocationChanged(Location location) { 

       Log.i("location", "loc"); 
       String latitude=String.valueOf(location.getLatitude()); 
       String longtitude=String.valueOf(location.getLongitude()); 
       //location updated starts here 
       boolean check_update=userFunction.locationUpdater(UserFunctions.email, latitude, longtitude,imei); 

       if(check_update==true){ 

       Log.i("updated", "update"); 
         } 
       else 
       { 
       Log.i("notupdated","not"); 
       } 

       } 

     }; 

     locMan.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locatioListner); 



    } 





     } 

} 

这是我Broadcast.java代码

public class Broadcast extends BroadcastReceiver { 
public static boolean check=true; 

@Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
    // TODO Auto-generated method stub 
    if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){ 
     check=false; 
      Intent i = new Intent(context,Servicestart.class); 
      i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startService(i); 
     } 
} 
} 

这是我的manifest.xml代码

<service android:name=".Servicestart"> 
      </service> 
      <receiver android:name=".Broadcast" 
       android:enabled="true" 
       android:exported="true"> 
       <intent-filter android:priority="1000"> 
        <action android:name="android.intent.action.BOOT_COMPLETED" /> 
        </intent-filter> 
        </receiver> 
+2

如何当一个应用程序在您的手机或PC未经您明确同意启动什么感觉? –

+0

尝试放置断点或登录onReceive方法,并检查是否可以捕获事件。可能您的接收器正在工作,但您的意图存在上下文问题。 –

+1

哦,你添加了它的权限? <使用权限android:name =“android.permission.RECEIVE_BOOT_COMPLETED”/> –

回答

3

添加此权限清单中并在您的应用程序中添加此广播接收器类。 我已经加入我的服务ServiceStarter先启动,与你替换此

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

public class StartupReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent arg1) { 
     // TODO Auto-generated method stub 

     System.out.println("Reciver Started.........................................."); 

     Intent activate = new Intent(); 
     activate.setClass(context, **ServiceStarter.class**); 
//  activate.putExtra("Auto", true); 

     PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, activate, 
       Intent.FLAG_ACTIVITY_NEW_TASK); 
     AlarmManager mgr = (AlarmManager) context 
       .getSystemService(Context.ALARM_SERVICE); 
     mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 20000, pendingIntent); 
    } 

} 
相关问题