簡體   English   中英

Nexus 7上的廣播接收器

[英]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.

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