簡體   English   中英

我無法在Android中使用boot_completed服務

[英]I cannot use boot_completed service in android

我想在android中使用服務。我把代碼寫得很簡單

那是我的主要活動課;

public class MainActivity extends Activity 

{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public class MReceiver extends BroadcastReceiver 
{        

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        Intent myIntent = new Intent(context, MService.class);
         context.startService(myIntent);
    } 
}

public class MService extends Service
{

    @Override
    public IBinder onBind(Intent intent) 
    {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate()
    {
        Log.i("onCreate", "Service onCreate");
    }

}

}

那是我的xml文件;

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

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

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

        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.example.service.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>

            <service android:enabled="true" android:name=".MService" />

             <receiver android:name=".MReceiver" android:enabled="true" android:exported="false">
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED"/>
                </intent-filter>
            </receiver>

        </application>

    </manifest>

但是當我關閉后打開平板電腦時,該程序崩潰了

錯誤是;

“錯誤打開跟蹤文件”“無法實例化接收器com.example.service.MReceiver”

我必須做什么 ? 請幫我。

您可以在Activity中將Receiver類聲明為靜態類。

public static class MReceiver extends BroadcastReceiver {        

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    Intent myIntent = new Intent(context, MService.class);
     context.startService(myIntent);
} 
}

或在單獨的Java文件中編寫Receiver類...

如果您在MainActivity中編寫它,請以最類似的形式編寫

 <receiver name=".MainActivity$MReceiver" ....>

或者,如果它是一個單獨的文件,則聲明為

  <receiver name=".MReceiver" ...>

(在這里,請確保您的MReceiver類軟件包名稱和應用程序軟件包名稱相同)

在清單中,您已經聲明了<receiver>

android:exported="false"

那是錯的。 這樣做時,您會將接收器設為私有,因此,當Android框架想要在BOOT_COMPLETED廣播期間調用onReceive()時,無法實例化它。

只需從<receiver>標記中刪除android:exported="false" ,您就可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM