2016-08-02 34 views
1

起動時にコードを実行する際に問題が発生しました。動作するはずの例のソースをダウンロードしましたが、そうではありません。この例によると、電話がオンになったときにトーストを生成する必要がありますが、それは起こらないので、私はアンドロイド6.0と7.0でテストしました。

ありがとうございました。次のように コードは次のとおりです。
マニフェスト:起動時にコードを実行する

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.androidautostartup" 
    android:versionCode="1" 
    android:versionName="1.0" > 

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

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

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <receiver 
      android:name=".BootComplete" 
      android:enabled="true" 
      android:exported="false" > 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 
     </receiver> 

     <service android:name=".AutoStartUp" > 
     </service> 

     <activity 
      android:name="com.example.androidautostartup.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> 
    </application> 

</manifest> 

BootComplete.java

public class BootComplete extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     if (intent.getAction().equalsIgnoreCase(Intent.ACTION_BOOT_COMPLETED)) { 
      Intent serviceIntent = new Intent(context, AutoStartUp.class); 
      context.startService(serviceIntent); 
     } 
    } 
} 

AutoStartUp.java

public class AutoStartUp extends Service { 

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

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); 
     // do something when the service is created 
    } 

} 

答えて

0

私は本当に労働者にUIのものをやってお勧めしませんスレッド(サービス)。それができる間、それはユーザーがアプリコンテキスト外のメッセージを受け取るための混乱を生成します。

これが必要な場合は、UIスレッドでUIコードを実行する必要があります。

Handler handler = new Handler(Looper.getMainLooper()); 

handler.post(new Runnable() { 

     @Override 
     public void run() { 
      Toast.makeText(getContext(), "Service Started", Toast.LENGTH_LONG).show(); 
     } 
    }); 
+0

申し訳ありませんが、どこに置くべきですか? onCreateメソッドの中で? – user6548194

+0

あなたは実際に受信者でそれを呼び出すことができます。または、サービスのライフサイクルコールバックのいずれかで、理想的には、起動 – jirungaray

+0

それはちょうど私はメソッドを解決できないと言ってエラーを与える匿名java.lang.runnable、java.lang.string、int – user6548194

関連する問題