2016-11-29 17:09:39 l269327509 阅读数 624
  • 快速入门Android开发 视频 教程 android studio

    这是一门快速入门Android开发课程,顾名思义是让大家能快速入门Android开发。 学完能让你学会如下知识点: Android的发展历程 搭建Java开发环境 搭建Android开发环境 Android Studio基础使用方法 Android Studio创建项目 项目运行到模拟器 项目运行到真实手机 Android中常用控件 排查开发中的错误 Android中请求网络 常用Android开发命令 快速入门Gradle构建系统 项目实战:看美图 常用Android Studio使用技巧 项目签名打包 如何上架市场

    21452 人正在学习 去看看 任苹蜻

在工作中做分享的时候遇到需要在浏览器中打开app的功能,经过查阅资料,最终实现了这个功能,以下是说明


首先是一个html 中有一个点击跳转

格式是这个样子

<a href="[scheme]://[host]/[path]?[query]">打开程序</a>
<a href="myapp://host/open?name=aaa&age=123" >打开</a>

然后是Android端的设置

在AndroidManifest.xml文件里,要打开的Activity里加上下面的代码

例如:点击以后我要打开MainActivity,就在MainActivity节点下加上

	<intent-filter >
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="myapp" android:host="host" android:pathPrefix="/open"/>
         </intent-filter>


然后把html文件打开点击 打开 链接,就可以跳转到app了

如果要获取传过来的参数,就再MainActivity里加上

Uri data = getIntent().getData();
if (data != null){
	String name = data.getQueryParameter("name");
	String age = data.getQueryParameter("age");
}



好了,这样就获取到html页面传过来的值了~


2017-09-11 04:44:08 lowprofile_coding 阅读数 31732
  • 快速入门Android开发 视频 教程 android studio

    这是一门快速入门Android开发课程,顾名思义是让大家能快速入门Android开发。 学完能让你学会如下知识点: Android的发展历程 搭建Java开发环境 搭建Android开发环境 Android Studio基础使用方法 Android Studio创建项目 项目运行到模拟器 项目运行到真实手机 Android中常用控件 排查开发中的错误 Android中请求网络 常用Android开发命令 快速入门Gradle构建系统 项目实战:看美图 常用Android Studio使用技巧 项目签名打包 如何上架市场

    21452 人正在学习 去看看 任苹蜻

转载请注明出处:

http://blog.csdn.net/lowprofile_coding/article/details/77928608

在Android中可以调用自带的浏览器,或者指定一个浏览器来打开一个链接。只需要传入一个uri,可以是链接地址。

启动android默认浏览器

在Android程序中我们可以通过发送隐式Intent来启动系统默认的浏览器。如果手机本身安装了多个浏览器而又没有设置默认浏览器的话,系统将让用户选择使用哪个浏览器来打开连接。

