3

http から大きなファイルをダウンロードするアプリケーションがあります。これを処理するために、 を使用しDownloadManagerました。

ダウンロードするファイルが大きすぎるため、ユーザーがアプリケーションをバックグラウンドに置いて、ダウンロードの実行中に自分の電話を自由に使用できるようにしたいと考えています。

私が書いたコードでは、ダウンロードが開始され、正しく動作しますが、ユーザーが通知バーでダウンロード ファイルの名前をクリックするたびに、ダウンロード リスト (システム アプリケーションのダウンロード - DownloadManager.ACTION_VIEW_DOWNLOADS) を表示する必要があります。

私が望むのは、ブラウザーが Web からファイルをダウンロードするときに、アプリケーションがデフォルトのブラウザーのダウンロード マネージャーとまったく同じように動作することです。

の宣言とコーディングを手伝ってもらえますBroadcastReceiverか? 私が言ったように、BroadcastReceiver常に実行される が必要です。

私はこれをやろうとしましたが、うまくいきません:

私のマニフェストには次のものがあります:

<manifest>
    <application>
        <receiver android:name="com.test.BroadcastReceiverDownloadManager">
            <intent-filter>
                <action android:name="android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED" />
                <action android:name="android.intent.action.DOWNLOAD_COMPLETE"></action>
            </intent-filter>
        </receiver>
    </application>
</manifest>

そして、私の BroadcastReceiverDownloadManager.java は次のとおりです。

public class BroadcastReceiverDownloadManager extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) 
    {
        String action = intent.getAction();
        Log.v("MY_APP","!!! onReceive !!!");

        if (DownloadManager.ACTION_NOTIFICATION_CLICKED.equals(action))
        {               
            Intent i = new Intent(context,DownloadManager.class);
            i.setFlags( Intent.FLAG_ACTIVITY_NEW_TASK);
            i.setAction(DownloadManager.ACTION_VIEW_DOWNLOADS);
            context.startActivity(i);       
        }        
    }
} 

クリックイベントを処理しない場合があり、クリックを正しく処理するたびに、アプリケーションは次のようにクラッシュします。

02-27 19:13:04.098: E/AndroidRuntime(13274): FATAL EXCEPTION: main
02-27 19:13:04.098: E/AndroidRuntime(13274): java.lang.RuntimeException: Unable to start receiver com.my.app.name.services.BroadcastReceiverDownloadManager: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.my.app.name/android.app.DownloadManager}; have you declared this activity in your AndroidManifest.xml?
02-27 19:13:04.098: E/AndroidRuntime(13274):    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2408)
02-27 19:13:04.098: E/AndroidRuntime(13274):    at android.app.ActivityThread.access$1500(ActivityThread.java:139)
02-27 19:13:04.098: E/AndroidRuntime(13274):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
02-27 19:13:04.098: E/AndroidRuntime(13274):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-27 19:13:04.098: E/AndroidRuntime(13274):    at android.os.Looper.loop(Looper.java:154)
02-27 19:13:04.098: E/AndroidRuntime(13274):    at android.app.ActivityThread.main(ActivityThread.java:4944)
02-27 19:13:04.098: E/AndroidRuntime(13274):    at java.lang.reflect.Method.invokeNative(Native Method)
02-27 19:13:04.098: E/AndroidRuntime(13274):    at java.lang.reflect.Method.invoke(Method.java:511)
02-27 19:13:04.098: E/AndroidRuntime(13274):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
02-27 19:13:04.098: E/AndroidRuntime(13274):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
02-27 19:13:04.098: E/AndroidRuntime(13274):    at dalvik.system.NativeStart.main(Native Method)
02-27 19:13:04.098: E/AndroidRuntime(13274): Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.my.app.name/android.app.DownloadManager}; have you declared this activity in your AndroidManifest.xml?
02-27 19:13:04.098: E/AndroidRuntime(13274):    at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1634)
02-27 19:13:04.098: E/AndroidRuntime(13274):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1510)
02-27 19:13:04.098: E/AndroidRuntime(13274):    at android.app.ContextImpl.startActivity(ContextImpl.java:1100)
02-27 19:13:04.098: E/AndroidRuntime(13274):    at android.content.ContextWrapper.startActivity(ContextWrapper.java:276)
02-27 19:13:04.098: E/AndroidRuntime(13274):    at android.content.ContextWrapper.startActivity(ContextWrapper.java:276)
02-27 19:13:04.098: E/AndroidRuntime(13274):    at com.my.app.name.services.BroadcastReceiverDownloadManager.onReceive(BroadcastReceiverDownloadManager.java:29)
02-27 19:13:04.098: E/AndroidRuntime(13274):    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2397)
02-27 19:13:04.098: E/AndroidRuntime(13274):    ... 10 more
4

1 に答える 1

0

ログにあるように:

02-27 19:13:04.098: E/AndroidRuntime(13274): Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.my.app.name/android.app.DownloadManager}; have you declared this activity in your AndroidManifest.xml?

アクティビティを開始するには、それを宣言する必要があります。ファイル AndroidManifest.xml を開き、アプリケーション タグ内でアクティビティを宣言したことを確認します。

    <activity
        android:name=".DownloadManager"
        android:label="@string/app_name"
        >
    </activity>

「.DownloadManager」には、アプリと同じパッケージ名が必要です。アプリとは別のパッケージを使用する場合は、完全に指定します (例: android:name="com.my.app.name.DownloadManager")。

パッケージ名について混乱があるように見えます。ログには、アクティビティの com.my.app.name がリストされます。レシーバーは com.my.app.name.services.BroadcastReceiverDownloadManager ですが、マニフェストには com.test.BroadcastReceiverDownloadManager があります。

実際の Java ファイルのパッケージ名は何ですか? それらはマニフェストと一致している必要があります。

于 2013-02-28T18:52:00.463 に答える