请问如何获取一个Activity的根Layout对象

请问如何获取一个Activity的根Layout对象,第1张

解决了,贴上方法,百度的时候看过这个代码许多次,没注意系统也有个Rid,我以为是res里面的。01private static View getRootView(Activity context) 02 { 03 return ((ViewGroup)contextfindViewById(androidRidcontent))getChildAt(0); 04 } 到安卓巴士网站查看回答详情>>

在service中做一个activity的集合 再做一个addActivity的方法和findActivity的方法 将你需要调用handler的activity通过addActivity方法放到service的activity集合中 需要用的时候用findActivity从activity把那个对象取出来!

在Android中,应用程序的版本号是在AndroidManifestxml文件中进行配置的,而PackageInfo类则封装了从该配置文件中获取的所有信息,描述了包内容的整体信息,因此,可以使用PackageInfo对象的versionName属性获取应用的版本号。要怎么获取PackageInfo对象呢?可以通过PackageManager对象来获取。PackageManager是一个检索当前已安装在设备上的相关应用程序包的各种信息的类。PackageManager对象中的getPackageInfo方法可以获取PackageInfo对象,该方法需要传递两个参数:应用包名和条件。通常情况下,应用程序的包名可以通过Activity或Context(Activity继承自Context)的getPackageName()方法获取,而添加可以有很多设置,通常设置为0。最后是PackageManager对象的获取,Context对象提供了getPackageManager()方法来获取该对象。

activity可以 *** 作service了,我们还需要service能 *** 作activity。

我觉得可以有3中方式:

1直接把activity传给service,service通过activity实例随便 *** 作activity

2使用接口回调方式,activity实现相应的接口,service通过接口进行回调,比较灵活

3使用广播

使用广播是比较常见的方式,我们就不具体讲解了,下面我们介绍前面2中方法,具体看代码,用service更新seekbar。

我们的activity代码:

[html] view plain copy

package comhckbindservice;

import androidappActivity;

import androidcontentComponentName;

import androidcontentIntent;

import androidcontentServiceConnection;

import androidosBundle;

import androidosIBinder;

import androidutilLog;

import androidviewView;

import androidwidgetSeekBar;

import androidwidgetToast;

import comhckbindserviceMyServiceMyBuild;

public class MainActivity extends Activity {

private MyService myService; //我们自己的service

private SeekBar pBar; //模拟service更新进度条

private ConnectionService connectionService;

@Override

protected void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

setContentView(Rlayoutmain);

pBar = (SeekBar) findViewById(Ridseekbar);

connectionService=new ConnectionService();

}

public void startService(View view) { //绑定service

bindService(new Intent(this,MyServiceclass), connectionService, 1);

}

/

@author Administrator

实现service接口,用于service绑定时候,回调

/

class ConnectionService implements ServiceConnection

{

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

myService=((MyBuild)service)getMyService(); //获取Myservice对象

/

直接把当前对象传给service,这样service就可以随心所欲的调用本activity的各种可用方法

/

myServicesetMainActivity(MainActivitythis); //把当前对象传递给myservice

/

使用一个接口来实现回调,这样比上面方法更加灵活,推荐

/

// myServicesetOnProgressBarListener(new UpdateProgressListener() {

//

// @Override

// public void updateBar(int size) {

// updateBar(size);

// }

// });

}

@Override

public void onServiceDisconnected(ComponentName name) {

}

}

/

@param size

更新seekbar

/

public void updateBar(int size)

{

pBarsetProgress(size);

}

/

@param view

开始更新seekbar

/

public void startBar(View view) {

if (myService==null) {

ToastmakeText(this, "请先开始service", ToastLENGTH_LONG)show();

}

else {

myServicestartUpdateProgress();

}

}

/

@param view

停止更新seekbar

/

public void stopBar(View view) {

if (myService==null) {

ToastmakeText(this, "更新没有开始", ToastLENGTH_LONG)show();

}

else {

myServicestopUpdateProgress();

}

}

/

@param view

停止service

/

public void stopService(View view) {

myService=null;

unbindService(connectionService);

}

@Override