Uri uri = Uri.parse("https://www.baidu.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

使用以上三行代码就能调用系统自带浏览器。

启动指定浏览器打开

在Android程序中我们可以通过发送显式Intent来启动指定的浏览器。例如我手机安装了多个浏览器:QQ浏览器、chrome浏览器、uc浏览器。我可以指定用某个浏览器打开这个链接。例如打开QQ浏览器如下代码:

Uri uri = Uri.parse("https://www.baidu.com");
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
//intent.setClassName("com.UCMobile","com.uc.browser.InnerUCMobile");//打开UC浏览器
intent.setClassName("com.tencent.mtt","com.tencent.mtt.MainActivity");//打开QQ浏览器
startActivity(intent);

用uc浏览器打开只需要把打开qq浏览器那行代码注释掉,然后打开uc浏览器那行代码取消注视就行。

优先使用

推荐用第一种,让用户自己去选择用哪个浏览器打开。除非有特殊需求才会用到第二种。

第二种出错率比较高,假如你想用uc浏览器打开,但是新版本的uc浏览器不用原来的包名了,这个时候你就没法打开了。还有uc浏览器兼容有问题,我跳转过去只会显示UC首页,而不是直接提打开我提供的http链接。但是QQ浏览器就没有这个问题。

如果你想第一时间看我的后期文章,扫码关注公众号,每周不定期推送Android开发实战教程文章…

      Android开发666 - 安卓开发技术分享
             扫描二维码加关注

Android开发666

2015-07-29 17:33:22 onceing 阅读数 678
  • 快速入门Android开发 视频 教程 android studio

    这是一门快速入门Android开发课程,顾名思义是让大家能快速入门Android开发。 学完能让你学会如下知识点: Android的发展历程 搭建Java开发环境 搭建Android开发环境 Android Studio基础使用方法 Android Studio创建项目 项目运行到模拟器 项目运行到真实手机 Android中常用控件 排查开发中的错误 Android中请求网络 常用Android开发命令 快速入门Gradle构建系统 项目实战:看美图 常用Android Studio使用技巧 项目签名打包 如何上架市场

    21452 人正在学习 去看看 任苹蜻

一、启动android默认浏览器
在Android程序中我们可以通过发送隐式Intent来启动系统默认的浏览器。如果手机本身安装了多个浏览器而又没有设置默认浏览器的话,系统将让用户选择使用哪个浏览器来打开连接。关于Intent的更多内容请参考《常用Intent
示例1
        Intent intent = new Intent();
        intent.setAction("android.intent.action.VIEW");
        Uri content_url = Uri.parse("http://www.163.com");
        intent.setData(content_url);
        startActivity(intent);
这样子,android就可以调用起手机默认的浏览器访问。
二、启动指定浏览器
在Android程序中我们可以通过发送显式Intent来启动指定的浏览器。
启动Android原生浏览器
示例2
         Intent intent = new Intent();        
         intent.setAction("android.intent.action.VIEW");    
         Uri content_url = Uri.parse("http://www.163.com");   
         intent.setData(content_url);           
         intent.setClassName("com.android.browser","com.android.browser.BrowserActivity");   
         startActivity(intent);
只要修改以intent.setClassName("com.android.browser","com.android.browser.BrowserActivity");
中相应的应用程序packagename 和要启动的activity即可启动其他浏览器来
uc浏览器""com.uc.browser", "com.uc.browser.ActivityUpdate
opera浏览器:"com.opera.mini.android", "com.opera.mini.android.Browser"
qq浏览器:"com.tencent.mtt", "com.tencent.mtt.MainActivity"
三、使用浏览器打开本地html文件
打开本地的html文件的时候,一定要指定某个浏览器,而不能采用方式一来浏览。
示例3
         Intent intent = new Intent();        
         intent.setAction("android.intent.action.VIEW");    
         Uri content_url = Uri.parse("file:///sdcard/robin.hu/help.html");   
         intent.setData(content_url);           
         intent.setClassName("com.android.browser","com.android.browser.BrowserActivity");   
         startActivity(intent);
虽然网上很多文章说即使使用浏览器打开本地的html文件的时,文件路径不支持"files:",不应该使用

Uri.parse("file:///sdcard/robin.hu/help.html");  

这种形式而是应该使用

Uri content_url = Uri.parse("content://com.android.htmlfileprovider/sdcard/robin.hu/help.html");

但是经过在HTC G10(Android2.3.5),Lenovo P770(Android4.0以上)测试,实际上只

Uri.parse("file:///sdcard/robin.hu/help.html");

这种形式能很好的工作。

Uri content_url = Uri.parse("content://com.android.htmlfileprovider/sdcard/robin.hu/help.html");

这种形式反而不能很好的工作
四、对使用浏览器打开网页的封装
以下是对使用浏览器打开网页的一些封装
    static void startBrower(Context context,String uri)
    {
        startBrower(context,Uri.parse(uri));
    }
    static void startBrower(Context context,Uri uri)
    {
         Intent intent = new Intent();
         intent.setAction("android.intent.action.VIEW");
         /*其实可以不用添加该Category*/
         intent.addCategory("android.intent.category.BROWSABLE");
         intent.setData(uri); 
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         /*如果想用浏览器打开本地html文件的话,则只能通过显式intent启动浏览器*/
         boolean explicitMode=false;
         String scheme=uri.getScheme();
         if(scheme!=null&&scheme.startsWith("file")) {
             explicitMode=true;
         }
         if(explicitMode) {
             intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
         } else {
             intent.addCategory("android.intent.category.BROWSABLE");
         }
         context.startActivity(intent);
    }
    static void startBrower(Context context,String uri,String packageName, String className)
    {
        startBrower(context,Uri.parse(uri),packageName,className);
    }
    static void startBrower(Context context,Uri uri,String packageName, String className)
    {
         Intent intent = new Intent();
         intent.setAction("android.intent.action.VIEW");
         intent.setData(uri); 
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         intent.setClassName(packageName,className);
         context.startActivity(intent);
    }
五、Android原生浏览器的AndroidManifest.xml
以下是Android 4.0原生浏览器的AndroidManifest.xml文件
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.browser">
    <original-package android:name="com.android.browser" />
    <permission android:name="com.android.browser.permission.PRELOAD"
        android:label="@string/permission_preload_label"
        android:protectionLevel="signatureOrSystem" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.NFC" />
    <uses-permission android:name="android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS" />
    <uses-permission android:name="android.permission.SET_WALLPAPER" />
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
    <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
    <uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/>
    <uses-permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"/>
    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
    <application   android:name="Browser"
                   android:label="@string/application_name"
                   android:icon="@mipmap/ic_launcher_browser"
                   android:backupAgent=".BrowserBackupAgent"
                   android:hardwareAccelerated="true"
                   android:taskAffinity="android.task.browser" >
        <provider android:name=".provider.BrowserProvider2"
                  android:authorities="com.android.browser;browser"
                  android:multiprocess="true"
                  android:readPermission="com.android.browser.permission.READ_HISTORY_BOOKMARKS"
                  android:writePermission="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS">
            <path-permission android:path="/bookmarks/search_suggest_query"
                    android:readPermission="android.permission.GLOBAL_SEARCH" />
        </provider>
        <activity android:name="BrowserActivity"
                  android:label="@string/application_name"
                  android:launchMode="singleTask"
                  android:alwaysRetainTaskState="true"
                  android:configChanges="orientation|keyboardHidden|keyboard|screenSize"
                  android:theme="@style/BrowserTheme"
                  android:windowSoftInputMode="adjustResize" >
            <intent-filter>
                <action android:name="android.speech.action.VOICE_SEARCH_RESULTS" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <!-- For these schemes were not particular MIME type has been
                 supplied, we are a good candidate. -->
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="http" />
                <data android:scheme="https" />
                <data android:scheme="about" />
                <data android:scheme="javascript" />
            </intent-filter>
            <!--  For these schemes where any of these particular MIME types
                  have been supplied, we are a good candidate. -->
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="http" />
                <data android:scheme="https" />
                <data android:scheme="inline" />
                <data android:mimeType="text/html"/>
                <data android:mimeType="text/plain"/>
                <data android:mimeType="application/xhtml+xml"/>
                <data android:mimeType="application/vnd.wap.xhtml+xml"/>
            </intent-filter>
            <!-- For viewing saved web archives. -->
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="http" />
                <data android:scheme="https" />
                <data android:scheme="file" />
                <data android:mimeType="application/x-webarchive-xml"/>
            </intent-filter>
            <!-- Accept inbound NFC URLs at a low priority -->
            <intent-filter android:priority="-101">
                <action android:name="android.nfc.action.NDEF_DISCOVERED" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="http" />
                <data android:scheme="https" />
            </intent-filter>
            <!-- We are also the main entry point of the browser. -->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="android.intent.category.BROWSABLE" />
            </intent-filter>
            <!-- The maps app is a much better experience, so it's not
                 worth having this at all... especially for a demo!
            <intent-filter android:label="Map In Browser">
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="vnd.android.cursor.item/postal-address" />
            </intent-filter>
            -->
            <intent-filter>
                <action android:name="android.intent.action.WEB_SEARCH" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="" />
                <data android:scheme="http" />
                <data android:scheme="https" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.MEDIA_SEARCH" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <meta-data android:name="android.app.searchable"
                    android:resource="@xml/searchable" />
        </activity>
        <activity android:name="ShortcutActivity"
            android:theme="@style/ShortcutTheme"
            android:label="@string/shortcut_bookmark"
            android:icon="@mipmap/ic_launcher_shortcut_browser_bookmark">
            <intent-filter>
                <action android:name="android.intent.action.CREATE_SHORTCUT" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity android:name="BrowserPreferencesPage" android:label="@string/menu_preferences">
            <intent-filter>
               <action android:name="android.intent.action.MANAGE_NETWORK_USAGE" />
               <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity android:name="BookmarkSearch"
                  android:label="@string/bookmarks_search"
                  android:stateNotNeeded="true"
                  android:theme="@android:style/Theme.NoDisplay"
                  android:excludeFromRecents="true">
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <meta-data android:name="android.app.searchable"
                    android:resource="@xml/bookmarks_searchable" />
        </activity>
        <activity android:name="AddBookmarkPage" android:label="Save bookmark"
                  android:theme="@style/DialogWhenLarge"
                  android:configChanges="orientation|keyboardHidden|screenSize">
            <intent-filter>
                <action android:name="android.intent.action.INSERT" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="vnd.android.cursor.dir/bookmark"/>
            </intent-filter>
        </activity>
        <activity android:name="ComboViewActivity">
        </activity>
        <!-- Bookmark thumbnail homescreen widget -->
        <receiver
            android:name=".widget.BookmarkThumbnailWidgetProvider"
            android:label="@string/bookmarks">
            <intent-filter>
                <action
                    android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                <action
                    android:name="com.android.browser.BOOKMARK_APPWIDGET_UPDATE" />
            </intent-filter>
            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/bookmarkthumbnailwidget_info" />
        </receiver>
        <service
            android:name=".widget.BookmarkThumbnailWidgetService"
            android:permission="android.permission.BIND_REMOTEVIEWS"
            android:exported="false" />
        <receiver
            android:name=".widget.BookmarkWidgetProxy"
            android:exported="false" />
        <activity android:name=".widget.BookmarkWidgetConfigure"
            android:theme="@android:style/Theme.Holo.DialogWhenLarge">
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
            </intent-filter>
        </activity>
        <!-- Makes .BrowserActivity the search target for any activity in Browser -->
        <meta-data android:name="android.app.default_searchable" android:value=".BrowserActivity" />
        <!-- Application code for RLZ tracking.  RLZ assigns non-unique, non-personally identifiable
             tracking labels to client products; these labels sometimes appear in Google search
             queries.  See http://code.google.com/p/rlz for more info.
             This value signifies to the RLZ client that this application uses RLZ tracking. -->
        <meta-data android:name="com.google.android.partnersetup.RLZ_ACCESS_POINT"
                   android:value="@string/rlz_access_point" />
        <receiver android:name=".OpenDownloadReceiver">
            <intent-filter>
                <action android:name="android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED"/>
            </intent-filter>
        </receiver>
        <!-- For custom home pages (like most visited) -->
        <provider
            android:name=".homepages.HomeProvider"
            android:authorities="com.android.browser.home"
            android:readPermission="com.android.browser.permission.READ_HISTORY_BOOKMARKS"
            android:exported="false" />
        <receiver android:name=".AccountsChangedReceiver">
            <intent-filter>
                <action android:name="android.accounts.LOGIN_ACCOUNTS_CHANGED" />
            </intent-filter>
        </receiver>
        <receiver android:name=".PreloadRequestReceiver"
             android:permission="com.android.browser.permission.PRELOAD" >
             <intent-filter>
                 <action android:name="android.intent.action.PRELOAD"/>
                 <data android:scheme="http" />
             </intent-filter>
         </receiver>
        <provider android:name=".provider.SnapshotProvider"
                  android:authorities="com.android.browser.snapshots"
                  android:exported="false" />
    </application>
</manifest>

结束


2015-05-07 14:38:30 androidstarjack 阅读数 4572
  • 快速入门Android开发 视频 教程 android studio

    这是一门快速入门Android开发课程,顾名思义是让大家能快速入门Android开发。 学完能让你学会如下知识点: Android的发展历程 搭建Java开发环境 搭建Android开发环境 Android Studio基础使用方法 Android Studio创建项目 项目运行到模拟器 项目运行到真实手机 Android中常用控件 排查开发中的错误 Android中请求网络 常用Android开发命令 快速入门Gradle构建系统 项目实战:看美图 常用Android Studio使用技巧 项目签名打包 如何上架市场

    21452 人正在学习 去看看 任苹蜻

如何用手机浏览器去下载app?


package com.example.text;



import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
/**
 * 启动浏览器去下载app
 * 或打开网页
 * @author androidstartjack
 *
 */
public class MainActivity extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.clickMyDown1).setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {
/**
* setAction方法设置指定那个浏览器启动:如
* 1. 系统默认浏览器 android.intent.action.VIEW
**/      
Intent intent = new Intent();  
intent.setAction("android.intent.action.VIEW");    
Uri content_url = Uri.parse("http://gdown.baidu.com/data/wisegame/3c00add7144d3915/kugouyinle.apk");   
intent.setData(content_url);  
intent.setClassName("com.android.browser","com.android.browser.BrowserActivity");
startActivity(intent);


}
});
/**
* 2、启动其他浏览器(当然该浏览器必须安装在机器上)
*  (“com.android.browser”:packagename;“com.android.browser.BrowserActivity”:启动主activity)

*/




findViewById(R.id.clickMyDown2).setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {
/**
* setAction方法设置指定那个浏览器启动:如
* 1. 系统默认浏览器 android.intent.action.VIEW
**/      
Intent intent = new Intent();  
intent.setAction("android.intent.action.VIEW");    
Uri content_url = Uri.parse("http://gdown.baidu.com/data/wisegame/3c00add7144d3915/kugouyinle.apk");   
intent.setData(content_url);  
//intent.setClassName("com.uc.browser", "com.uc.browser.ActivityUpdate"); 
startActivity(intent);


}
});




/**
* 用浏览器加载本地html
*/
// uc浏览器":"com.uc.browser", "com.uc.browser.ActivityUpdate"
//  opera:"com.opera.mini.android", "com.opera.mini.android.Browser"
// qq浏览器:"com.tencent.mtt", "com.tencent.mtt.MainActivity"
findViewById(R.id.clickMyDown3).setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");    
Uri content_url = Uri.parse("content://com.android.htmlfileprovider/sdcard/user_treaty.html");   
intent.setData(content_url);
//intent.setClassName("com.uc.browser", "com.uc.browser.ActivityUpdate");//启动uc浏览器
//intent.setClassName("com.opera.mini.android", "com.opera.mini.android.Browser");//启动opera
//intent.setClassName("com.tencent.mtt", "com.tencent.mtt.MainActivity");//启动qq浏览器:
intent.setClassName("com.android.browser","com.android.browser.BrowserActivity");//启动默认的浏览器
startActivity(intent);


}
});
}


/*
* 注意:

* 关键点是调用了”content“这个filter。
以前有在win32编程的朋友,可能会觉得用这种形式”file://sccard/help.html“是否可以,可以很肯定的跟你说,默认的浏览器设置是没有对”file“这个进行解析的,如果要让你的默认android浏览器有这个功能需要自己到android源码修改manifest.xml 文件,然后自己编译浏览器代码生成相应的apk包来重新在机器上安装。
大体的步骤如下:
1、打开 packages/apps/Browser/AndroidManifest.xml文件把加到相应的<intent-filter>后面就可以了
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="file" />
</intent-filter>
2、重新编译打包,安装,这样子,新的浏览器就支持”file“这个形式了。*/

}
2017-02-24 15:47:56 qq_34706837 阅读数 2598
  • 快速入门Android开发 视频 教程 android studio

    这是一门快速入门Android开发课程,顾名思义是让大家能快速入门Android开发。 学完能让你学会如下知识点: Android的发展历程 搭建Java开发环境 搭建Android开发环境 Android Studio基础使用方法 Android Studio创建项目 项目运行到模拟器 项目运行到真实手机 Android中常用控件 排查开发中的错误 Android中请求网络 常用Android开发命令 快速入门Gradle构建系统 项目实战:看美图 常用Android Studio使用技巧 项目签名打包 如何上架市场

    21452 人正在学习 去看看 任苹蜻

