任何人都可以告诉我,是否可以使用ADB从应用程序中提取和推送数据库,而无需手机上的root权限?
例如,我知道我的根本魔法和梦想的位置是:
/data/data/com.xxxx.xxxx/databases/xxxx
Run Code Online (Sandbox Code Playgroud)
我知道您可以在没有root的情况下使用ADB,但在尝试使用shell时 - 如果没有root privalges,则无法查看该位置.但有人告诉我,如果你知道你想要的文件,你可以使用推拉吗?
基本上我想从非root用户手机上的MY应用程序中提取数据库进行修改并重新启动.
我遇到的麻烦就是,我拥有的两部手机都是root用户,我无法访问非root用户进行试用.
我目前正在尝试将一些来自Android应用程序的数据发送到php服务器(两者都由我控制).
在应用程序中的表单上收集了大量数据,这些数据被写入数据库.这一切都有效.
在我的主要代码中,首先我创建了一个JSONObject(我在这里为此示例删除了它):
JSONObject j = new JSONObject();
j.put("engineer", "me");
j.put("date", "today");
j.put("fuel", "full");
j.put("car", "mine");
j.put("distance", "miles");
Run Code Online (Sandbox Code Playgroud)
接下来,我将对象传递给发送,并收到响应:
String url = "http://www.server.com/thisfile.php";
HttpResponse re = HTTPPoster.doPost(url, j);
String temp = EntityUtils.toString(re.getEntity());
if (temp.compareTo("SUCCESS")==0)
{
Toast.makeText(this, "Sending complete!", Toast.LENGTH_LONG).show();
}
Run Code Online (Sandbox Code Playgroud)
HTTPPoster类:
public static HttpResponse doPost(String url, JSONObject c) throws ClientProtocolException, IOException
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost request = new HttpPost(url);
HttpEntity entity;
StringEntity s = new StringEntity(c.toString());
s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
entity = s;
request.setEntity(entity);
HttpResponse response;
response = …Run Code Online (Sandbox Code Playgroud) 我使用以下PHP:
$xml = simplexml_load_file($request_url) or die("url not loading");
Run Code Online (Sandbox Code Playgroud)
我用:
$status = $xml->Response->Status->code;
Run Code Online (Sandbox Code Playgroud)
检查响应的状态.200 bening一切都好,继续.
但是,如果我收到403拒绝访问错误,我如何在PHP中捕获这个,以便我可以返回用户友好的警告?
我目前有两个单独的应用程序,都执行单独的任务,但是当我需要一个应用程序使用另一个应用程序时,在有限的场合时间.
所以我用一个函数来检查所需的应用程序是否存在:
public static boolean isIntentAvailable(Context context, String action)
{
final PackageManager packageManager = context.getPackageManager();
final Intent intent = new Intent(action);
List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
Run Code Online (Sandbox Code Playgroud)
如果是,那么我使用以下内容在那里开始一个额外的活动:
if (isIntentAvailable(ListPOI.this, "com.me.myapp.MY_MAP"))
{
Intent i = new Intent("com.me.myapp.MY_MAP");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("place", true);
startActivity(i);
}
Run Code Online (Sandbox Code Playgroud)
setFlags表示如果用户按下home,然后他们返回第一个应用程序,它会打开,它不会打开这里调用的第二个应用程序.
这一切都很好,第一次.然而,在第二次调用它之后,第二个应用程序恢复,所以它没有获取已经通过的"额外",我怎样才能确保我得到额外的?