4

I want to open a file when it gets downloaded (using Services) services on click of the notification. I have passed "http://railsboxtech.com/singing/song/ishq_wala_instrument.mp3" this URL in my mainActivity for downloading it. For that I am using the following code:

public class DownloadService extends IntentService {
    String urlPath;
    private int result = Activity.RESULT_CANCELED;

    public DownloadService() {
        super("DownloadService");
    }

    // Will be called asynchronously be Android
    @Override
    protected void onHandleIntent(Intent intent) {
        Uri data = intent.getData();
        urlPath = intent.getStringExtra("urlpath");
        String fileName = data.getLastPathSegment();
        File output = new File(Environment.getExternalStorageDirectory(),
                fileName);
        if (output.exists()) {
            output.delete();
        }

        InputStream stream = null;
        FileOutputStream fos = null;
        try {

            URL url = new URL(urlPath);
            stream = url.openConnection().getInputStream();
            InputStreamReader reader = new InputStreamReader(stream);
            fos = new FileOutputStream(output.getPath());
            int next = -1;
            while ((next = reader.read()) != -1) {
                fos.write(next);
            }
            // Successful finished
            result = Activity.RESULT_OK;

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (stream != null) {
                try {
                    stream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        Bundle extras = intent.getExtras();
        if (extras != null) {
            Messenger messenger = (Messenger) extras.get("MESSENGER");
            Message msg = Message.obtain();
            msg.arg1 = result;
            msg.obj = output.getAbsolutePath();
            Intent intent1 = new Intent(Intent.ACTION_VIEW, Uri.parse("file://"+msg.obj));
            TaskStackBuilder stackBuilder = TaskStackBuilder
            .create(DownloadService.this);
            stackBuilder.addParentStack(MainActivity.class);
            stackBuilder.addNextIntent(intent1);
            final PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,
            PendingIntent.FLAG_UPDATE_CURRENT);
            NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
                DownloadService.this)
                .setContentTitle("File is downloaded")
                .setContentText("Isq_wala_love.mp3").setSmallIcon(R.drawable.ic_launcher)
                .setContentIntent(resultPendingIntent)
                .addAction(R.drawable.ic_launcher, "Call", resultPendingIntent);
            mBuilder.setContentIntent(resultPendingIntent);
            NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

            mNotificationManager.notify(0, mBuilder.build());

            try {
                messenger.send(msg);

            } catch (android.os.RemoteException e1) {
                Log.w(getClass().getName(), "Exception sending message", e1);
            }
        }
    }
}

But it's not able to open the file location.

4

1 回答 1

7

Set the intent DataAndTypeas follows:

intent.setDataAndType(Uri.fromFile(file), "whatEverMIMEType");
于 2013-02-14T13:05:25.577 回答