昨天还在嘀咕着项目快做完了,接下来公司会安排什么事,结果今天就给了我一个新任务,其中要做的一个功能就是指定调用谷歌浏览器打开网页,如果没有该浏览器就提示客户进行下载,查找一番资料后,觉得这种东西还是要记录一下,避免忘记。一下为可能会用到的几个方法。
1、查找包名和class,使用如下的方法我们就可以将本机安装的所有的浏览器的报名和class的名字查找出来了。

private void hasBrowser(Context context){
        PackageManager pm=context.getPackageManager();
        Intent intent=new Intent(Intent.ACTION_VIEW);
        intent.addCategory(Intent.CATEGORY_BROWSABLE);
        intent.setData(Uri.parse("http://"));
        List<ResolveInfo> list=pm.queryIntentActivities(intent, PackageManager.GET_INTENT_FILTERS); 
        if(size>0){
            for (int i = 0; i < size; i++) {
                ActivityInfo activityInfo=list.get(i).activityInfo;
                Log.i("GetBrowserInfo", "The packageName is "+activityInfo.packageName+" "+activityInfo.name+"\n");
            }

        }
    }

2、根据包名判断我们的应用是否安装,使用该方法我们只需要传入context和我们需要判断的报名就好了,如果返回true,则表明我们的应用已经安装过了,我们可以直接调用。

