2013-03-25 66 views
5

Tôi mới sử dụng chương trình Android. Tôi có một người nhận bắt đầu một dịch vụ lúc khởi động nhưng có vẻ như chưa bao giờ bắt đầu. Bạn có thể cho tôi biết tôi đang làm gì sai không? Tôi không biết cách gỡ lỗi. Bạn có thể giải thích cho tôi cách tôi có thể gỡ lỗi các dịch vụ khởi động Android không?Dịch vụ khởi động Android không bao giờ bắt đầu

Đây là mã của tôi. Cảm ơn bạn trước

Recibidor.java:

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

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

<?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

Bạn có nhận được ý định trong Recibidor của mình không? – Entreco

+0

Xin chào Entreco. Bạn có thể cho tôi biết làm cách nào để biết tôi có nhận được ý định không? – eloweyn

+0

Bạn có thể đăng nhập vào phương thứcReceiver – tundundun

Trả lời

4

Mã bạn đã đăng sẽ không bao giờ hoạt động trên các phiên bản Android sau này. Để ngăn phần mềm độc hại, với các phiên bản sau của Android, bạn không thể tự động đăng ký BroadcastReceiver trong tệp kê khai UNTIL người dùng đã khởi chạy ứng dụng của bạn theo cách thủ công từ trình khởi chạy ứng dụng.

Bạn sẽ cần phải tạo một Activity với các mục nhập CHÍNH/LAUNCHER <intent-filter>. Khi người dùng đã khởi chạy ứng dụng theo cách thủ công một lần, đăng ký tệp kê khai cho BroadcastReceiver của bạn sẽ xảy ra và đăng ký đó sẽ vẫn được đăng ký trừ khi người dùng sử dụng 'Buộc dừng` từ phần Quản lý ứng dụng trong Cài đặt.

+0

Cảm ơn Squonk !! – eloweyn

1

Ứng dụng này cần phải được cài đặt trong lưu trữ nội bộ để nhận ý định BOOT_COMPLETED. Xem câu hỏi này: My BroadcastReceiver is not receiving the BOOT_COMPLETED intent after my N1 boots. Help Please!

+0

android: installLocation = "internalOnly" có nghĩa là ứng dụng được cài đặt chỉ trong nội bộ .. để recive any u hav 2 ứng dụng một lần .. và xin vui lòng đăng nhập reciver trong khác quá –

+0

ứng dụng có thẻ android: installLocation = "internalOnly". Nó được cài đặt trong bộ lưu trữ internall – eloweyn

Các vấn đề liên quan