看一个静态页面(html):
<BODY>
<a href="hjz://com.zjmk.hjz_progressmotirx/openwith?gameid=12007&pk_name=com.surfing.android.tastyfood">启动应用程序</a>
</p></br></p>
<a href="hjz://com.zjmk.hjz_progressmotirx/down?apkurl=http://down.hjz518.com/upload/APK/2015-5/19/150519172102.apk&apkname=黄金指&memo=这是一款牛逼的手赚软件&gameid=12007&pk_name=com.surfing.android.tastyfood">启动应用程序下载页面</a>
</BODY>
我们看看href里面的组成:
- hjz://:这里的hjz://是“scheme”。
- com.zjmk.hjz_progressmotirx:这个是“host”。
- /down:这个是方法名前缀“pathPrefix”。
- apkurl=….&pkname=…:这个是传递的参数。
看到以上代码可能还是不是很明白这些有什么用,那么接着往下看….
看android端:
其实在android里面的项目清单住处的Activity下面可以添加很多数据节点,如 ,,,….
<activity android:name=".OpenapkActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Black.NoTitleBar">
<intent-filter>
<action android:
name="android.intent.action.VIEW"/>
<category android:
name="android.intent.category.DEFAULT" />
<category
name="android.intent.category.BROWSABLE" />
<data
android:scheme="hjz" android:host="com.zjmk.hjz_progressmotirx" android:pathPrefix="/openwith"/>
</intent-filter>
</activity>
看这个activity注册,在其下面添加了几个数据节点,action,category,data。看来data里面的数据应该就很明白了,data节点里面的数据都是和我们网页相对应的,如
scheme=”hjz”,//协议
host=”com.zjmk.hjz_progressmotirx”//主机
pathPrefix=”/openwith”//方法前缀
只有先对应才能正确的启动页面。
在activity中获取数据:
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState)
setContentView(R.layout.openapklayput)
Intent intent=getIntent()
String action = intent.getAction()
if(Intent.ACTION_VIEW.equals(action)){
Uri uri =intent.getData()
if(uri != null){
//根据属性值获取数据
String gameid=
uri.getQueryParameter("gameid")
String pkname=
uri.getQueryParameter("pk_name")
PackageManager packageManager =
getPackageManager()
Intent intent2=new Intent()
intent2 =packageManager
.getLaunchIntentForPackage(pkname)
startActivity(intent2)
Intent intent1=
new Intent(this,MotirxServices.class)
}
}
}
……到这里可以完成第三方浏览器和自己app应用的交互在跳过WebVIew的情况下,但是这里可能会有一个悲催的事情,就是他的兼容性。在369获取猎豹浏览器中href=“”;这里在scheme前面自动加上http://…..
这里就导致不能正常的打开我们指定的app页面。系统内置浏览器肯定是可以的,只是第三方浏览器可能存在这个问题,不过我的手机测试基本都可以,没问题。
android系统服务,如Uri,intent参数可以在Intent中指定程序要执行的动作(比如:view,edit,dial),以及程序执行到该动作时所需要的资料。都指定好后,只要调用startActivity(),Android系统会自动寻找最符合你指定要求的应用程序,并执行该程序。
★intent大全:
1.从google搜索内容
Intent intent = new Intent()
intent.setAction(Intent.ACTION_WEB_SEARCH)
intent.putExtra(SearchManager.QUERY,"searchString")
startActivity(intent)
2.浏览网页
Uri uri =Uri.parse("htt。。。。。。。。om")
Intent it = new Intent(Intent.ACTION_VIEW,uri)
startActivity(it)
3.显示地图
Uri uri = Uri.parse("geo:38.899533,-77.036476")
Intent it = newIntent(Intent.Action_VIEW,uri)
startActivity(it)
4.路径规划
Uri uri =Uri.parse("http。。。。。。。。。。/maps?
f=dsaddr=startLat%20startLng&daddr=endLat%20endLng&hl=en")
Intent it = newIntent(Intent.ACTION_VIEW,URI)
startActivity(it)
5.拨打电话
Uri uri =Uri.parse("tel:xxxxxx")
Intent it = new Intent(Intent.ACTION_DIAL,uri)
startActivity(it)
6.调用发短信的程序
Intent it = newIntent(Intent.ACTION_VIEW)
it.putExtra("sms_body", "TheSMS text")
it.setType("vnd.android-dir/mms-sms")
startActivity(it)
7.发送短信
Uri uri =Uri.parse("smsto:0800000123")
Intent it = newIntent(Intent.ACTION_SENDTO, uri)
it.putExtra("sms_body", "TheSMS text")
startActivity(it)
String body="this is sms demo"
Intent mmsintent = newIntent(Intent.ACTION_SENDTO, Uri.fromParts("smsto",
number, null))
mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_BODY,body)
mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_COMPOSE_MODE,true)
mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_EXIT_ON_SENT,true)
startActivity(mmsintent)
8.发送彩信
Uri uri =Uri.parse("content://media/external/images/media/23")
Intent it = newIntent(Intent.ACTION_SEND)
it.putExtra("sms_body","some text")
it.putExtra(Intent.EXTRA_STREAM, uri)
it.setType("image/png")
startActivity(it)
StringBuilder sb = new StringBuilder()
sb.append("file://")
sb.append(fd.getAbsoluteFile())
Intent intent = newIntent(Intent.ACTION_SENDTO, Uri.fromParts("mmsto",
number, null))
// Below extra datas are all optional.
intent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_SUBJECT,subject)
intent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_BODY,body)
intent.putExtra(Messaging.KEY_ACTION_SENDTO_CONTENT_URI,sb.toString())
intent.putExtra(Messaging.KEY_ACTION_SENDTO_COMPOSE_MODE,composeMode)
intent.putExtra(Messaging.KEY_ACTION_SENDTO_EXIT_ON_SENT,exitOnSent)
startActivity(intent)
9.发送Email
Uri uri =Uri.parse("mailto:xxx@abc.com")
Intent it = newIntent(Intent.ACTION_SENDTO, uri)
startActivity(it)
Intent it = new Intent(Intent.ACTION_SEND)
it.putExtra(Intent.EXTRA_EMAIL,"me@abc.com")
it.putExtra(Intent.EXTRA_TEXT, "Theemail body text")
it.setType("text/plain")
startActivity(Intent.createChooser(it,"Choose Email Client"))
Intent it=new Intent(Intent.ACTION_SEND)
String[] tos={"me@abc.com"}
String[]ccs={"you@abc.com"}
it.putExtra(Intent.EXTRA_EMAIL, tos)
it.putExtra(Intent.EXTRA_CC, ccs)
it.putExtra(Intent.EXTRA_TEXT, "Theemail body text")
it.putExtra(Intent.EXTRA_SUBJECT, "Theemail subject text")
it.setType("message/rfc822")
startActivity(Intent.createChooser(it,"Choose Email Client"))
Intent it = newIntent(Intent.ACTION_SEND)
it.putExtra(Intent.EXTRA_SUBJECT, "Theemail subject text")
it.putExtra(Intent.EXTRA_STREAM,"file:///sdcard/mysong.mp3")
sendIntent.setType("audio/mp3")
startActivity(Intent.createChooser(it,"Choose Email Client"))
10.播放多媒体
Intent it = new Intent(Intent.ACTION_VIEW)
Uri uri =Uri.parse("file:///sdcard/song.mp3")
it.setDataAndType(uri,"audio/mp3")
startActivity(it)
Uri uri
=Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI,"1")
Intent it = new Intent(Intent.ACTION_VIEW,uri)
startActivity(it)
11.uninstall apk
Uri uri =Uri.fromParts("package", strPackageName, null)
Intent it = newIntent(Intent.ACTION_DELETE, uri)
startActivity(it)
12.install apk
Uri installUri = Uri.fromParts("package","xxx", null)
returnIt = newIntent(Intent.ACTION_PACKAGE_ADDED, installUri)
打开照相机
<1>Intent i = new Intent(Intent.ACTION_CAMERA_BUTTON, null)
this.sendBroadcast(i)
<2>long dateTaken = System.currentTimeMillis()
String name = createName(dateTaken) + ".jpg"
fileName = folder + name
ContentValues values = new ContentValues()
values.put(Images.Media.TITLE, fileName)
values.put("_data", fileName)
values.put(Images.Media.PICASA_ID, fileName)
values.put(Images.Media.DISPLAY_NAME, fileName)
values.put(Images.Media.DESCRIPTION, fileName)
values.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, fileName)
Uri photoUri = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values)
Intent inttPhoto = new Intent(MediaStore.ACTION_IMAGE_CAPTURE)
inttPhoto.putExtra(MediaStore.EXTRA_OUTPUT, photoUri)
startActivityForResult(inttPhoto, 10)
14.从gallery选取图片
Intent i = new Intent()
i.setType("image/*")
i.setAction(Intent.ACTION_GET_CONTENT)
startActivityForResult(i, 11)
打开录音机
Intent mi = new Intent(Media.RECORD_SOUND_ACTION)
startActivity(mi)
16.显示应用详细列表
Uri uri =Uri.parse("market://details?id=app_id")
Intent it = new Intent(Intent.ACTION_VIEW,uri)
startActivity(it)
//where app_id is the application ID, findthe ID
//by clicking on your application on Markethome
//page, and notice the ID from the addressbar
刚才找app id未果,结果发现用package name也可以
Uri uri =Uri.parse("market://details?id=")
这个简单多了
17寻找应用
Uri uri =Uri.parse("market://search?q=pname:pkg_name")
Intent it = new Intent(Intent.ACTION_VIEW,uri)
startActivity(it)
//where pkg_name is the full package pathfor an application
18打开联系人列表
<1>
Intent i = new Intent()
i.setAction(Intent.ACTION_GET_CONTENT)
i.setType("vnd.android.cursor.item/phone")
startActivityForResult(i, REQUEST_TEXT)
<2>
Uri uri = Uri.parse("content://contacts/people")
Intent it = new Intent(Intent.ACTION_PICK, uri)
startActivityForResult(it, REQUEST_TEXT)
19 打开另一程序
Intent i = new Intent()
ComponentName cn = newComponentName("com.yellowbook.android2",
"com.yellowbook.android2.AndroidSearch")
i.setComponent(cn)
i.setAction("android.intent.action.MAIN")
startActivityForResult(i, RESULT_OK)
20.调用系统编辑添加联系人(高版本SDK有效):
Intent it = newIntent(Intent.ACTION_INSERT_OR_EDIT)
it.setType("vnd.android.cursor.item/contact")
//it.setType(Contacts.CONTENT_ITEM_TYPE)
it.putExtra("name","myName")
it.putExtra(android.provider.Contacts.Intents.Insert.COMPANY,
"organization")
it.putExtra(android.provider.Contacts.Intents.Insert.EMAIL,"email")
it.putExtra(android.provider.Contacts.Intents.Insert.PHONE,"homePhone")
it.putExtra(android.provider.Contacts.Intents.Insert.SECONDARY_PHONE,
"mobilePhone")
it.putExtra( android.provider.Contacts.Intents.Insert.TERTIARY_PHONE,
"workPhone")
it.putExtra(android.provider.Contacts.Intents.Insert.JOB_TITLE,"title")
startActivity(it)
21.调用系统编辑添加联系人(全有效):
Intent intent = newIntent(Intent.ACTION_INSERT_OR_EDIT)
intent.setType(People.CONTENT_ITEM_TYPE)
intent.putExtra(Contacts.Intents.Insert.NAME, "My Name")
intent.putExtra(Contacts.Intents.Insert.PHONE, "+1234567890")
intent.putExtra(Contacts.Intents.Insert.PHONE_TYPE,Contacts.PhonesColumns.TYPE_MOBILE)
intent.putExtra(Contacts.Intents.Insert.EMAIL, "com@com.com")
intent.putExtra(Contacts.Intents.Insert.EMAIL_TYPE,
Contacts.ContactMethodsColumns.TYPE_WORK)
startActivity(intent)
★intent action大全:
android.intent.action.ALL_APPS
android.intent.action.ANSWER
android.intent.action.ATTACH_DATA
android.intent.action.BUG_REPORT
android.intent.action.CALL
android.intent.action.CALL_BUTTON
android.intent.action.CHOOSER
android.intent.action.CREATE_LIVE_FOLDER
android.intent.action.CREATE_SHORTCUT
android.intent.action.DELETE
android.intent.action.DIAL
android.intent.action.EDIT
android.intent.action.GET_CONTENT
android.intent.action.INSERT
android.intent.action.INSERT_OR_EDIT
android.intent.action.MAIN
android.intent.action.MEDIA_SEARCH
android.intent.action.PICK
android.intent.action.PICK_ACTIVITY
android.intent.action.RINGTONE_PICKER
android.intent.action.RUN
android.intent.action.SEARCH
android.intent.action.SEARCH_LONG_PRESS
android.intent.action.SEND
android.intent.action.SENDTO
android.intent.action.SET_WALLPAPER
android.intent.action.SYNC
android.intent.action.SYSTEM_TUTORIAL
android.intent.action.VIEW
android.intent.action.VOICE_COMMAND
android.intent.action.WEB_SEARCH
android.net.wifi.PICK_WIFI_NETWORK
android.settings.AIRPLANE_MODE_SETTINGS
android.settings.APN_SETTINGS
android.settings.APPLICATION_DEVELOPMENT_SETTINGS
android.settings.APPLICATION_SETTINGS
android.settings.BLUETOOTH_SETTINGS
android.settings.DATA_ROAMING_SETTINGS
android.settings.DATE_SETTINGS
android.settings.DISPLAY_SETTINGS
android.settings.INPUT_METHOD_SETTINGS
android.settings.INTERNAL_STORAGE_SETTINGS
android.settings.LOCALE_SETTINGS
android.settings.LOCATION_SOURCE_SETTINGS
android.settings.MANAGE_APPLICATIONS_SETTINGS
android.settings.MEMORY_CARD_SETTINGS
android.settings.NETWORK_OPERATOR_SETTINGS
android.settings.QUICK_LAUNCH_SETTINGS
android.settings.SECURITY_SETTINGS
android.settings.SETTINGS
android.settings.SOUND_SETTINGS
android.settings.SYNC_SETTINGS
android.settings.USER_DICTIONARY_SETTINGS
android.settings.WIFI_IP_SETTINGS
android.settings.WIFI_SETTINGS
android.settings.WIRELESS_SETTINGS
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)