private boolean isAppInstalled(Context context,String packageName){
        PackageInfo packageInfo;
        try {
            packageInfo=context.getPackageManager().getPackageInfo(packageName, 0);
        } catch (NameNotFoundException e) {
            // TODO Auto-generated catch block
            packageInfo=null;
            e.printStackTrace();
        }
        if(packageInfo==null){
            return false;
        }else{
            return true;
        }
    }

3、调用指定的浏览器,传入我们的url地址打开网页,当然如果没有我们的浏览器,我们可以传入一个下载的url地址进行下载,因为我们的服务器端没有提供,我传入的url地址是我在百度上面下载的时候复制的url地址,也是可以达到我们想要的结果的,只是不能实现自动安装。

if(isAppInstalled(context, "com.android.chrome")){
                    Intent intent=new Intent(Intent.ACTION_VIEW);
                    intent.addCategory(Intent.CATEGORY_BROWSABLE);
                    intent.setData(Uri.parse("http://u.androidgame-store.com/new/game1/4/110904/com.android.chrome-49.0.2623.91-262309101.apk?f=baidu_1"));//复制的百度下载链接
                    intent.setClassName("com.android.chrome", "com.google.android.apps.chrome.Main");
                    context.startActivity(intent);
                }else{
                    Toast.makeText(context, "亲,您尚未安装谷歌浏览器,请先安装", Toast.LENGTH_SHORT).show();
                    //http://u.androidgame-store.com/new/game1/4/110904/com.android.chrome-49.0.2623.91-262309101.apk?f=baidu_1
                    Intent intent=new Intent(Intent.ACTION_VIEW);
                    intent.addCategory(Intent.CATEGORY_BROWSABLE);
                    intent.setData(Uri.parse("http://u.androidgame-store.com/new/game1/4/110904/com.android.chrome-49.0.2623.91-262309101.apk?f=baidu_1"));
                    intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");//调用系统浏览器下载,下载到系统的下载地址
                    context.startActivity(intent);
                }
    }

好了,我的功能已经差不多实现了,至于自动安装,还在思考,想到了再重新编辑,如果有人有好的建议,也可以留言给我,不胜感激。

没有更多推荐了,返回首页