2013-03-25 23 views
5

Android programında yeniyim. Önyüklemede bir hizmet başlatan bir alıcım var ama hiç başlamadı. Bana neyi yanlış yaptığımı söyler misin? Bunu nasıl ayıklayacağımı bilmiyorum. Android başlangıç ​​hizmetlerinde nasıl hata ayıklayabilirim?Android önyükleme hizmeti asla başlamaz.

İşte kodum.

package com.pruebas; 

import android.app.Service; 
import android.content.Intent; 
import android.os.IBinder; 
import android.util.Log; 
import android.widget.Toast; 

public class Servicio extends Service { 
    private final String TAG = "Servicio"; 


    @Override 
    public IBinder onBind(Intent arg0) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Log.i(TAG, "ON CREATE"); 
     Toast.makeText(this, "ON CREATE", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     Log.i(TAG, "ON DESTROY"); 
     Toast.makeText(this, "ON DESTROY", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     startForeground(0, null); 
     Log.i(TAG, "ON START COMMAND"); 
     Toast.makeText(this, "ON START COMMAND", Toast.LENGTH_LONG).show(); 
     return START_STICKY; 
    } 
} 

AndroidManifest.xml uygulama dahili depolama yüklü olması gerekiyor

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.pruebas" 
    android:versionCode="1" 
    android:versionName="1.0" 
    android:installLocation="internalOnly" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    <application> 
     <service android:name=".Servicio"> 
      <intent-filter> 
       <action android:name="com.pruebas.Servicio"/> 
      </intent-filter> 
     </service> 

     <receiver android:name=".Recibidor" android:enabled="true" android:exported="true" 
android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED"/> 
       <category android:name="android.intent.category.DEFAULT"/> 
      </intent-filter> 
     </receiver> 

    </application> 

</manifest> 
+0

Recibidorunuzdaki amacı alıyor musunuz? – Entreco

+0

Merhaba Entreco. Bana niyetimi kabul edip etmediğimi nasıl anlayabilirim? – eloweyn

+0

Oturum açmayı onLineiver yöntemine ekleyebilirsiniz – tundundun

cevap

4

Android'in sonraki sürümlerinde çalışır asla gönderdiniz kodu. Kötü amaçlı yazılımları önlemek için, daha sonraki Android sürümlerinde, UNTIL manifestosunda otomatik olarak bir kayıt olmak mümkün değildir. Kullanıcı, uygulamanızı uygulama başlatıcısından manuel olarak başlattı.

MAIN/LAUNCHER <intent-filter> girişleriyle bir Activity oluşturmanız gerekir. Kullanıcı uygulamayı bir kez manuel olarak başlattıktan sonra, BroadcastReceiver için bildirim kaydı gerçekleşir ve kullanıcı Ayarlar'ın Uygulamaları Yönet bölümünden 'Kuvvet Durdur' kullanmadığı sürece kayıtlı kalır.

+0

Teşekkür ederim Squonk !! – eloweyn

1

almak üzere

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 
import android.widget.Toast; 

public class Recibidor extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context, "Iniciando Recibidor", Toast.LENGTH_LONG).show(); 
     final String TAG = "Recibidor"; 
     Log.i(TAG, "Iniciando Recibidor"); 

     if (intent.getAction().equalsIgnoreCase("android.intent.action.BOOT_COMPLETED")) { 
     Toast.makeText(context, "Iniciando Intent", Toast.LENGTH_LONG).show(); 
     Log.i(TAG, "Iniciando Intent"); 

     Intent servicio = new Intent(); 
     servicio.setAction("com.pruebas.Servicio"); 
     context.startService(servicio); 

     Log.i(TAG, "Iniciando Servicio"); 
     Toast.makeText(context, "Iniciando Servicio", Toast.LENGTH_LONG).show(); 
     } 

    } 
} 

Servicio.java: önceden

Recibidor.java teşekkürler BOOT_COMPLETED amacı. Bu soruya bakın: My BroadcastReceiver is not receiving the BOOT_COMPLETED intent after my N1 boots. Help Please!

+0

android aldığını düşünüyorum: installLocation = "internalOnly" app sadece dahili olarak yüklenir anlamına gelir .. Bir kez uygulama .. ve lütfen uygulamayı başka bir kullanıcı olarak da –

+0

numaralı telefona kaydedin, uygulamanın android etiketi var: installLocation = "internalOnly". Dahili depolama alanı – eloweyn