protected void onDestroy() {

superonDestroy();

try {

unbindService(connectionService);

} catch (Exception e) {

}

}

}

重要代码是onServiceConnected回调方法里面

myService=((MyBuild)service)getMyService(); //获取Myservice对象

获取service对象后,我们想怎么 *** 作它都行了,比如上面的,把activity实例直接通过它的方法传递过去,便于

service调用activity的各种方法。或者,设置传递一个回调接口对象过去,用户回调

service代码:

[html] view plain copy

package comhckbindservice;

import androidappService;

import androidcontentIntent;

import androidosBinder;

import androidosHandler;

import androidosIBinder;

import androidutilLog;

public class MyService extends Service{

private int size=0;

private UpdateProgress updateProgress;

private final long TIME=2000;

private boolean isUpdate=true;

private MainActivity activity;

private UpdateProgressListener listener;

@Override

public IBinder onBind(Intent intent) {

return new MyBuild();

}

@Override

public void onCreate() {

superonCreate();

updateProgress=new UpdateProgress();

}

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

return superonStartCommand(intent, flags, startId);

}

/

@author Administrator

线程用来改变seekbar进度的大小

/

class UpdateProgress implements Runnable

{

@Override

public void run() {

if (isUpdate) {

size+=10;

if (size>100) {

size=0;

}

handlersendEmptyMessage(0);

}

}

}

/

调用更新相应方法,更新进度条

/

Handler handler=new Handler()

{

public void handleMessage(androidosMessage msg) {

/

直接调用activity对象里面的方法

/

if (activity!=null) {

activityupdateBar(size);

}

/

使用接口回调

/

// if (listener!=null) {

// listenerupdateBar(size);

// }

handlerpostDelayed(updateProgress, TIME);

};

};

/

停止更新

/

public void stopUpdateProgress()

{

isUpdate=false;

}

/

开启更新

/

public void startUpdateProgress()

{

if (!isUpdate) {

handlerpost(updateProgress);

}

isUpdate=true;

}

public void onDestroy() {

isUpdate=false;

};

/

@param activity

初始化MainActivity对象

/

public void setMainActivity(MainActivity activity)

{

thisactivity=activity;

}

/

@param listener

初始化UpdateProgressListener对象

/

public void setOnProgressBarListener(UpdateProgressListener listener)

{

thislistener=listener;

}

/

@author Administrator

使用类部类,返回当前service的实例,用于activity,调用service的各种方法

/

class MyBuild extends Binder

{

public MyService getMyService()

{

return MyServicethis;

}

}

}

service里面最重要的就是,最下面我们的MyBuild类部类了,通过它的getMyService方法,获取service的实例

该类的实例实在onBind时候,我们返回给activity的。

接口:

[html] view plain copy

package comhckbindservice;

public interface UpdateProgressListener {

public void updateBar(int size);

}

一个简单接口,用于service回调activity

上面是使用 bindService来启动service的,那么如果我们使用startService启动service时候,上面的办法就不行了。

因为onBind不会执行,我们获取不到IBinder实例。这个时候,我们可以使用设计模式的观察者模式来处理。

如果你想添加悬浮窗口的话可以用WindowManager mWindowMgr = getWindowManager();

mWindowMgr addView(view);

1、在C语言中调用Java类:需要使用JNI(JavaNativeInterface)机制,将C语言与Java语言连接起来,实现C语言调用Java类的功能。

2、获取Activity对象:在C语言中,需要通过JNI机制获取当前正在运行的Activity对象,以便后续进行UI *** 作。

3、获取触摸事件:可以通过Activity对象获取View对象,并注册触摸事件监听器。当用户触摸屏幕时,触摸事件监听器会接收到相应的事件,包括触摸位置、触摸时间等信息。

4、处理触摸事件:在处理触摸事件时,需要先判断事件类型,如果是点击事件,则可以通过事件对象获取点击位置的X坐标和Y坐标,从而获得红米手机的点击位置。

以上就是关于请问如何获取一个Activity的根Layout对象全部的内容,包括:请问如何获取一个Activity的根Layout对象、求助,如何启动一个Activity对象、如何获取app 的包名和activity 名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/web/9649736.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存