如何在Android7.0系统下通过Intent安装apk

如何在Android7.0系统下通过Intent安装apk,第1张

AIDL 是调用service的。还可以通过intent, broadcast调用第三方的APK中的组件。但前提是要你知道这些组件的intent-filter,并且他们是开放的。 启动的是一个activity,它有安装确认提示。Intent i = new Intent(); isetFlags(IntentFLAG_ACTIVITY_NEW_TASK); isetAction(androidcontentIntentACTION_VIEW); / 调用getMIMEType()来取得MimeType / String type = getMIMEType(f); isetDataAndType(UrifromFile(f), type); startActivity(i);

在Android中提供了Intent机制来协助Android应用间,组件间的交互与通讯,Intent负责对应用中一次 *** 作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。

Intent可以用来启动Activity,Service,Broadcasts。

Intent有以下几个属性:动作(Action),数据(Data),分类(Category),类型(Type),组件(Compent)以及扩展信(Extra)。

Intent类型分为显式Intent(直接类型)、隐式Intent(间接类型)。官方建议使用隐式Intent。上述属性中,component属性为直接类型,其他均为间接类型。

相比与显式Intent,隐式Intnet则含蓄了许多,它并不明确指出我们想要启动哪一个活动,而是指定一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent,并帮我们找出合适的活动去启动。

Action要表达的是Intent要完成的动作,是字符串常量。

SDK中定义了一些标准的Action常量。使用它们可以用来启动android系统的一些内置程序如相机,相片库,打电话,等等。(具体可参考文章 009android初级篇之APP中使用系统相机相册等集成应用 )

即执行动作要 *** 作的数据和传递到目标的附加信息

Category属性是一个执行动作Action的附加信息。比如:CATEGORY_HOME则表示放回到Home界面,ALTERNATIVE_CATEGORY表示当前的Intent是一系列的可选动作中的一个。下表是SDK文档中关于Category的信息

几个常见的category如下:

Intent的Type属性显式指定Intent的数据类型(MIME)。一般Intent的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型而不再进行推导。

例如:一个可以处理的目标Activity在其声明中包含这样的mimeType:

在使用Intent进行匹配时,我们可以使用setType(String type)或者setDataAndType(Uri data, String type)来设置mimeType。

目标组件的包或类名称

在使用component进行匹配时,一般采用以下几种形式:

其中,前两种是用于匹配同一包内的目标,第三种是用于匹配其他包内的目标。需要注意的是,如果我们在Intent中指定了component属性,系统将不会再对action、data/type、category进行匹配。

期望这个意图的运行模式

可参考文章 025android初级篇之Android am命令的实现 中部分的FLAG的定义。

可以用>

GUI,界面,与用户交互的可视接口。

当然Fragment,View也是,不过我把它看作是控件,Activity是开发中最基本的容器(窗口)。

目的是便于管理Activity生命周期。

新启动的Activity会压入栈顶,而处于栈顶的Activty处于Active活跃状态,即可以和用户做交互(可见可交互)。压在下面的Activity则处于可见不可交互,或不可见不可交互状态,并且系统可能会因为内存不足原因优先回收掉任务栈最下面的Activity,所以也有被回收状态。

1资源相关的系统配置发生改变导致Activty被杀死并重新创建

2资源内存不足导致低优先级的Activity被杀死

扩展:进程优先级

当Activity异常被回收的情况下,系统会调用onSaveIntanceState(Bundle),重新启动时会调用onRestoreInstanceState(Bundle),所以可以在Bundle做一些数据保存和恢复的工作。

数据恢复:onCreate()与onRestoreInstanceState()区别:

onCreate()需要判空,onRestoreInstanceState不需要。

启动模式简单来说就是定义Activity实例与Activity任务栈的关联方式。

目的:

设置方式:

有哪些启动模式?

TaskAffinity(任务相关性),这个参数标识了一个Activity所需要的任务栈的名字,默认情况下,所有Activity所需的任务栈的名字为应用的名字。所有我们可以通过设置TaskAffinity为每个Activity单独指定任务栈。

启动Activity就两种,显示调用和隐式调用。

即在Intent中,显示传入要跳转的组件类名。这种方式比较简单直接,但也造成了关联耦合。

这样调用方式的好处是我不必知道我的目标组件具体的名字,只要有组件满足我设置的过滤条件即可找到我想要的组件。这种方式广泛应用在模块化开发,解决了模块之间的跳转问题。

隐式调用需要Intent能够匹配目标组件的IntentFilter中设置的过滤信息,如果不匹配将无法启动目标组件。IntentFilter中的过滤信息包括action、category、data

清单文件中,如果data仅指定了mimeType,没有指定URI,则data中URI的scheme的默认值为file和content,所以Intent中URI的scheme也必须为file或content才能匹配到。

类似URI的结构,就是匹配URI的。

URI结果: <scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]

使用PackageManager的两种方法判空。

