1

正直なところ、彼らは何もしていません。まず、Android が 3.1 でレシーバー、特にブート コントロールを作り直したことを知っていると言うことから始めましょう。アプリケーションが以前にユーザーによって起動されていない限り、 ACTION_BOOT_COMPLETED を使用できないように彼らが作ったことを私は知っています。ただし、人々は現在のアプリケーションでそれらを使用することに成功していますが、BOOT_COMPLETED または SHUTDOWN のためにレシーバーをヒットすることはありません。

クイック編集 - 修正された Shutdown Receiver については、この投稿の下部を参照してください。動作するようになりましたが、BOOT_COMPLETED を動作させるための努力に行き詰まっています。

私のマニフェスト:

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

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

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

...

    <!-- RECEIVERS -->
    <receiver android:name=".BootReceiver"
        android:enabled="true" >
        <intent-filter>
           <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
    <receiver android:name=".ShutdownReceiver" >
       <intent-filter>
           <action android:name="android.intent.action.SHUTDOWN" />
       </intent-filter>
    </receiver>

これで、実装されたレシーバー クラスはかなり単純になりました。

BOOT_COMPLETED レシーバー (動作していないもの)

public class BootReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context c, Intent i) {
        Intent starterIntent = new Intent(c, LaunchActivity.class);

        // Start the activity (by utilizing the passed context)
        starterIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        c.getApplicationContext().startService(starterIntent);  
    }
}

起動アクティビティを変更して含めるなど、解決策として見たものに基づいてさまざまなことを試しました

/* May need this, as of 3.1 we can't call BOOT_COMPLETED until the app has been run successfully */
Intent intent = new Intent("com.smashingboxes.speedblock.intent");
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
this.sendBroadcast(intent);

または、マニフェストのブート レシーバー インテント フィルターにこれを含めます

<action android:name="android.intent.action.QUICKBOOT_POWERON" />

何も機能していないようです。ログがレシーバー メソッドに挿入されると、ヒットすることはありません。どうやら人々はまだこれら 2 つのレシーバーをかなり定期的に使用しているようです。登録などで何かを逃したことがありますか?

- 編集 -

シャットダウンレシーバーの問題を解決しました。まず、タグの ACTION_ 部分を愚かにも忘れていました。次に、HTC には個別のシャットダウン方法があります。私の場合、Receiver リクエストにインテント フィルターを追加する必要がありました。

 <receiver android:name=".ShutdownReceiver" >
     <intent-filter>
         <action android:name="android.intent.action.ACTION_SHUTDOWN" />
         <action android:name="android.intent.action.QUICKBOOT_POWEROFF" />
     </intent-filter>
 </receiver>

シャットダウンレシーバーが機能するようになりましたが、ブート完了レシーバーではまだ運がありません。

4

1 に答える 1