[英]Broadcast Receiver on Nexus 7
我正在嘗試編寫在電話啟動時運行的服務,並且必須從SD卡讀取數據。 起初,我使用的是android.intent.action.BOOT_COMPLETED
的接收器,但切換到下面的意圖以確保SD卡已加載。
我的問題是在Nexus 7上似乎沒有收到MEDIA_MOUNTED
意圖。 Nexus 7沒有SD卡(但具有單獨的SD卡分區)。 我也嘗試了BOOT_COMPLETED
意圖,但還是很幸運。 我已經在模擬器和Thunderbolt上測試了相同的代碼,並且兩種意圖均有效。
體現:
<receiver
android:name=".StartupReceiver"
android:enabled="true"
android:exported="true"
android:label="Start the NFS Automounter Service">
<intent-filter>
<action android:name="android.intent.action.MEDIA_MOUNTED"></action>
<data android:scheme="file"/>
<!-- <action android:name="android.intent.action.BOOT_COMPLETED"></action>-->
</intent-filter>
</receiver>
BroadcastReceiver
類:
public class StartupReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
//if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction()))
//if ("android.intent.action.MEDIA_MOUNTED".equals(intent.getAction()))
//{
Log.d("NFS_Automounter", "Recieved Mount");
Intent serviceIntent = new Intent("com.ancantus.nfsautomounter.AutomountService");
context.startService(serviceIntent);
//}
}
}
我注釋掉了意圖匹配,只是為了嘗試記錄該類是否已執行。
我唯一的直覺是Nexus 7沒有廣播MEDIA_MOUNTED
因為它沒有真正的SD卡; 但我也無法收到BOOT_COMPLETED
意圖。
並阻止這個問題; 是的,我確實具有BOOT_COMPLETED
權限。
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
在出現足夠多的搜索結果以使人們能夠找到答案之前,我必須鍵入多少次? 也許黑體字會起作用:
從ANDROID 3.1開始,直到用戶手動運行某個應用程序的其他組件中的任何一個為止, BroadcastReceiver
不會工作 。
在文檔 (盡管位置不佳), 博客文章和許多StackOverflow答案中,例如:
因此,將活動添加到您的應用中。 無論如何,您都需要一些活動,例如用於控制后台操作的設置,文檔,許可協議,隱私權政策等。
(注意:我並不是真的在對你大喊大叫-我感到沮喪的是,盡管努力說出來,但這種情況還在持續...)
請注意,許多Android設備模仿 SD卡的方式都不影響對SD卡的訪問,即使台式機訪問它也是如此。 因此,可能是Nexus 7只是以這種方式公開了所有內存,因此由於它並未真正掛載任何東西,因此不會廣播MEDIA_MOUNTED
。 如果您想在啟動時執行某些任務,那么監聽BOOT_COMPLETED
是唯一正確的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.