1

これは私の Androidmanifest.xml

      <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.abc.testapp"
  android:versionCode="1"
    android:versionName="Pm61" >
 <uses-sdk android:minSdkVersion="15"/>
  <uses-permission android:name="android.permission.BLUETOOTH"/>
  <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
  <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
  <supports-screens android:anyDensity="true" />

   <application android:label="@string/app_name" android:debuggable="true"   android:largeHeap="true">

       <activity android:name="com.abc.testapp.MainClass" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent" android:hardwareAccelerated="true">
          <intent-filter>
           <action android:name="android.intent.action.MAIN"/>
           <category android:name="android.intent.category.LAUNCHER"/>
           </intent-filter>
           </activity>

             .
             .
             .
             .
             .
             .
            <activity android:name="com.abc.testapp.BootLoad"
             android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >
          </activity>

          <activity android:name="com.abc.testapp.Rxmain"  android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" android:launchMode="singleTask">
         </activity> 

         <receiver  android:name="com.abc.testapp.MyReceiver" android:enabled="true">
          <intent-filter android:priority="500">
                <action android:name= "android.intent.action.BOOT_COMPLETED"/>
                <action       android:name="android.intent.action.MEDIA_MOUNTED"/> 
                <data android:scheme="file" /> 
          </intent-filter>
         </receiver>

    </application>  

  </manifest> 

これはブロードキャスト用の MyReceiver クラスです

      package com.abc.testapp;

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

public class MyReceiver extends BroadcastReceiver 
  {

   @Override
   public void onReceive(Context context, Intent intent) 
       {
String action = intent.getAction();

  if(Intent.ACTION_MEDIA_MOUNTED.equals(action))
    {
      Log.d("MYReceiver","Mounting Successfull");
      Intent serviceActivity = new Intent(context, Rxmain.class);
      serviceActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      context.startActivity(serviceActivity); 
    }

  if(Intent.ACTION_BOOT_COMPLETED.equals(action))
  {
      Log.d("MYReceiver","Boot Successfull");
      Intent serviceActivity = new Intent(context, BootLoad.class);
      serviceActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      context.startActivity(serviceActivity); 
  }
  }
}        

私のデバイスはスタンドアロン デバイスです。私のアプリだけが起動します。

ブートが完了すると、BootLoad アクティビティが起動され、MEDIA_MOUNTED の後に Rxmain アクティビティが起動されます。

しかし、私の bootLoad アクティビティは来ていません

だから私はこれにいくつかの疑問があります:

  1. 時々機能しますが、時々機能しませんか?

2.Intent-filter のこの優先順位は何ですか?

  1. このデータスキームは何をしますか?

  2. 私がしていることは正しいですか?

私に提案してください

4

1 に答える 1

1

問題は、ブロードキャスト レシーバーのインテント フィルターを定義した方法です。これはあなたの定義です:

<receiver  android:name="com.abc.testapp.MyReceiver" android:enabled="true">
    <intent-filter android:priority="500">
          <action android:name= "android.intent.action.BOOT_COMPLETED"/>
          <action       android:name="android.intent.action.MEDIA_MOUNTED"/> 
          <data android:scheme="file" /> 
    </intent-filter>
</receiver>

ACTION がBOOT_COMPLETEDまたはの場合にトリガーされる単一のインテント フィルタを定義しましたMEDIA_MOUNTED。しかし、タグを指定することで、データが schema=file<data>のブロードキャスト インテントのみを受け取るようになります。

インBOOT_COMPLETEDテントにはデータがないため、受信者はデータを取得できません。

次のように、2 つの個別のインテント フィルタを指定する必要があります。

<receiver  android:name="com.abc.testapp.MyReceiver" android:enabled="true">
    <intent-filter android:priority="500">
          <action android:name= "android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
    <intent-filter android:priority="500">
          <action       android:name="android.intent.action.MEDIA_MOUNTED"/> 
          <data android:scheme="file" /> 
    </intent-filter>
</receiver>
于 2013-11-06T20:11:13.950 に答える