⑴ android开发如何获得第三方应用Widget的包名和类名
最近在做Android的平板的开发,想在桌面上预置一些第三方应用的Widget,在桌面预置Widget的方法就是要获得应用的包名和类名。 桌面预置widget的方法 在Launcher的配置文件 res/xml/default_workspace.xml中添加如下的代码:<appwidget launcher:packageName="com.google.android.apps.genie.geniewidget" //预置应用的包名 launcher:className="com.google.android.apps.genie.geniewidget.miniwidget.MiniWidgetProvider" //预置应用的Provider的类名,不是Activity的类名 launcher:screen="1"//在第几屏0为第一屏,launcher:x="0"//x坐标launcher:y="0"//y坐标 launcher:spanX="4"//x方向占几个单元格 launcher:spanY="1"///y方向占几个单元格 通过logcat有时可以找到应用的包名和Provider类名,此方法不可取,容易出错。系统的widget可以通过查找相关的源码找到对应的包名和Provider的类名,但是第三方应用看不到源码,但是也可以通过反编译第三方应用,获得相应的Maifest.xml文件,找到对应的包名和Provider类名,但是此方法比较繁琐。 可以通过在Launcher中添加如下代码,可以将系统中所安装的所有 的widget的信息打印出来: 在Launcher.java中的onCreate方法中添加下面的代码: List<=mAppWidgetManager.getInstalledProviders();finalintproviderCount=providers.size();for(inti=0;i<providerCount;i++){ ComponentNameprovider=providers.get(i).provider;Log.i("xxx", "packagename:" +provider.getPackageName()+ "classname:" +provider.getClassName());}新编译Launcher,把Launcher push进去之后,执行 adb logcat -s xxx,就可以看到打印出来的Log信息,包名和Provider了类名。 桌面预置shortcut的方法: 在Launcher的配置文件 res/xml/default_workspace.xml中添加如下的代码:<favorites
⑵ 如何在Android系统中集成第三方软件
将开发的第三方应用比如应用名为 VTest,项目结构如下图所示:
将项目移到Android系统源码:workspace_Android/packages/apps路径下 [workspace_Android为Android工程,名字是自定义命名的],注意Android工程首先必须是全编过的。
2. 在当前目录(workspace_Android/packages/apps/VTest)下新建一个 Android.mk 文件(这个文件的作用自己google),当然也可以从已有的系统项目,比如Browser中拷贝Android.mk文件然后修改。
修改如下所示:
LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
# Only compile source java files in this apk.LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := VTestLOCAL_CERTIFICATE := platformLOCAL_STATIC_JAVA_LIBRARIES := MapAPILOCAL_SHARED_LIBRARIES := MapApiEngine
include $(BUILD_PACKAGE)# ============================================================include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES :=MapAPI:libs/mapapi.jarLOCAL_PREBUILT_LIBS :=MapApiEngine:libs/armeabi/libBMapApiEngine_v1_3_5.soLOCAL_MODULE_TAGS := optionalinclude $(BUILD_MULTI_PREBUILT)
[说明]:其中 LOCAL_STATIC_JAVA_LIBRARIES 和 LOCAL_SHARED_LIBRARIES 为静态库和共享库,其中的区别自己搜索,这里不再阐述。
⑶ 如何在Android中的Activity启动第三方应用程序
在Android中,Activity有个栈,一个Activity结束掉,会回到上一个Activity,并不是退出应用程序。Android中,退出应用程序的方式:1.通过pidintpid=android.os.Process.myPid();//获取当前应用程序的PIDandroid.os.Process.killProcess(pid);//杀死当前进程这种方法退出应用,是会保留某些后进程,例如:Service,Notifications等。2.通过=(ActivityManager)context.getSystemService(ACTIVITY_SERVICE);//获取应用程序管理器manager.killBackgroundProcesses(getPackageName());//强制结束当前应用程序这种方式退出应用,会结束本应用程序的一切活动,因为本方法会根据应用程序的包名杀死所有进程包括Activity,Service,Notifications等。
⑷ android 跨进程获取第三方app 数据的方式有哪些
如果第三方APP是你自己开发,可以通过文件、ContentProvider、发送广播等等都可以实现。
如果第三方APP不是你自己开发的,就要看他有没有暴露出URI,也就是ContentProvider数据共享,就像读取系统联系人一样。如果没有URI......另想办法,好自为之。。。
⑸ android在应用内如何打开第三方应用
方法一Intent intent=new Intent();
//包名 包名+类名(全路径)
intent.setClassName("com.linxcool", "com.linxcool.PlaneActivity");
startActivity(intent);
12345
方法二
Intent intent = new Intent();
ComponentName comp = new ComponentName("com.linxcool","com.linxcool.PlaneActivity");
intent.setComponent(comp);
intent.setAction("android.intent.action.MAIN");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
⑹ 我想问一下,android开发时要引用第三方应用,我要怎么知道程序的入口包名和主Activity呢,比较急呢
先通过下面的getPackages()方法获得所有系统安装的应用,根据打印出来的日志找到你要找的应用的对应的包名,在调用startAppByPackageName()方法启动应用就可以了,主activity不需要的
private ArrayList<PInfo> getPackages() {
ArrayList<PInfo> apps = getInstalledApps();
final int max = apps.size();
for (int i=0; i<max; i++) {
apps.get(i).prettyPrint();
}
return apps;
}
class PInfo {
private String appname = "";
private String pname = "";
private String versionName = "";
private int versionCode = 0;
private Drawable icon;
private void prettyPrint() {
Log.e("zhm",appname + "\t" + pname + "\t" + versionName + "\t" + versionCode);
}
}
private ArrayList<PInfo> getInstalledApps() {
ArrayList<PInfo> res = new ArrayList<PInfo>();
List<PackageInfo> packs = parent.getPackageManager().getInstalledPackages(0);
for(int i=0;i<packs.size();i++) {
PackageInfo p = packs.get(i);
if (p.versionName == null) {
continue ;
}
PInfo newInfo = new PInfo();
newInfo.appname = p.applicationInfo.loadLabel(parent.getPackageManager()).toString();
newInfo.pname = p.packageName;
newInfo.versionName = p.versionName;
newInfo.versionCode = p.versionCode;
newInfo.icon = p.applicationInfo.loadIcon(parent.getPackageManager());
res.add(newInfo);
}
return res;
}
public void startAppByPackageName(String packageName){
PackageInfo pi = null;
try {
pi = getPackageManager().getPackageInfo(packageName, 0);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(pi.packageName);
List<ResolveInfo> apps = getPackageManager().queryIntentActivities(resolveIntent, 0);
ResolveInfo ri = apps.iterator().next();
if (ri != null ) {
String packageName1 = ri.activityInfo.packageName;
String className = ri.activityInfo.name;
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ComponentName cn = new ComponentName(packageName1, className);
intent.setComponent(cn);
startActivity(intent);
}
}
⑺ 如何获取android手机上已安装软件的下载位置或来源
android手机安装的软件在SD卡上无法找到的。但是android手机本身就会对apk做备份处理,也就是说只要手机上装的应用,都可以在手机上找出来
查找方式:
用户安装的第三方应用,apk文件保存在 /data/app 目录下
系统自带的应用,apk文件保存在 /system/app 目录下
android手机本身是无法查看的,需要连接到电脑上才能查看
android 手机是linux内核,/data /system目录都是属于 root用户才能查看的,因此你需要先获取root权限才能查看
⑻ 怎么打开第三方应用程序
需求场景:
在自己开发的应用程序里,有个跳转到其他应用的按钮,比如分享到“新浪微博”,当点击这个按钮时,先判断手机中是否有安装“新浪微博”这个程序,有则启动“新浪微博”客户端,否则从指定的URL地址进行下载。
简言之,开启其他应用,包名跳转。
1、从一个应用跳转到其他应用要获取什么信息?
need第三方应用的包名,以及下载链接。
2、如何判断本机是否已经安装了该第三方应用?
(1)首先得到该程序的包名;
别人的应用程序我怎么知道他的包名和类名?
- 通过adb里面看程序装的所有应用
- 写一个遍历程序,获取所有已安装的程序,把包名打印出来,新浪微博的包名中应该会带有sina字眼,如 com.sina.weibo
//获取已经安装apk列表
List<PackageInfo> packList = context.getPackageManager().getInstalledPackages(0);
//获得包名PackageInfo.packageName
(2)然后通过PackageManager判断是否存在该包的程序 。
android的每一个apk的activity的包的名字都是唯一的,所以可以通过判断这个activity所在包的名字来判断是不是该Apk已经安装
例1:
//以twitter程序为例,假设twitter程序包名为“com.twitter.android”。这时候可用以下代码来判断是否被安装。
//QQ客户端的包名是"com.tencent.mobileqq"
PackageInfo packageInfo;//PackageInfo所在包为android.content.pm
try {
packageInfo = this.getPackageManager().getPackageInfo("com.twitter.android", 0);
} catch (NameNotFoundException e) {
packageInfo = null;
e.printStackTrace();
}
if(packageInfo ==null){
System.out.println("没有安装");
}else{
System.out.println("已经安装");
}
例2:可以封装到方法里,操作一样,只是把包名作为参数传入,返回值为布尔类型
private boolean isPkgInstalled(String pkgName) {
PackageInfo packageInfo = null;
try {
packageInfo = this.getPackageManager().getPackageInfo(pkgName, 0);
} catch (NameNotFoundException e) {
packageInfo = null;
e.printStackTrace();
}
if (packageInfo == null) {
return false;
} else {
return true;
}
3、怎么跳转?
通过隐式intent跳转
例3:PackageManager中有getLaunchIntentForPackage这个方法!
//String pkg代表包名,String download代表下载url
final PackageManager pm = context.getPackageManager();
Intent intent = pm.getLaunchIntentForPackage(pkg);
if (null == intent) {//没有获取到intent
if (!TextUtils.isEmpty(downoad)) {//跳转到下载第三方应用界面
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(downoad)));
}
} else {
context.startActivity(intent);
}
例4:在我们自己的程序中调用其他程序时往往要检查手机有没有安装该软件后再做相应操作,如没有安装,用intent将用户引导至android market去下载该程序,如已安装则打开该程序,并传入参数和调用其功能。
//下面介绍怎么判断手机已安装某程序的方法:
private boolean isAvilible(Context context, String packageName){
final PackageManager packageManager = context.getPackageManager();//获取packagemanager
List< packageInfo> pinfo = packageManager.getInstalledPackages(0);//获取所有已安装程序的包信息
List<String> pName = new ArrayList<String>();//用于存储所有已安装程序的包名
//从pinfo中将包名字逐一取出,压入pName list中
if(pinfo != null){
for(int i = 0; i < pinfo.size(); i++){
String pn = pinfo.get(i).packageName;
pName.add(pn);
}
}
return pName.contains(packageName);//判断pName中是否有目标程序的包名,有TRUE,没有FALSE
}
//下面是调用该方法进行判断后的逻辑:
//已安装,打开程序,需传入参数包名:"com.skype.android.verizon"
if(isAvilible(this, "com.skype.android.verizon")){
Intent i = new Intent();
ComponentName cn = new ComponentName("com.skype.android.verizon",
"com.skype.android.verizon.SkypeActivity");
i.setComponent(cn);
startActivityForResult(i, RESULT_OK);
}
//未安装,跳转至market下载该程序
else {
Uri uri = Uri.parse("market://details?id=com.skype.android.verizon");//id为包名
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
}
参考链接:http://www.eoeandroid.com/thread-152763-1-1.html?_dsign=2242c74c
4、跳转后呢?
如何在android应用程序中启动其他apk程序,被启动程序退出后返回之前的程序?
//你只需要在A中打开B,并为B设置 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//不做对A的关闭处理finish() 这样就可以了
Intent intent=new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setComponent(new ComponentName(objAppClassName, mainActivity));
context.startActivity(intent);
例5:原始跳转方法,要包名和类名(通过ComponentName),后来可以只要包名…
Android 开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用。
一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
startActivity(intent);
但是更多的时候,我们一般都不知道应用程序的启动Activity的类名,而只知道包名,我们可以通过ResolveInfo类来取得启动Acitivty的类名。
下面是实现代码:
private void openApp(String packageName) {
PackageInfo pi = getPackageManager().getPackageInfo(packageName, 0);
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(pi.packageName);
List<ResolveInfo> apps = pm.queryIntentActivities(resolveIntent, 0);
ResolveInfo ri = apps.iterator().next();
if (ri != null ) {
String packageName = ri.activityInfo.packageName;
String className = ri.activityInfo.name;
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
startActivity(intent);
}
}
⑼ 求助!如何在安卓手机里下载第三方软件
安卓系统的游戏和其他运用软件的下载和安装一般有2种方式:
第一种直接在网站或者论坛上下载,后缀名为APK的安装程序,然后复制到在机器上,用机器自带的APK安装器安装后就可以使用了;
第二种是先在电脑上安装第3方辅助软件,常用的有91手机助手、豌豆夹、G蛋等,我自己用的是91手机助手,就用它来说明。安装好以后,先运行软件,再用USB把机器和电脑联机,软件会自动识别机器,这样你就可以用辅助软件91手机助手,按功能或者类别来搜你想要的游戏和软件,找到可以用91手机助手下载,下载完了91手机助手会自动安装(第一种方式下载的安装文件,也可以用91手机助手安装)
有少数情况遇见,下载的文件是ZIP等格式的压缩文件,解压后无APK文件,这种情况下把压缩文件的后缀名改为APK,再安装即可。
根据个人经验可能是存在不兼容的原因,有时1种方式不能成功安装,可以试着用另外的方式下载安装,或者可以换个辅助软件下载安装。
希望对你有帮助,望采纳。如有疑问请追问