For getLaunchIntentForPackage(), it says it is undefined for type
PackageManager and hence code cannot compile?
i can see the other methods when I put . after getPackageManager()
except this one.

Thanks
Yasser

On Jul 6, 10:39 am, "Justin (Google Employee)" <[email protected]>
wrote:
> > > How does the process for retrieving system rights look like?
>
> Its a matter of signatures. Whoever signs the system is also going to
> need to sign any app that wants system privileges.
>
> > I suppose this problem
> > shouldn't exist if I was able to save the .apk file in the private
> > directory of my application and then invoke the system install UI on
> > the file.
>
> Well, no, you can't have your cake and eat it to. The package manager
> needs to be able to read the APK file to install the app. In order to
> do this you need to place the APK in a world-readable location because
> you can't have the same UID or GID as the package manager. No matter
> what you do, if you want to allow the package manager to read the
> file, everyone can. Now, if you put the file in your private directory
> and set the mode to MODE_WORLD_READABLE, the package manager may be
> able to read the file, I think it should be able to. Everyone else
> can, but they would have to know the exact path because I don't
> believe they can list the directory in which the file resides.
>
> Now, regardless of where the APK is placed, you should probably delete
> it after installation, otherwise you're at least doubling storage
> space required per application. If you delete the APK after its
> installed, you also fix your "install only to device downloaded on".
>
> Cheers,
> Justin
> Android Team @ Google
>
> On Jul 2, 3:48 am, calleandersson <[email protected]> wrote:
>
>
>
> > I have been testing with the 'file://' prefix and got the following
> > results:
>
> > When saving an .apk file in the private directory of my application
> > and trying to invoke the system installation UI, an parse error
> > occured due to permission issues:
> >   07-02 07:15:27.826: WARN/zipro(726): Unable to open zip '/data/data/
> > test.calle.helloworld/files/AndroidHelloWorld.apk': Permission denied
> >   07-02 07:15:27.826: DEBUG/asset(726): failed to open Zip archive '/
> > data/data/test.calle.helloworld/files/AndroidHelloWorld.apk'
> >   07-02 07:15:27.846: WARN/PackageParser(726): Unable to read
> > AndroidManifest.xml of /data/data/test.calle.helloworld/files/
> > AndroidHelloWorld.apk
> >   07-02 07:15:27.846: WARN/PackageParser(726):
> > java.io.FileNotFoundException: AndroidManifest.xml
> >    ...
> >   07-02 07:15:27.856: WARN/PackageInstaller(726): Parse error when
> > parsing manifest. Discontinuing installation
>
> > When I saved the .apk file on the SD card, everything went as supposed
> > and the system installation UI was displayed.
>
> > So far so good. However, I only want a downloaded .apk file to be
> > installed on the same phone which downloaded it. If the application is
> > placed on the SD card, wouldn't it be possible to use the same SD card
> > in another phone (or copy the .apk file to another SD card used by
> > another phone) and install the application on that phone too? Am I
> > correct in these assumtions?
>
> > With regards to what I wrote above, is it somehow possible to restrict
> > an application file from beeing installed on any other phone except
> > the very same phone which downloaded the .apk file (using my
> > application)? Is system rights needed? I suppose this problem
> > shouldn't exist if I was able to save the .apk file in the private
> > directory of my application and then invoke the system install UI on
> > the file.
>
> > Regards,
> > Calle
>
> > On 1 Juli, 18:22, calleandersson <[email protected]> wrote:
>
> > > Hi Justin,
>
> > > Thanks for the tips about the 'file://' prefix and SD card, I will
> > > look into that tomorrow.
>
> > > How does the process for retrieving system rights look like? Is it the
> > > manufacturer of an Android device which decides if an application
> > > should have system rights? I suppose that that kind of clients must be
> > > installed/included in the device before it is released or am I wrong?
>
> > > Is there somehow possible to simulate that an application has system
> > > rights in the Emulator?
>
> > > By the way, I was thinking of using the same Intent code to start an
> > > already installed application but, currently, I'm using the following
> > > code which seems to work pretty well (and the class name doesn't need
> > > to be specified):
> > > Intent intent = getPackageManager().getLaunchIntentForPackage
> > > (packageName);
> > > startActivity(intent);
>
> > > Regards,
> > > Calle
>
> > > On 1 Juli, 17:18, "Justin (Google Employee)" <[email protected]> wrote:
>
> > > > The package manager way will not work, you need the permission you
> > > > referenced, INSTALL_PACKAGES, which only the system has and is not
> > > > obtainable by user-installed applications.
>
> > > > I think your Intent-based method should work, I believe this is more
> > > > or less what the browser does when you download an APK from the
> > > > internet. I have two thoughts. First, you haven't specified a proper
> > > > Uri, you've specified a file path, try file:///data/data/... Second,
> > > > I'm not sure you can place the file in your app's private directory
> > > > and have this work, to remove this variable, try placing the APK on
> > > > the SD card.
>
> > > > As far as removing packages, I'm not sure, I'm not sure what Intent
> > > > you would use to do this, although certainly some Intent exists,
> > > > albeit probably private/undocumented. You could watch the logcat
> > > > output when you go into the application manager from settings.
>
> > > > Cheers,
> > > > Justin
> > > > Android Team @ Google
>
> > > > On Jul 1, 6:22 am, calleandersson <[email protected]> wrote:
>
> > > > > Hi,
>
> > > > > I am going to create an application (using Android 1.5) which can
> > > > > download and install other applications and also be able to remove
> > > > > these applications when needed. I have tried to do this in two
> > > > > different ways but havn't had any success:
>
> > > > > -- A: the PackageManager way --
>
> > > > > Using the following code:
>
> > > > > getPackageManager().installPackage(Uri.parse(url));
>
> > > > > an SecurityException occur since (as I understand) it isn't possible
> > > > > for an application to be granted the INSTALL_PACKAGES permission
> > > > > (which is needed by the installPackage() method) unless the program
> > > > > has system rights.
>
> > > > > A1. Is it correct that system rights is needed by an application to be
> > > > > granted INSTALL_PACKAGES permission?
>
> > > > > A2. How can an application acquire system rights?
>
> > > > > A3. Will this approach generate some kind of platform specific install
> > > > > popups (or something like that) or could an application be installed
> > > > > without any user interaction required?
>
> > > > > -- B: the Intent way --
>
> > > > > I download an .apk-file using code similar to the following code:
>
> > > > > URL sourceUrl = new URL(source);
> > > > > Object data = sourceUrl.getContent();
> > > > > String fileName = sourceUrl.getFile().substring(fileName.lastIndexOf
> > > > > ('/') + 1);
> > > > > // create/open file in the 'data/data/<app namespace>/files' directory
> > > > > FileOutputStream fos = openFileOutput(fileName, Context.MODE_PRIVATE);
> > > > > int read = 0;
> > > > > byte[] buffer = new byte[512];
> > > > > BufferedInputStream bis = new BufferedInputStream((InputStream) data);
> > > > > do{
> > > > >         read = bis.read(buffer);
> > > > >         if(read > 0){
> > > > >                 fos.write(buffer, 0, read);
> > > > >         }
>
> > > > > }while(read != -1);
>
> > > > > and then i try to invoke an installation of the application by using
> > > > > the following code (which I belive should bring the system UI up for
> > > > > the user to confirm the install):
>
> > > > > Intent intent = new Intent();
> > > > > intent.setAction(android.content.Intent.ACTION_VIEW);
> > > > > intent.setDataAndType(Uri.parse("/data/data/test.calle.helloworld/
> > > > > files/AndroidHelloWorld.apk"), "application/vnd.android.package-
> > > > > archive");
> > > > > startActivity(intent);
>
> > > > > but this only generates an ActivityNotFoundException:
> > > > > 07-01 10:11:05.354: ERROR/AndroidRuntime(2480):
> > > > > android.content.ActivityNotFoundException: No Activity found to handle
> > > > > Intent { action=android.intent.action.VIEW data=/data/data/
> > > > > test.calle.helloworld/files/AndroidHelloWorld.apk type=application/
> > > > > vnd.android.package-archive }
>
> > > > > B1. What am I doing wrong/missing in the attempt to install the
> > > > > downloaded application?
>
> > > > > B2. Will this approach bring the system UI up (for the user to confirm
> > > > > the install) or have I misunderstood something?
>
> > > > > B3. Could I use the same Intent code to start an already installed
> > > > > application or do I need change some input data?
>
> > > > > B4. Is it possible to initiate an uninstall of an application with a
> > > > > similar approach (without beeing granted the REMOVE_PACKAGES
> > > > > permission)?
>
> > > > > B5. Is there some cleaner/easier way of downloading an entire file
> > > > > from the internet to the file system and should I use
> > > > > 'Context.MODE_PRIVATE' when I call the openFileOutput() method?- Dölj 
> > > > > citerad text -
>
> > > > - Visa citerad text -- Dölj citerad text -
>
> > > - Visa citerad text -- Hide quoted text -
>
> - Show quoted text -
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Beginners" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-beginners?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to