android中intent的作用

android中intent的作用

android中intent的作用


意图和意图过滤器Intents and Intent Filters
一个应用程序的三个核心组件-活动,服务和广播接收器是通过消息即意图(Intents)来激活的。Intent息传送是相同或不同应用中组件运行时晚绑定的一种机制。意图本身,一个意图对象,是一个包含被执行操作抽象描述的被动的数据结构-或者,对于广播而言,是某件已经发生并被声明的事情的描述。存在不同的机制来传送意图到每种组件中:
•一个意图对象是传递给Context.startActivity()或者Activity.startActivityForResult()来启动一个活动或者让一个存在的活动去做某些新的事情。
•一个意图对象是传递给Context.startService()来发起一个服务或者递交新的指令给运行中的服务。类似的,一个意图能被传递给Context.bindService() 来在调用组件和一个目标服务之间建立连接。作为一个可选项,它可以发起这个服务如果还没运行的话。
•传递给任意广播方法(例如Context.sendBroadcast(),Context.sendOrderedBroadcast(), 或者Context.sendStickyBroadcast())的意图对象被传递给所有感兴趣的广播接收者。许多种广播产生于系统代码。
在每个例子里,Android系统找到合适的活动,服务,或者一组广播接收者来回应这个意图,必要时实例化它们。这些消息传送系统没有重叠:广播意图仅被传递给广播接收者,永远不会给活动或者服务。一个传送给startActivity()的意图是只会被传递给一个活动,永远不会给一个服务或广播接收者,如此类推。
这篇文档以意图对象的描述开始,然后描述Android映射意图到组件的规则-如何解决哪个组件应该接收一个意图消息。对于没有显式命名一个目标组件的意图,这个过程包括对照与潜在目标相关联的意图过滤器来测试这个意图对象。

意图对象Intent Objects
一个意图Intent对象是一堆信息。它包含接收这个意图的组件感兴趣的信息(例如将要采取的动作和操作的数据)再加上Android系统感兴趣的信息(例如应该处理这个意图的组件类别和如何启动一个目标活动的指令):
组件名称Component name
应该处理这个意图的组件名字. 这个字段是一个ComponentName对象- 一个组合物:目标组件的完全合格的类名 (比如“com.example.project.app.FreneticActivity“) 以及应用程序描述文件中设置的组件所在包的名字(比如, “com.example.project“). 这个组件名字的包部分和描述文件中设置的包名字不一定要匹配。
组件名字是可选的。如果被设置了,这个意图对象将被传递到指定的类。如果没有, Android使用另外的意图对象中的信息去定位一个合适的目标- 请看本文稍后描述的意图解析Intent Resolution。
组件名字通过如下方法:setComponent(),setClass(), 或者setClassName()设置并通过getComponent()读取。

如何获得当前的activity android


android开发中获取当前的Activity有多种情况;

  1. 在Activity中,this就是当前的Activity,例如this.startActivity。

  2. 在Fragment中可以通过 getActivity()来得到当前装载这个Fragment的Activity。

  3. 通过Activity堆栈来获取当前显示的这个Activity

    ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);

    ComponentName cn = am.getRunningTasks(1).get(0).topActivity;


ComponentName怎么用


ComponentName(组件名称)是用来打开其他应用程序中的Activity或服务的。ComponentName com = new ComponentName(“com.example“, “com.example.Test1“); //组件名称,第一个参数是包名,也是主配置文件Manifest里设置好的包名第二个是类名,要带上包名Intent intent = new Intent();//设置部件intent.setComponent(com);Test.this.startActivity(intent);

请教 js 中的 const name: string = getComponentName(componentOptions) 中 : 是什么语法


getComponent 是获得组件
getSource是获得源对象
getComponent()返回事件的始发者。
返回:发起事件的 Component 对象,如果该对象不是一个 Component,则返回 null。getSource()最初发生 Event 的对象。 返回:最初发生 Event 的对象。

Android中的Handler详解以及和Thread的区别


