1

Android Nにダウンロードマネージャー通知の新しいキャンセルボタンが追加されました。Android N - Download Manager通知キャンセルボタン

私はこのボタンを押したときにプログレスバーを停止するために私のアプリでいくつかのコードをexcecuteしたいと思います。もしあれば、どのメソッドが呼び出されますか?

インテントフィルタアクションDownloadManager.ACTION_NOTIFICATION_CLICKEDは、ユーザが[キャンセル]ボタンをクリックしたときではなく、通知自体をクリックしたときにのみトリガされることにも注意してください。

ありがとうございます。

+0

 // get the download id from DownloadManager#enqueue getContentResolver().registerContentObserver(Uri.parse("content://downloads/my_downloads"), true, new ContentObserver(null) { @Override public void onChange(boolean selfChange, Uri uri) { super.onChange(selfChange, uri); if (uri.toString().matches(".*\\d+$")) { long changedId = Long.parseLong(uri.getLastPathSegment()); if (changedId == downloadId[0]) { Log.d(TAG, "onChange: " + uri.toString() + " " + changedId + " " + downloadId[0]); Cursor cursor = null; try { cursor = getContentResolver().query(uri, null, null, null, null); if (cursor != null && cursor.moveToFirst()) { Log.d(TAG, "onChange: running"); } else { Log.w(TAG, "onChange: cancel"); } } finally { if (cursor != null) { cursor.close(); } } } } } }); 

は答えを参照してください?私は同じ問題を抱えています。 – Malko

答えて

0

解決方法が見つかりませんでしたが、次の回避策を使用しています。 私は以下の)10秒ごとresetProgressIfNoOngoingDMRequestを(実行するためにAndroidのハンドラを使用します。

public int numberOfOngoingDMRequest() { 
    cursor = downloadManager.query(new Query()); 
    int res = cursor.getCount(); 
    cursor.close(); 
    return res; 
} 

public boolean resetProgressIfNoOngoingDMRequest() { 
    if (numberOfOngoingDMRequest() == 0) { 
     refreshUpdateAllButton(false); 
     resetEpisodesDownloadIds(); 
     act.misc.notifyEpisodesDataSetChanged(); 
     return true; 
    } 
    return false; 
} 

とてもいいが、それは仕事をしていませんされていません。アプリがフォアグラウンドにある場合のみ、これを行います。

0

もう1つの解決策は、ContentObserverです。

ダウンロードマネージャのコンテンツURIはcontent://downloads/my_downloadsである必要があります。このデータベースの変更を監視できます。ダウンロードIDでダウンロードを開始すると、行が作成されますcontent://downloads/my_downloads/{downloadId}。このカーソルをチェックして、このタスクがキャンセルされたかどうかを知ることができます。返されたカーソルが空またはnullで、データベースにレコードが見つからない場合、このダウンロードタスクはユーザーによって取り消されます。あなたが解決策を見つけるかhere