第二个flag参数使用MATCH_DEFAULT_ONLY时,表示仅仅匹配那些在intent-filter中声明了androidintentcategoryDEFAULT这个category的组件。

添加日历 Activity 到 AndroidManifestxml

<activity android:name="comexinaandroidcalendarCalendarActivity">

<intent-filter>

<action android:name="androidintentactionPICK" />

<category android:name="androidintentcategoryDEFAULT" />

<data android:mimeType="vndandroidcursordir/vndexinaandroidcalendardate" />

</intent-filter>

<intent-filter>

<action android:name="androidintentactionVIEW" />

<category android:name="androidintentcategoryDEFAULT" />

<data android:mimeType="vndandroidcursordir/vndexinaandroidcalendardate" />

</intent-filter>

</activity>

拷贝如下源码到项目 src 目录

com/exina/android/calendar/CalendarActivityjava

com/exina/android/calendar/CalendarViewjava

com/exina/android/calendar/Celljava

拷贝如下资源文件到项目 res 目录

layout: mainxml

drawable: backgroundpng, calendar_weekpng, typeb_calendar_todaypng

values: dimensxml

显示日历

使用 Intent 简单的调用日历组件

startActivity(new Intent(IntentACTION_VIEW)setDataAndType(null, CalendarActivityMIME_TYPE));

使用日历来选择日期

通过使用 startActivityForResult 来显示日历并返回选择的日期

// 1) start calendar view

startActivityForResult(new Intent(IntentACTION_PICK)setDataAndType(null, CalendarActivityMIME_TYPE), 100);

// 2) implement your own onActivityResult method to handle returned date

@Override

public void onActivityResult(int requestCode, int resultCode, Intent data) {

if(resultCode==RESULT_OK) {

int year = datagetIntExtra("year", 0); // get number of year

int month = datagetIntExtra("month", 0); // get number of month 011

int day = datagetIntExtra("day", 0); // get number of day 031

// format date and display on screen

final Calendar dat = CalendargetInstance();

datset(CalendarYEAR, year);

datset(CalendarMONTH, month);

datset(CalendarDAY_OF_MONTH, day);

// show result

SimpleDateFormat format = new SimpleDateFormat("yyyy MMM dd");

ToastmakeText(TestActivitythis, formatformat(datgetTime()), ToastLENGTH_LONG)show();

}

}

Android读写NFC的步骤:

1首先要在AndroidManifestxml中声明如下配置信息:

使用<uses-permission>元素允许设备访问NFC硬件:

<uses-permission android:name="androidpermissionNFC" />

2使用<uses-sdk>元素设置最小SDK版本:

<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14" />

3NFC TAG的发布系统:

当android设备扫描到一个NFC标签时,会自动寻找最适合的Activity来处理这个TAG,如果有多个Activity满足条件的话,会让用户来选择到底使用哪一个Activity来处理,可以理解为就是简单的事件响应与事件处理。

4如何让一个Activity监听 ”当扫描到NFC标签时” 的这一个事件呢?使用intent filter。

可以理解为当检测到一个NFC标签时,系统自动创建一个相关的Intent对象,含有响应intent filter的Activity将处理这个Intent。

其中,intent filter声明如下:

<intent-filter>

<action android:name="androidnfcactionNDEF_DISCOVERED" ></action>

<category android:name="androidintentcategoryDEFAULT" ></category>

<data android:mimeType="text/plain" ></data>

</intent-filter>

5读取NFC标签中NDEF格式的文本信息:

先判断手机支不支持NFC功能,若支持,是否已设置开启状态。

@Override

protected void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

setContentView(Rlayoutactivity_write);

nfcTView=(TextView)findViewById(Ridinfo_tv);

nfcAdapter = NfcAdaptergetDefaultAdapter(this);

if (nfcAdapter == null) {

nfcTViewsetText("设备不支持NFC!");

finish();

return;

}

if (nfcAdapter!=null&&!nfcAdapterisEnabled()) {

nfcTViewsetText("请在系统设置中先启用NFC功能!");

finish();

return;

}

}

6读取NFC卡的内容

private boolean readFromTag(Intent intent){

Parcelable[] rawArray = intentgetParcelableArrayExtra(NfcAdapterEXTRA_NDEF_MESSAGES);

NdefMessage mNdefMsg = (NdefMessage)rawArray[0];

NdefRecord mNdefRecord = mNdefMsggetRecords()[0];

try {

if(mNdefRecord != null){

readResult = new String(mNdefRecordgetPayload(),"UTF-8");

return true;

}

}

catch (UnsupportedEncodingException e) {

eprintStackTrace();

};

return false;

}

以上就是关于如何在Android7.0系统下通过Intent安装apk全部的内容,包括:如何在Android7.0系统下通过Intent安装apk、027android初级篇之Intent相关介绍、android信息发布系统 需要通过content:uri上传图片到服务器数据库,不知道怎么开始,求解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9430806.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存