一、Handler的定义:
主要接受子线程发送的数据, 并用此数据配合主线程更新UI.
解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发, 比如说, 你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作。 如果此时需要一个耗时的操作,例如: 联网读取数据, 或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,,如果你放在主线程中的话,界面会出现假死现象, 如果5秒钟还没有完成的话,,会收到Android系统的一个错误提示 “强制关闭“. 这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,,Android主线程是线程不安全的,也就是说,更新UI只能在主线程中更新,子线程中操作是危险的. 这个时候,Handler就出现了.,来解决这个复杂的问题 , 由于Handler运行在主线程中(UI线程中), 它与子线程可以通过Message对象来传递数据, 这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据) , 把这些消息放入主线程队列中,配合主线程进行更新UI。
二、Handler一些特点
handler可以分发Message对象和Runnable对象到主线程中, 每个Handler实例,都会绑定到创建他的线程中(一般是位于主线程),
它有两个作用: (1): 安排消息或Runnable 在某个主线程中某个地方执行, (2)安排一个动作在不同的线程中执行

Handler中分发消息的一些方法

[html] view plain copy
post(Runnable)
postAtTime(Runnable,long)
postDelayed(Runnable long)
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)
以上post类方法允许你排列一个Runnable对象到主线程队列中,
sendMessage类方法, 允许你安排一个带数据的Message对象到队列中,等待更新.
三、Handler实例
(1) 子类需要继承Hendler类,并重写handleMessage(Message msg) 方法, 用于接受线程数据
以下为一个实例,它实现的功能为 : 通过线程修改界面Button的内容
[html] view plain copy
public class MyHandlerActivity extends Activity {

Button button;

MyHandler myHandler;
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.handlertest);
button = (Button) findViewById(R.id.button);

myHandler = new MyHandler();

// 当创建一个新的Handler实例时, 它会绑定到当前线程和消息的队列中,开始分发数据

// Handler有两个作用, (1) : 定时执行Message和Runnalbe 对象

// (2): 让一个动作,在不同的线程中执行.
// 它安排消息,用以下方法

// post(Runnable)

// postAtTime(Runnable,long)

// postDelayed(Runnable,long)

// sendEmptyMessage(int)

// sendMessage(Message);

// sendMessageAtTime(Message,long)

// sendMessageDelayed(Message,long)
// 以上方法以 post开头的允许你处理Runnable对象

//sendMessage()允许你处理Message对象(Message里可以包含数据,)
MyThread m = new MyThread();

new Thread(m).start();

}
/**

* 接受消息,处理消息 ,此Handler会与当前主线程一块运行

* */
class MyHandler extends Handler {

public MyHandler() {

}
public MyHandler(Looper L) {

super(L);

}
// 子类必须重写此方法,接受数据

@Override

public void handleMessage(Message msg) {

// TODO Auto-generated method stub

Log.d(“MyHandler“, “handleMessage......“);

super.handleMessage(msg);

// 此处可以更新UI

Bundle b = msg.getData();

String color = b.getString(“color“);

MyHandlerActivity.this.button.append(color);
}

}
class MyThread implements Runnable {

public void run() {
try {

Thread.sleep(10000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}
Log.d(“thread.......“, “mThread........“);

Message msg = new Message();

Bundle b = new Bundle();// 存放数据

b.putString(“color“, “我的“);

msg.setData(b);
MyHandlerActivity.this.myHandler.sendMessage(msg); // 向Handler发送消息,更新UI
}

}
}
例外一个案例:
[html] view plain copy
package com.example.span.view;

import java.util.LinkedList;
import android.app.AlertDialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.RectF;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Toast;

import com.example.span.view.domain.Block;

