android 启动第三方程序的代码&&&&android 安装卸载原理 以及activity 根据包名和应用名启动应用程序

来源:互联网 发布:广西银河商品交易软件 编辑:程序博客网 时间:2024/05/22 06:59

 

android 启动第三方程序的代码

方法一:
  1. Intent intent = new Intent();  
  2. intent.setClassName(<package name>, <class name>);  
  3. startActivity(intent);

方法二:
  1. Intent i=new Intent;
  2. ComponentName com= new ComponentName(<Package Name> , <Calss Name>);  
  3. i.setComponent(com);  
  4. startActivity(i);  

//启动媒体库

Intent i = new Intent();

ComponentName comp = new ComponentName("com.android.camera","com.android.camera.GalleryPicker");

i.setComponent(comp);

i.setAction("android.intent.action.VIEW");

startActivity(i);

//启动相机

Intent mIntent = new Intent();

ComponentName comp = new ComponentName("com.android.camera","com.android.camera.Camera");

mIntent.setComponent(comp);

mIntent.setAction("android.intent.action.VIEW");

startActivity(mIntent);

//启动htmlviewer,并打开指定的一个文件 注意TXT不能是ANSI的,否则会乱码

Intent intent = new Intent();

ComponentName cn = new ComponentName("com.android.htmlviewer", "com.android.htmlviewer.HTMLViewerActivity");

intent.setComponent(cn);

Uri uri = Uri.fromFile(new File("/sdcard/demo.txt"));

intent.setDataAndType(uri, "text/plain");

startActivity(intent);





首先apk安装涉及几个目录,system/app (系统自带的应用程序,无法删除)、data/app(用户程序安装的目录,有删除权限。安装时把apk文件复制到此目录)、data/data存放应用程序的数据)、Data/dalvik-cache(apk中的dex文件安装到dalvik-cache目录下(dex文件是dalvik虚拟机的可执行文件,其大小约为原始apk文件大小的四分之一)) 。。。


安装过程:复制APK安装包到data/app目录下,解压并扫描安装包,把dex文件(Dalvik字节码)保存到dalvik-cache目录,并data/data目录下创建对应的应用数据目录。


卸载过程:删除安装过程中在上述三个目录下创建的文件及目录。



一、系统应用安装:

PackageManagerService处理各种应用的安装,卸载,管理等工作,开机时由systemServer启动此服务

(源文件路径:android\frameworks\base\services\java\com\android\server\PackageManagerService.java)



PackageManagerService服务启动的流程:

1.
首先扫描安装“system\framework”目录下的jar

1.
scanDirLI(mFrameworkDir,PackageParser.PARSE_IS_SYSTEM,


scanMode | SCAN_NO_DEX);



2.第二步扫描安装“system\app”目录下的各个系统应用

scanDirLI(mSystemAppDir,PackageParser.PARSE_IS_SYSTEM, scanMode);


3.第三步扫描“data\app”目录,即用户安装的第三方应用

scanDirLI(mAppInstallDir, 0, scanMode);


4.第四步扫描" data\app-private"目录,即安装DRM保护的APK文件(目前没有遇到过此类的应用)。

scanDirLI(mDrmAppPrivateInstallDir,0, scanMode | SCAN_FORWARD_LOCKED);





看到这里相信你已经对apk的安装卸载有些头目了吧,接来下请看这个,会让你柳暗花明的:


activity 根据包名和应用名启动应用程序:

final ComponentName cn = new ComponentName(app.appname.substring(0,
"com.eshore.efilm", "com.eshore.efilm.Efilm");
Intent intent = new Intent();
intent.setComponent(cn);
intent
.setAction("android.intent.action.VIEW");
startActivity(intent);



Android程序使用代码的安装和卸载!!!


安装:
String str = "/CanavaCancel.apk";
String fileName = Environment.getExternalStorageDirectory() + str;
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive");
startActivity(intent);


卸载:
Uri packageURI = Uri.parse("package:com.demo.CanavaCancel");
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
startActivity(uninstallIntent);
Environment拥有一些可以获取环境变量的方法
package:com.demo.CanavaCancel 这个形式是 package:程序完整的路径 (包名+程序名).

this should work: 

Java:

Intent intent = new Intent(Intent.ACTION_VIEW)
intent.setDataAndType(Uri.fromFile(new File(fileName))"application/vnd.android.package-archive")
startActivity(intent);


that's because intent filter is: 
XML:
       <activity android:name=".PackageInstallerActivity"> 
            <intent-filter> 
                <action android:name="android.intent.action.VIEW" /> 
                <category android:name="android.intent.category.DEFAULT" /> 
                <data android:scheme="content" /> 
                <data android:scheme="file" /> 
                <data android:mimeType="application/vnd.android.package-archive" /> 
            </intent-filter> 
        </activity>


intent filter for uninstallation: 
XML:
       <activity android:name=".UninstallerActivity"> 
            <intent-filter> 
                <action android:name="android.intent.action.VIEW" /> 
                <action android:name="android.intent.action.DELETE" /> 
                <category android:name="android.intent.category.DEFAULT" /> 
                <data android:scheme="package" /> 
            </intent-filter> 
        </activity>

0 0
原创粉丝点击