/**
* 2013-6-6 上午9:24:58
*
* @author 乔晓松
*/
public class GameView extends View {

public static boolean flag = true;
public static Block block;
public Handler handler;
public static int dir = 2;
public static final int DIRTOP = -1;
public static final int DIRLEFT = -2;
public static final int DIRDOWN = 1;
public static final int DIRRIGHT = 2;
public static int descount = 2;
public Canvas canvas;
public static Food food;
public LinkedList《Point》 points = new LinkedList《Point》();

public LinkedList《Point》 getPoints() {
return points;
}

public void setPoints(LinkedList《Point》 points) {
this.points = points;
}

public GameView(Context context, AttributeSet attrs) {
super(context, attrs);
block = new Block(this);
for (int i = 0; i 《 3; i++) {
Point point = new Point(block.getCx(), block.getCy());
block.setCx(block.getCx() - 20);
points.addLast(point);
}
food = new Food(this);
handler = new Handler() {

@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case DIRLEFT:
if (msg.what + descount != 0) {
descount = -2;
block.moveLeft();
} else {
block.moveRight();
}
break;
case DIRRIGHT:
if (msg.what + descount != 0) {
descount = 2;
block.moveRight();
} else {
block.moveLeft();
}
break;
case DIRTOP:
if (msg.what + descount != 0) {
descount = -1;
block.giveUp();
} else {
block.downLoad();
}
break;
case DIRDOWN:
if (msg.what + descount != 0) {
descount = 1;
block.downLoad();
} else {
block.giveUp();
}
break;
case -3:
Toast.makeText(getContext(), “Game Over“, Toast.LENGTH_LONG)
.show();
new AlertDialog.Builder(getContext())
.setTitle(“游戏提示“)
.setMessage(“Game Over“)
.setPositiveButton(“退出“,
new DialogInterface.OnClickListener() {

@Override
public void onClick(
DialogInterface dialog,
int which) {
Thread.currentThread().stop();
}
})
.setNegativeButton(“返回菜单“,
new DialogInterface.OnClickListener() {

@Override
public void onClick(
DialogInterface dialog,
int which) {

Intent intent = new Intent();
intent.setAction(“android.intent.action.MAI“);
intent.addCategory(“android.intent.category.LAUNCHER“);
intent.setFlags(0x10200000);
intent.setComponent(new ComponentName(
“com.example.span“,
“com.example.span.SpanActivity“));
getContext().startActivity(intent);

}
}).show();
break;
}
}
};
new Thread(new Runnable() {

@Override
public void run() {
while (flag) {
try {
Thread.sleep(500);
handler.sendEmptyMessage(dir);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
handler.sendEmptyMessage(-3);
}
}).start();
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
System.out.println(keyCode);
return super.onKeyDown(keyCode, event);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
this.canvas = canvas;
food.chsw(canvas);
/*
* if (descount == 2) { chsw(); } else { if (points.contains(new
* Point(40, 40))) { System.out.println(“吃掉食物了,,..“); } else { chsw(); }
* }

怎么打开第三方应用程序




回答



苹果如何打开第三方应用的图文步骤:





1、首先需要安装好通过第三方渠道安装好的APP软件;





2、点击打开之后会出现如下这种情况,出现这种情况就表示这个商品属于第三方软件,未经过苹果APPstore授权,需要进行授信操作;





3、找到手机设置的入口,点击设置,进入设置页面进行相关操作;





4、点击通用按钮,进入通用界面,下拉到最下方找到设备管理选项。具体如下;





5、点击设备管理选项,进行设备管理,进行授信操作,授信操作之后即可打开通过第三方渠道安装的APP啦




更多4条



如何给桌面图标添加应用程序


1.先左键选中你要的图标。
  2.再右键点击这个图标,选择复制。
  3.右键点击开始
  4.选择弹出的对话框,单击属性。
  5.在弹出的对话框里勾选经典【开始】菜单。
  6.点击自定义。
  7.选择点击”高级“
  8.在弹出的对话框中,注意如下图在选择的
红圈
范围内,点击右键。
  9.选择”粘贴
快捷方式
“。完成。

Intent的基本用法是什么有哪些主要属性(


Intent七大属性是指Intent的ComponentName、Action、Category、Data、Type、Extra以及Flag,七个属性,总体上可以分为3类:
第一类:启动,有ComponentName(显式),Action(隐式),Category(隐式)。
第二类:传值,有Data(隐式),Type(隐式),Extra(隐式、显式)。
第三类:启动模式,有Flag。

如何将两个小程序整合在一起


您好,一个程序调用另一个程序的方法:
//方法一
Intent intent=new Intent();
//包名 包名+类名(全路径)
intent.setClassName(“com.linxcool“, “com.linxcool.PlaneActivity“);
startActivity(intent);
//方法二
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开发中: ServiceConnection类的onServiceDisconnected(ComponentName name)在什么时候执行


ServiceConnection类中的两个方法非别在服务连接成功时、不成功时调用。
其中onServiceDisconnected()方法在连接正常关闭的情况下是不会被调用的, 该方法只在Service 被破坏了或者被杀死的时候调用.
例如, 系统资源不足, 要关闭一些Services, 刚好连接绑定的 Service 是被关闭者之一, 这个时候onServiceDisconnected() 就会被调用。

推荐阅读